blob: b33bb44fae79a4f25b18d564ff0263e2ba3bfbe3 [file] [log] [blame]
/*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is MPEG4IP.
*
* The Initial Developer of the Original Code is Cisco Systems Inc.
* Portions created by Cisco Systems Inc. are
* Copyright (C) Cisco Systems Inc. 2001. All Rights Reserved.
*
* Contributor(s):
* Dave Mackie dmackie@cisco.com
*/
#ifndef MP4V2_IMPL_MP4UTIL_H
#define MP4V2_IMPL_MP4UTIL_H
namespace mp4v2 { namespace impl {
///////////////////////////////////////////////////////////////////////////////
#include <assert.h>
#define LIBMPV42_STRINGIFY(x) #x
#ifndef ASSERT
# define ASSERT(expr) \
if (!(expr)) { \
throw new Exception("assert failure: " LIBMPV42_STRINGIFY((expr)), __FILE__, __LINE__, __FUNCTION__ ); \
}
#endif
#define WARNING(expr) \
if (expr) { \
log.errorf("Warning (%s) in %s at line %u", \
LIBMPV42_STRINGIFY(expr), __FILE__, __LINE__); \
}
///////////////////////////////////////////////////////////////////////////////
#define CHECK_AND_FREE(a) if ((a) != NULL) { free((void *)(a)); (a) = NULL;}
#define NUM_ELEMENTS_IN_ARRAY(name) ((sizeof((name))) / (sizeof(*(name))))
///////////////////////////////////////////////////////////////////////////////
inline void* MP4Malloc(size_t size) {
if (size == 0) return NULL;
void* p = malloc(size);
if (p == NULL && size > 0) {
throw new PlatformException("malloc failed",errno,__FILE__,__LINE__,__FUNCTION__);
}
return p;
}
inline void* MP4Calloc(size_t size) {
if (size == 0) return NULL;
return memset(MP4Malloc(size), 0, size);
}
inline char* MP4Stralloc(const char* s1) {
char* s2 = (char*)MP4Malloc(strlen(s1) + 1);
strcpy(s2, s1);
return s2;
}
inline void* MP4Realloc(void* p, uint32_t newSize) {
// workaround library bug
if (p == NULL && newSize == 0) {
return NULL;
}
void* temp = realloc(p, newSize);
if (temp == NULL && newSize > 0) {
throw new PlatformException("malloc failed",errno,__FILE__,__LINE__,__FUNCTION__);
}
return temp;
}
uint32_t STRTOINT32( const char* );
void INT32TOSTR( uint32_t, char* );
MP4Timestamp MP4GetAbsTimestamp();
uint64_t MP4ConvertTime(uint64_t t,
uint32_t oldTimeScale, uint32_t newTimeScale);
bool MP4NameFirstMatches(const char* s1, const char* s2);
bool MP4NameFirstIndex(const char* s, uint32_t* pIndex);
char* MP4NameFirst(const char *s);
const char* MP4NameAfterFirst(const char *s);
char* MP4ToBase16(const uint8_t* pData, uint32_t dataSize);
char* MP4ToBase64(const uint8_t* pData, uint32_t dataSize);
const char* MP4NormalizeTrackType(const char* type);
///////////////////////////////////////////////////////////////////////////////
}} // namespace mp4v2::impl
#endif // MP4V2_IMPL_MP4UTIL_H