Initial setup for CLion
This commit is contained in:
126
MediaClient/rtp/mpeg4.cpp
Normal file
126
MediaClient/rtp/mpeg4.cpp
Normal file
@@ -0,0 +1,126 @@
|
||||
/***************************************************************************************
|
||||
*
|
||||
* IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
||||
*
|
||||
* By downloading, copying, installing or using the software you agree to this license.
|
||||
* If you do not agree to this license, do not download, install,
|
||||
* copy or use the software.
|
||||
*
|
||||
* Copyright (C) 2014-2024, Happytimesoft Corporation, all rights reserved.
|
||||
*
|
||||
* Redistribution and use in binary forms, with or without modification, are permitted.
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed
|
||||
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||
* CONDITIONS OF ANY KIND, either express or implied. See the License for the specific
|
||||
* language governing permissions and limitations under the License.
|
||||
*
|
||||
****************************************************************************************/
|
||||
|
||||
#include "sys_inc.h"
|
||||
#include "mpeg4.h"
|
||||
|
||||
|
||||
static BOOL mpeg4_get_nibble(char const*& configStr, uint8& resultNibble)
|
||||
{
|
||||
char c = configStr[0];
|
||||
if (c == '\0')
|
||||
{
|
||||
return FALSE; // we've reached the end
|
||||
}
|
||||
|
||||
if (c >= '0' && c <= '9')
|
||||
{
|
||||
resultNibble = c - '0';
|
||||
}
|
||||
else if (c >= 'A' && c <= 'F')
|
||||
{
|
||||
resultNibble = 10 + c - 'A';
|
||||
}
|
||||
else if (c >= 'a' && c <= 'f')
|
||||
{
|
||||
resultNibble = 10 + c - 'a';
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
++configStr; // move to the next nibble
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static BOOL mpeg4_get_byte(char const*& configStr, uint8& resultByte)
|
||||
{
|
||||
resultByte = 0; // by default, in case parsing fails
|
||||
|
||||
uint8 firstNibble;
|
||||
if (!mpeg4_get_nibble(configStr, firstNibble))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
resultByte = firstNibble << 4;
|
||||
|
||||
uint8 secondNibble = 0;
|
||||
if (!mpeg4_get_nibble(configStr, secondNibble) && configStr[0] != '\0')
|
||||
{
|
||||
// There's a second nibble, but it's malformed
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
resultByte |= secondNibble;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
uint8 * mpeg4_parse_config(char const* configStr, uint32& configSize)
|
||||
{
|
||||
uint8 * config = NULL;
|
||||
|
||||
do
|
||||
{
|
||||
if (configStr == NULL)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
configSize = ((int)strlen(configStr)+1)/2;
|
||||
|
||||
config = (uint8 *) malloc(configSize);
|
||||
if (config == NULL)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
uint32 i;
|
||||
|
||||
for (i = 0; i < configSize; ++i)
|
||||
{
|
||||
if (!mpeg4_get_byte(configStr, config[i]))
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i != configSize)
|
||||
{
|
||||
break; // part of the string was bad
|
||||
}
|
||||
|
||||
return config;
|
||||
} while (0);
|
||||
|
||||
configSize = 0;
|
||||
|
||||
if (config)
|
||||
{
|
||||
free(config);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user