/* * 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 #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