summaryrefslogtreecommitdiffstats
path: root/debian/mp4v2/mp4v2-2.0.0~dfsg0/src/mp4.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'debian/mp4v2/mp4v2-2.0.0~dfsg0/src/mp4.cpp')
-rw-r--r--debian/mp4v2/mp4v2-2.0.0~dfsg0/src/mp4.cpp4563
1 files changed, 0 insertions, 4563 deletions
diff --git a/debian/mp4v2/mp4v2-2.0.0~dfsg0/src/mp4.cpp b/debian/mp4v2/mp4v2-2.0.0~dfsg0/src/mp4.cpp
deleted file mode 100644
index 36052986..00000000
--- a/debian/mp4v2/mp4v2-2.0.0~dfsg0/src/mp4.cpp
+++ /dev/null
@@ -1,4563 +0,0 @@
-/*
- * 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 - 2005. All Rights Reserved.
- *
- * 3GPP features implementation is based on 3GPP's TS26.234-v5.60,
- * and was contributed by Ximpo Group Ltd.
- *
- * Portions created by Ximpo Group Ltd. are
- * Copyright (C) Ximpo Group Ltd. 2003, 2004. All Rights Reserved.
- *
- * Contributor(s):
- * Dave Mackie [email protected]
- * Alix Marchandise-Franquet [email protected]
- * Ximpo Group Ltd. [email protected]
- * Bill May [email protected]
- */
-
-/*
- * MP4 library API functions
- *
- * These are wrapper functions that provide C linkage conventions
- * to the library, and catch any internal errors, ensuring that
- * a proper return value is given.
- */
-
-#include "src/impl.h"
-
-using namespace mp4v2::impl;
-
-static MP4File *ConstructMP4File ( void )
-{
- MP4File* pFile = NULL;
- try {
- pFile = new MP4File();
- }
- catch( std::bad_alloc ) {
- mp4v2::impl::log.errorf("%s: unable to allocate MP4File", __FUNCTION__);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: unknown exception constructing MP4File", __FUNCTION__ );
- }
-
- return pFile;
-}
-
-extern "C" {
-
-const char* MP4GetFilename( MP4FileHandle hFile )
-{
- if (!MP4_IS_VALID_FILE_HANDLE(hFile))
- return NULL;
- try
- {
- ASSERT(hFile);
- MP4File& file = *static_cast<MP4File*>(hFile);
- ASSERT(file.GetFilename().c_str());
- return file.GetFilename().c_str();
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: unknown exception accessing MP4File "
- "filename", __FUNCTION__ );
- }
-
- return NULL;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-MP4FileHandle MP4Read( const char* fileName )
-{
- if (!fileName)
- return MP4_INVALID_FILE_HANDLE;
-
- MP4File *pFile = ConstructMP4File();
- if (!pFile)
- return MP4_INVALID_FILE_HANDLE;
-
- try
- {
- ASSERT(pFile);
- pFile->Read( fileName, NULL );
- return (MP4FileHandle)pFile;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: \"%s\": failed", __FUNCTION__,
- fileName );
- }
-
- if (pFile)
- delete pFile;
- return MP4_INVALID_FILE_HANDLE;
-}
-
-MP4FileHandle MP4ReadProvider( const char* fileName, const MP4FileProvider* fileProvider )
-{
- if (!fileName)
- return MP4_INVALID_FILE_HANDLE;
-
- MP4File *pFile = ConstructMP4File();
- if (!pFile)
- return MP4_INVALID_FILE_HANDLE;
-
- try {
- pFile->Read( fileName, fileProvider );
- return (MP4FileHandle)pFile;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: \"%s\": failed", __FUNCTION__,
- fileName );
- }
-
- if (pFile)
- delete pFile;
- return MP4_INVALID_FILE_HANDLE;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
- MP4FileHandle MP4Create (const char* fileName,
- uint32_t flags)
- {
- return MP4CreateEx(fileName, flags);
- }
-
- MP4FileHandle MP4CreateEx (const char* fileName,
- uint32_t flags,
- int add_ftyp,
- int add_iods,
- char* majorBrand,
- uint32_t minorVersion,
- char** supportedBrands,
- uint32_t supportedBrandsCount)
- {
- if (!fileName)
- return MP4_INVALID_FILE_HANDLE;
-
- MP4File* pFile = ConstructMP4File();
- if (!pFile)
- return MP4_INVALID_FILE_HANDLE;
-
- try {
- ASSERT(pFile);
- // LATER useExtensibleFormat, moov first, then mvex's
- pFile->Create(fileName, flags, add_ftyp, add_iods,
- majorBrand, minorVersion,
- supportedBrands, supportedBrandsCount);
- return (MP4FileHandle)pFile;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: \"%s\": failed", __FUNCTION__,
- fileName );
- }
-
- if (pFile)
- delete pFile;
- return MP4_INVALID_FILE_HANDLE;
- }
-
- MP4FileHandle MP4Modify(const char* fileName,
- uint32_t flags)
- {
- if (!fileName)
- return MP4_INVALID_FILE_HANDLE;
-
- MP4File* pFile = ConstructMP4File();
- if (!pFile)
- return MP4_INVALID_FILE_HANDLE;
-
- try {
- ASSERT(pFile);
- // LATER useExtensibleFormat, moov first, then mvex's
- if (pFile->Modify(fileName))
- return (MP4FileHandle)pFile;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: \"%s\": failed", __FUNCTION__,
- fileName );
- }
-
- if (pFile)
- delete pFile;
- return MP4_INVALID_FILE_HANDLE;
- }
-
- bool MP4Optimize(const char* fileName,
- const char* newFileName)
- {
- // Must at least have fileName for in-place optimize; newFileName
- // can be null, however.
- if (fileName == NULL)
- return false;
-
- MP4File* pFile = ConstructMP4File();
- if (!pFile)
- return MP4_INVALID_FILE_HANDLE;
-
- try {
- ASSERT(pFile);
- pFile->Optimize(fileName, newFileName);
- delete pFile;
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s(%s,%s) failed", __FUNCTION__,
- fileName, newFileName );
- }
-
- if (pFile)
- delete pFile;
- return false;
- }
-
- void MP4Close(MP4FileHandle hFile, uint32_t flags)
- {
- if( !MP4_IS_VALID_FILE_HANDLE( hFile ))
- return;
-
- MP4File& f = *(MP4File*)hFile;
- try {
- f.Close(flags);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
-
- delete &f;
- }
-
- bool MP4Dump(
- MP4FileHandle hFile,
- bool dumpImplicits)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->Dump(dumpImplicits);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- MP4Duration MP4GetDuration(MP4FileHandle hFile)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetDuration();
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_DURATION;
- }
-
- uint32_t MP4GetTimeScale(MP4FileHandle hFile)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetTimeScale();
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return 0;
- }
-
- bool MP4SetTimeScale(MP4FileHandle hFile, uint32_t value)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->SetTimeScale(value);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- uint8_t MP4GetODProfileLevel(MP4FileHandle hFile)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetODProfileLevel();
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return 0;
- }
-
- bool MP4SetODProfileLevel(MP4FileHandle hFile, uint8_t value)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->SetODProfileLevel(value);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- uint8_t MP4GetSceneProfileLevel(MP4FileHandle hFile)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetSceneProfileLevel();
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return 0;
- }
-
- bool MP4SetSceneProfileLevel(MP4FileHandle hFile, uint8_t value)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->SetSceneProfileLevel(value);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- uint8_t MP4GetVideoProfileLevel(MP4FileHandle hFile,
- MP4TrackId trackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetVideoProfileLevel();
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- if (MP4_IS_VALID_TRACK_ID(trackId)) {
- uint8_t *foo;
- uint32_t bufsize;
- uint8_t type;
- // for mpeg4 video tracks, try to look for the VOSH header,
- // which has this info.
- type = MP4GetTrackEsdsObjectTypeId(hFile, trackId);
- if (type == MP4_MPEG4_VIDEO_TYPE) {
- if (MP4GetTrackESConfiguration(hFile,
- trackId,
- &foo,
- &bufsize)) {
- uint8_t *ptr = foo;
- while (bufsize > 0) {
- if (MP4V2_HTONL(*(uint32_t *)ptr) == 0x1b0) {
- uint8_t ret = ptr[4];
- free(foo);
- return ret;
- }
- ptr++;
- bufsize--;
- }
- free(foo);
- }
- }
- }
-
- }
- return 0;
- }
-
- void MP4SetVideoProfileLevel(MP4FileHandle hFile, uint8_t value)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->SetVideoProfileLevel(value);
- return ;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return ;
- }
-
- uint8_t MP4GetAudioProfileLevel(MP4FileHandle hFile)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetAudioProfileLevel();
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return 0;
- }
-
- void MP4SetAudioProfileLevel(MP4FileHandle hFile, uint8_t value)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->SetAudioProfileLevel(value);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- }
-
- uint8_t MP4GetGraphicsProfileLevel(MP4FileHandle hFile)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetGraphicsProfileLevel();
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return 0;
- }
-
- bool MP4SetGraphicsProfileLevel(MP4FileHandle hFile, uint8_t value)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->SetGraphicsProfileLevel(value);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- /* generic file properties */
-
- bool MP4HaveAtom (MP4FileHandle hFile, const char *atomName)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File *)hFile)->FindAtom(atomName) != NULL;
- } catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4GetIntegerProperty(
- MP4FileHandle hFile, const char* propName, uint64_t *retvalue)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- *retvalue = ((MP4File*)hFile)->GetIntegerProperty(propName);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4GetFloatProperty(
- MP4FileHandle hFile, const char* propName, float *retvalue)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- *retvalue = ((MP4File*)hFile)->GetFloatProperty(propName);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4GetStringProperty(
- MP4FileHandle hFile, const char* propName,
- const char **retvalue)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- *retvalue = ((MP4File*)hFile)->GetStringProperty(propName);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4GetBytesProperty(
- MP4FileHandle hFile, const char* propName,
- uint8_t** ppValue, uint32_t* pValueSize)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->GetBytesProperty(propName, ppValue, pValueSize);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- *ppValue = NULL;
- *pValueSize = 0;
- return false;
- }
-
- bool MP4SetIntegerProperty(
- MP4FileHandle hFile, const char* propName, int64_t value)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->SetIntegerProperty(propName, value);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4SetFloatProperty(
- MP4FileHandle hFile, const char* propName, float value)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->SetFloatProperty(propName, value);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4SetStringProperty(
- MP4FileHandle hFile, const char* propName, const char* value)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->SetStringProperty(propName, value);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4SetBytesProperty(
- MP4FileHandle hFile, const char* propName,
- const uint8_t* pValue, uint32_t valueSize)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->SetBytesProperty(propName, pValue, valueSize);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- /* track operations */
-
- MP4TrackId MP4AddTrack(
- MP4FileHandle hFile, const char* type,uint32_t timeScale)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->AddSystemsTrack(type, timeScale);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TRACK_ID;
- }
-
- MP4TrackId MP4AddSystemsTrack(
- MP4FileHandle hFile, const char* type)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->AddSystemsTrack(type);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TRACK_ID;
- }
-
- MP4TrackId MP4AddODTrack(MP4FileHandle hFile)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->AddODTrack();
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TRACK_ID;
- }
-
- MP4TrackId MP4AddSceneTrack(MP4FileHandle hFile)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->AddSceneTrack();
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TRACK_ID;
- }
-
- MP4TrackId MP4AddULawAudioTrack(
- MP4FileHandle hFile,
- uint32_t timeScale)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->
- AddULawAudioTrack(timeScale);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TRACK_ID;
- }
-
- MP4TrackId MP4AddALawAudioTrack(
- MP4FileHandle hFile,
- uint32_t timeScale)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->
- AddALawAudioTrack(timeScale);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TRACK_ID;
- }
-
- MP4TrackId MP4AddAudioTrack(
- MP4FileHandle hFile,
- uint32_t timeScale,
- MP4Duration sampleDuration,
- uint8_t audioType)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->
- AddAudioTrack(timeScale, sampleDuration, audioType);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TRACK_ID;
- }
-
-//
-// API to initialize ismacryp properties to sensible defaults.
-// if the input pointer is null then an ismacryp params is malloc'd.
-// caller must see to it that it is properly disposed of.
-//
- mp4v2_ismacrypParams *MP4DefaultISMACrypParams(mp4v2_ismacrypParams *ptr)
- {
- try
- {
- if (ptr == NULL) {
- ptr = (mp4v2_ismacrypParams *)MP4Malloc(sizeof(mp4v2_ismacrypParams));
- }
- memset(ptr, 0, sizeof(*ptr));
- return ptr;
- }
-
- catch (...) {
- return MP4_INVALID_TRACK_ID;
- }
- }
-
-
- MP4TrackId MP4AddAC3AudioTrack(
- MP4FileHandle hFile,
- uint32_t samplingRate,
- uint8_t fscod,
- uint8_t bsid,
- uint8_t bsmod,
- uint8_t acmod,
- uint8_t lfeon,
- uint8_t bit_rate_code)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->
- AddAC3AudioTrack(samplingRate, fscod, bsid, bsmod, acmod, lfeon, bit_rate_code);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TRACK_ID;
- }
-
- MP4TrackId MP4AddEncAudioTrack(MP4FileHandle hFile,
- uint32_t timeScale,
- MP4Duration sampleDuration,
- mp4v2_ismacrypParams *icPp,
- uint8_t audioType)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- if (icPp == NULL) {
- return ((MP4File*)hFile)->
- AddEncAudioTrack(timeScale, sampleDuration, audioType,
- 0, 0,
- 0, 0,
- false, NULL, false);
- } else {
- return ((MP4File*)hFile)->
- AddEncAudioTrack(timeScale, sampleDuration, audioType,
- icPp->scheme_type, icPp->scheme_version,
- icPp->key_ind_len, icPp->iv_len,
- icPp->selective_enc, icPp->kms_uri, true);
- }
- } catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TRACK_ID;
- }
- MP4TrackId MP4AddAmrAudioTrack(
- MP4FileHandle hFile,
- uint32_t timeScale,
- uint16_t modeSet,
- uint8_t modeChangePeriod,
- uint8_t framesPerSample,
- bool isAmrWB)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->
- AddAmrAudioTrack(timeScale, modeSet, modeChangePeriod, framesPerSample, isAmrWB);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TRACK_ID;
- }
-
- void MP4SetAmrVendor(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- uint32_t vendor)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->
- SetAmrVendor(trackId, vendor);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- }
-
- void MP4SetAmrDecoderVersion(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- uint8_t decoderVersion)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->
- SetAmrDecoderVersion(trackId, decoderVersion);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- }
-
- void MP4SetAmrModeSet(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- uint16_t modeSet)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->
- SetAmrModeSet(trackId, modeSet);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- }
-
- uint16_t MP4GetAmrModeSet(
- MP4FileHandle hFile,
- MP4TrackId trackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->
- GetAmrModeSet(trackId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return 0;
- }
-
- MP4TrackId MP4AddHrefTrack (MP4FileHandle hFile,
- uint32_t timeScale,
- MP4Duration sampleDuration,
- const char *base_url)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- MP4File *pFile = (MP4File *)hFile;
-
- return pFile->AddHrefTrack(timeScale,
- sampleDuration,
- base_url);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TRACK_ID;
- }
-
- const char *MP4GetHrefTrackBaseUrl (MP4FileHandle hFile,
- MP4TrackId trackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetTrackStringProperty(trackId,
- "mdia.minf.stbl.stsd.href.burl.base_url");
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return NULL;
- }
-
- MP4TrackId MP4AddVideoTrack(
- MP4FileHandle hFile,
- uint32_t timeScale,
- MP4Duration sampleDuration,
- uint16_t width,
- uint16_t height,
- uint8_t videoType)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- MP4File *pFile = (MP4File *)hFile;
-
- return pFile->AddMP4VideoTrack(timeScale,
- sampleDuration,
- width,
- height,
- videoType);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TRACK_ID;
- }
-
- MP4TrackId MP4AddEncVideoTrack(MP4FileHandle hFile,
- uint32_t timeScale,
- MP4Duration sampleDuration,
- uint16_t width,
- uint16_t height,
- mp4v2_ismacrypParams *icPp,
- uint8_t videoType,
- const char *oFormat)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
-
- // test for valid ismacrypt session descriptor
- if (icPp == NULL) {
- return MP4_INVALID_TRACK_ID;
- }
- MP4File *pFile = (MP4File *)hFile;
-
- return pFile->AddEncVideoTrack(timeScale,
- sampleDuration,
- width,
- height,
- videoType,
- icPp,
- oFormat);
-
- } catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TRACK_ID;
- }
-
- MP4TrackId MP4AddColr(
- MP4FileHandle hFile, MP4TrackId refTrackId, uint16_t pri, uint16_t tran, uint16_t mat)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->AddColr(refTrackId, pri, tran, mat);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TRACK_ID;
- }
-
-
- MP4TrackId MP4AddH264VideoTrack(MP4FileHandle hFile,
- uint32_t timeScale,
- MP4Duration sampleDuration,
- uint16_t width,
- uint16_t height,
- uint8_t AVCProfileIndication,
- uint8_t profile_compat,
- uint8_t AVCLevelIndication,
- uint8_t sampleLenFieldSizeMinusOne)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- MP4File *pFile = (MP4File *)hFile;
-
- return pFile->AddH264VideoTrack(timeScale,
- sampleDuration,
- width,
- height,
- AVCProfileIndication,
- profile_compat,
- AVCLevelIndication,
- sampleLenFieldSizeMinusOne);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TRACK_ID;
- }
-
- MP4TrackId MP4AddEncH264VideoTrack(
- MP4FileHandle hFile,
- uint32_t timeScale,
- MP4Duration sampleDuration,
- uint16_t width,
- uint16_t height,
- MP4FileHandle srcFile,
- MP4TrackId srcTrackId,
- mp4v2_ismacrypParams *icPp
- )
-
- {
- MP4Atom *srcAtom;
- MP4File *pFile;
-
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
-
- pFile = (MP4File *)srcFile;
- srcAtom = pFile->FindTrackAtom(srcTrackId, "mdia.minf.stbl.stsd.avc1.avcC");
- if (srcAtom == NULL)
- return MP4_INVALID_TRACK_ID;
-
- pFile = (MP4File *)hFile;
-
- return pFile->AddEncH264VideoTrack(timeScale,
- sampleDuration,
- width,
- height,
- srcAtom,
- icPp);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TRACK_ID;
- }
-
- void MP4AddH264SequenceParameterSet (MP4FileHandle hFile,
- MP4TrackId trackId,
- const uint8_t *pSequence,
- uint16_t sequenceLen)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- MP4File *pFile = (MP4File *)hFile;
-
- pFile->AddH264SequenceParameterSet(trackId,
- pSequence,
- sequenceLen);
- return;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return;
- }
- void MP4AddH264PictureParameterSet (MP4FileHandle hFile,
- MP4TrackId trackId,
- const uint8_t *pPict,
- uint16_t pictLen)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- MP4File *pFile = (MP4File *)hFile;
-
- pFile->AddH264PictureParameterSet(trackId,
- pPict,
- pictLen);
- return;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return;
- }
-
- MP4TrackId MP4AddH263VideoTrack(
- MP4FileHandle hFile,
- uint32_t timeScale,
- MP4Duration sampleDuration,
- uint16_t width,
- uint16_t height,
- uint8_t h263Level,
- uint8_t h263Profile,
- uint32_t avgBitrate,
- uint32_t maxBitrate)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->
- AddH263VideoTrack(timeScale, sampleDuration, width, height, h263Level, h263Profile, avgBitrate, maxBitrate);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
-
- return MP4_INVALID_TRACK_ID;
- }
-
- void MP4SetH263Vendor(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- uint32_t vendor)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->
- SetH263Vendor(trackId, vendor);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- }
-
- void MP4SetH263DecoderVersion(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- uint8_t decoderVersion)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
-
- try {
- ((MP4File*)hFile)->
- SetH263DecoderVersion(trackId, decoderVersion);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- }
-
- void MP4SetH263Bitrates(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- uint32_t avgBitrate,
- uint32_t maxBitrate)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
-
- try {
- ((MP4File*)hFile)->
- SetH263Bitrates(trackId, avgBitrate, maxBitrate);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- }
-
- MP4TrackId MP4AddHintTrack(
- MP4FileHandle hFile, MP4TrackId refTrackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->AddHintTrack(refTrackId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TRACK_ID;
- }
-
- MP4TrackId MP4AddTextTrack(
- MP4FileHandle hFile, MP4TrackId refTrackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->AddTextTrack(refTrackId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TRACK_ID;
- }
-
- MP4TrackId MP4AddSubtitleTrack(MP4FileHandle hFile,
- uint32_t timescale,
- uint16_t width,
- uint16_t height)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->AddSubtitleTrack(timescale, width, height);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TRACK_ID;
- }
-
- MP4TrackId MP4AddSubpicTrack(MP4FileHandle hFile,
- uint32_t timescale,
- uint16_t width,
- uint16_t height)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->AddSubpicTrack(timescale, width, height);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TRACK_ID;
- }
-
- MP4TrackId MP4AddChapterTextTrack(
- MP4FileHandle hFile, MP4TrackId refTrackId, uint32_t timescale)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->AddChapterTextTrack(refTrackId, timescale);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TRACK_ID;
- }
-
- MP4TrackId MP4AddPixelAspectRatio(
- MP4FileHandle hFile, MP4TrackId refTrackId, uint32_t hSpacing, uint32_t vSpacing)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->AddPixelAspectRatio(refTrackId, hSpacing, vSpacing);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TRACK_ID;
- }
-
- void MP4AddChapter(
- MP4FileHandle hFile, MP4TrackId chapterTrackId, MP4Duration chapterDuration, const char *chapterTitle)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->AddChapter(chapterTrackId, chapterDuration, chapterTitle);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- }
-
- void MP4AddNeroChapter(
- MP4FileHandle hFile, MP4Timestamp chapterStart, const char *chapterTitle)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->AddNeroChapter(chapterStart, chapterTitle);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- }
-
- MP4ChapterType MP4ConvertChapters(
- MP4FileHandle hFile, MP4ChapterType toChapterType)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile))
- {
- try {
- return ((MP4File*)hFile)->ConvertChapters(toChapterType);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4ChapterTypeNone;
- }
-
- MP4ChapterType MP4DeleteChapters(
- MP4FileHandle hFile, MP4ChapterType fromChapterType, MP4TrackId chapterTrackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->DeleteChapters(fromChapterType, chapterTrackId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4ChapterTypeNone;
- }
-
- MP4ChapterType MP4GetChapters(
- MP4FileHandle hFile, MP4Chapter_t ** chapterList, uint32_t * chapterCount, MP4ChapterType fromChapterType)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetChapters(chapterList, chapterCount, fromChapterType);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4ChapterTypeNone;
- }
-
- MP4ChapterType MP4SetChapters(
- MP4FileHandle hFile, MP4Chapter_t * chapterList, uint32_t chapterCount, MP4ChapterType toChapterType)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->SetChapters(chapterList, chapterCount, toChapterType);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4ChapterTypeNone;
- }
-
- void MP4ChangeMovieTimeScale(
- MP4FileHandle hFile, uint32_t value)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->ChangeMovieTimeScale(value);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- }
-
- MP4TrackId MP4CloneTrack (MP4FileHandle srcFile,
- MP4TrackId srcTrackId,
- MP4FileHandle dstFile,
- MP4TrackId dstHintTrackReferenceTrack)
- {
- MP4TrackId dstTrackId = MP4_INVALID_TRACK_ID;
-
- if (dstFile == NULL) {
- dstFile = srcFile;
- }
-
- const char* trackType =
- MP4GetTrackType(srcFile, srcTrackId);
-
- if (!trackType) {
- return dstTrackId;
- }
-
- const char *media_data_name =
- MP4GetTrackMediaDataName(srcFile, srcTrackId);
- if (media_data_name == NULL) return dstTrackId;
-
- if (MP4_IS_VIDEO_TRACK_TYPE(trackType)) {
- if (ATOMID(media_data_name) == ATOMID("mp4v")) {
- MP4SetVideoProfileLevel(dstFile,
- MP4GetVideoProfileLevel(srcFile));
- dstTrackId = MP4AddVideoTrack(
- dstFile,
- MP4GetTrackTimeScale(srcFile,
- srcTrackId),
- MP4GetTrackFixedSampleDuration(srcFile,
- srcTrackId),
- MP4GetTrackVideoWidth(srcFile,
- srcTrackId),
- MP4GetTrackVideoHeight(srcFile,
- srcTrackId),
- MP4GetTrackEsdsObjectTypeId(srcFile,
- srcTrackId));
- } else if (ATOMID(media_data_name) == ATOMID("avc1")) {
- uint8_t AVCProfileIndication;
- uint8_t profile_compat;
- uint8_t AVCLevelIndication;
- uint32_t sampleLenFieldSizeMinusOne;
- uint64_t temp;
-
- if (MP4GetTrackH264ProfileLevel(srcFile, srcTrackId,
- &AVCProfileIndication,
- &AVCLevelIndication) == false) {
- return dstTrackId;
- }
- if (MP4GetTrackH264LengthSize(srcFile, srcTrackId,
- &sampleLenFieldSizeMinusOne) == false) {
- return dstTrackId;
- }
- sampleLenFieldSizeMinusOne--;
- if (MP4GetTrackIntegerProperty(srcFile, srcTrackId,
- "mdia.minf.stbl.stsd.*[0].avcC.profile_compatibility",
- &temp) == false) return dstTrackId;
- profile_compat = temp & 0xff;
-
- dstTrackId = MP4AddH264VideoTrack(dstFile,
- MP4GetTrackTimeScale(srcFile,
- srcTrackId),
- MP4GetTrackFixedSampleDuration(srcFile,
- srcTrackId),
- MP4GetTrackVideoWidth(srcFile,
- srcTrackId),
- MP4GetTrackVideoHeight(srcFile,
- srcTrackId),
- AVCProfileIndication,
- profile_compat,
- AVCLevelIndication,
- sampleLenFieldSizeMinusOne);
- uint8_t **seqheader, **pictheader;
- uint32_t *pictheadersize, *seqheadersize;
- uint32_t ix;
- MP4GetTrackH264SeqPictHeaders(srcFile, srcTrackId,
- &seqheader, &seqheadersize,
- &pictheader, &pictheadersize);
- for (ix = 0; seqheadersize[ix] != 0; ix++) {
- MP4AddH264SequenceParameterSet(dstFile, dstTrackId,
- seqheader[ix], seqheadersize[ix]);
- free(seqheader[ix]);
- }
- free(seqheader);
- free(seqheadersize);
- for (ix = 0; pictheadersize[ix] != 0; ix++) {
- MP4AddH264PictureParameterSet(dstFile, dstTrackId,
- pictheader[ix], pictheadersize[ix]);
- free(pictheader[ix]);
- }
- free(pictheader);
- free(pictheadersize);
- } else
- return dstTrackId;
- } else if (MP4_IS_AUDIO_TRACK_TYPE(trackType)) {
- if (ATOMID(media_data_name) != ATOMID("mp4a")) return dstTrackId;
- MP4SetAudioProfileLevel(dstFile,
- MP4GetAudioProfileLevel(srcFile));
- dstTrackId = MP4AddAudioTrack(
- dstFile,
- MP4GetTrackTimeScale(srcFile, srcTrackId),
- MP4GetTrackFixedSampleDuration(srcFile, srcTrackId),
- MP4GetTrackEsdsObjectTypeId(srcFile, srcTrackId));
-
- } else if (MP4_IS_OD_TRACK_TYPE(trackType)) {
- dstTrackId = MP4AddODTrack(dstFile);
-
- } else if (MP4_IS_SCENE_TRACK_TYPE(trackType)) {
- dstTrackId = MP4AddSceneTrack(dstFile);
-
- } else if (MP4_IS_HINT_TRACK_TYPE(trackType)) {
- if (dstHintTrackReferenceTrack == MP4_INVALID_TRACK_ID) {
- dstTrackId = MP4_INVALID_TRACK_ID;
- } else {
- dstTrackId = MP4AddHintTrack(
- dstFile,
- dstHintTrackReferenceTrack);
- }
-
- } else if (MP4_IS_SYSTEMS_TRACK_TYPE(trackType)) {
- dstTrackId = MP4AddSystemsTrack(dstFile, trackType);
-
- } else {
- dstTrackId = MP4AddTrack(dstFile, trackType);
- }
-
- if (dstTrackId == MP4_INVALID_TRACK_ID) {
- return dstTrackId;
- }
-
- MP4SetTrackTimeScale(
- dstFile,
- dstTrackId,
- MP4GetTrackTimeScale(srcFile, srcTrackId));
-
- if (MP4_IS_AUDIO_TRACK_TYPE(trackType)
- || MP4_IS_VIDEO_TRACK_TYPE(trackType)) {
- // copy track ES configuration
- uint8_t* pConfig = NULL;
- uint32_t configSize = 0;
- MP4LogLevel verb = mp4v2::impl::log.verbosity;
- mp4v2::impl::log.setVerbosity(MP4_LOG_NONE);
- bool haveEs = MP4GetTrackESConfiguration(srcFile,
- srcTrackId,
- &pConfig,
- &configSize);
- mp4v2::impl::log.setVerbosity(verb);
- if (haveEs &&
- pConfig != NULL && configSize != 0) {
- if (!MP4SetTrackESConfiguration(
- dstFile,
- dstTrackId,
- pConfig,
- configSize)) {
- free(pConfig);
- MP4DeleteTrack(dstFile, dstTrackId);
- return MP4_INVALID_TRACK_ID;
- }
-
- free(pConfig);
- }
- }
-
- if (MP4_IS_HINT_TRACK_TYPE(trackType)) {
- // probably not exactly what is wanted
- // but caller can adjust later to fit their desires
-
- char* payloadName = NULL;
- char *encodingParms = NULL;
- uint8_t payloadNumber;
- uint16_t maxPayloadSize;
-
- if (MP4GetHintTrackRtpPayload(
- srcFile,
- srcTrackId,
- &payloadName,
- &payloadNumber,
- &maxPayloadSize,
- &encodingParms)) {
-
- if (MP4SetHintTrackRtpPayload(
- dstFile,
- dstTrackId,
- payloadName,
- &payloadNumber,
- maxPayloadSize,
- encodingParms) == false) {
- MP4DeleteTrack(dstFile, dstTrackId);
- return MP4_INVALID_TRACK_ID;
- }
- }
-#if 0
- MP4SetHintTrackSdp(
- dstFile,
- dstTrackId,
- MP4GetHintTrackSdp(srcFile, srcTrackId));
-#endif
- }
-
- return dstTrackId;
- }
-
-// Given a track, make an encrypted clone of it in the dest. file
- MP4TrackId MP4EncAndCloneTrack(MP4FileHandle srcFile,
- MP4TrackId srcTrackId,
- mp4v2_ismacrypParams *icPp,
- MP4FileHandle dstFile,
- MP4TrackId dstHintTrackReferenceTrack
- )
- {
- const char *oFormat;
-
- MP4TrackId dstTrackId = MP4_INVALID_TRACK_ID;
-
- if (dstFile == NULL) {
- dstFile = srcFile;
- }
-
- const char* trackType = MP4GetTrackType(srcFile, srcTrackId);
-
- if (!trackType) {
- return dstTrackId;
- }
-
- if (MP4_IS_VIDEO_TRACK_TYPE(trackType)) {
-
- // test source file format for avc1
- oFormat = MP4GetTrackMediaDataName(srcFile, srcTrackId);
- if (!strcasecmp(oFormat, "avc1"))
- {
- dstTrackId = MP4AddEncH264VideoTrack(dstFile,
- MP4GetTrackTimeScale(srcFile, srcTrackId),
- MP4GetTrackFixedSampleDuration(srcFile, srcTrackId),
- MP4GetTrackVideoWidth(srcFile, srcTrackId),
- MP4GetTrackVideoHeight(srcFile, srcTrackId),
- srcFile,
- srcTrackId,
- icPp
- );
- }
- else
- {
- MP4SetVideoProfileLevel(dstFile, MP4GetVideoProfileLevel(srcFile));
- dstTrackId = MP4AddEncVideoTrack(dstFile,
- MP4GetTrackTimeScale(srcFile, srcTrackId),
- MP4GetTrackFixedSampleDuration(srcFile, srcTrackId),
- MP4GetTrackVideoWidth(srcFile, srcTrackId),
- MP4GetTrackVideoHeight(srcFile, srcTrackId),
- icPp,
- MP4GetTrackEsdsObjectTypeId(srcFile, srcTrackId),
- oFormat
- );
- }
-
- } else if (MP4_IS_AUDIO_TRACK_TYPE(trackType)) {
- MP4SetAudioProfileLevel(dstFile, MP4GetAudioProfileLevel(srcFile));
- dstTrackId = MP4AddEncAudioTrack(dstFile,
- MP4GetTrackTimeScale(srcFile, srcTrackId),
- MP4GetTrackFixedSampleDuration(srcFile,
- srcTrackId),
- icPp,
- MP4GetTrackEsdsObjectTypeId(srcFile,
- srcTrackId)
- );
-
- } else if (MP4_IS_OD_TRACK_TYPE(trackType)) {
- dstTrackId = MP4AddODTrack(dstFile);
-
- } else if (MP4_IS_SCENE_TRACK_TYPE(trackType)) {
- dstTrackId = MP4AddSceneTrack(dstFile);
-
- } else if (MP4_IS_HINT_TRACK_TYPE(trackType)) {
- if (dstHintTrackReferenceTrack == MP4_INVALID_TRACK_ID) {
- dstTrackId = MP4_INVALID_TRACK_ID;
- } else {
- dstTrackId = MP4AddHintTrack(dstFile,
- MP4GetHintTrackReferenceTrackId(srcFile,
- srcTrackId));
- }
- } else if (MP4_IS_SYSTEMS_TRACK_TYPE(trackType)) {
- dstTrackId = MP4AddSystemsTrack(dstFile, trackType);
-
- } else {
- dstTrackId = MP4AddTrack(dstFile, trackType);
- }
-
- if (dstTrackId == MP4_INVALID_TRACK_ID) {
- return dstTrackId;
- }
-
- MP4SetTrackTimeScale(dstFile,
- dstTrackId,
- MP4GetTrackTimeScale(srcFile, srcTrackId));
-
- if (MP4_IS_AUDIO_TRACK_TYPE(trackType)
- || MP4_IS_VIDEO_TRACK_TYPE(trackType)) {
- // copy track ES configuration
- uint8_t* pConfig = NULL;
- uint32_t configSize = 0;
- if (MP4GetTrackESConfiguration(srcFile, srcTrackId,
- &pConfig, &configSize)) {
-
- if (pConfig != NULL) {
- MP4SetTrackESConfiguration(dstFile, dstTrackId,
- pConfig, configSize);
- }
- }
- if (pConfig != NULL)
- free(pConfig);
- }
-
- // Bill's change to MP4CloneTrack
- if (MP4_IS_HINT_TRACK_TYPE(trackType)) {
- // probably not exactly what is wanted
- // but caller can adjust later to fit their desires
-
- char* payloadName = NULL;
- char *encodingParms = NULL;
- uint8_t payloadNumber;
- uint16_t maxPayloadSize;
-
- if (MP4GetHintTrackRtpPayload(
- srcFile,
- srcTrackId,
- &payloadName,
- &payloadNumber,
- &maxPayloadSize,
- &encodingParms)) {
-
- (void)MP4SetHintTrackRtpPayload(
- dstFile,
- dstTrackId,
- payloadName,
- &payloadNumber,
- maxPayloadSize,
- encodingParms);
- }
-#if 0
- MP4SetHintTrackSdp(
- dstFile,
- dstTrackId,
- MP4GetHintTrackSdp(srcFile, srcTrackId));
-#endif
- }
-
- return dstTrackId;
- }
-
- MP4TrackId MP4CopyTrack(MP4FileHandle srcFile,
- MP4TrackId srcTrackId,
- MP4FileHandle dstFile,
- bool applyEdits,
- MP4TrackId dstHintTrackReferenceTrack)
- {
- bool copySamples = true; // LATER allow false => reference samples
-
- MP4TrackId dstTrackId =
- MP4CloneTrack(srcFile, srcTrackId, dstFile, dstHintTrackReferenceTrack);
-
- if (dstTrackId == MP4_INVALID_TRACK_ID) {
- return dstTrackId;
- }
-
- bool viaEdits =
- applyEdits && MP4GetTrackNumberOfEdits(srcFile, srcTrackId);
-
- MP4SampleId sampleId = 0;
- MP4SampleId numSamples =
- MP4GetTrackNumberOfSamples(srcFile, srcTrackId);
-
- MP4Timestamp when = 0;
- MP4Duration editsDuration =
- MP4GetTrackEditTotalDuration(srcFile, srcTrackId);
-
- while (true) {
- MP4Duration sampleDuration = MP4_INVALID_DURATION;
-
- if (viaEdits) {
- sampleId = MP4GetSampleIdFromEditTime(
- srcFile,
- srcTrackId,
- when,
- NULL,
- &sampleDuration);
-
- // in theory, this shouldn't happen
- if (sampleId == MP4_INVALID_SAMPLE_ID) {
- MP4DeleteTrack(dstFile, dstTrackId);
- return MP4_INVALID_TRACK_ID;
- }
-
- when += sampleDuration;
-
- if (when >= editsDuration) {
- break;
- }
- } else {
- sampleId++;
- if (sampleId > numSamples) {
- break;
- }
- }
-
- bool rc = false;
-
- if (copySamples) {
- rc = MP4CopySample(
- srcFile,
- srcTrackId,
- sampleId,
- dstFile,
- dstTrackId,
- sampleDuration);
-
- } else {
- rc = MP4ReferenceSample(
- srcFile,
- srcTrackId,
- sampleId,
- dstFile,
- dstTrackId,
- sampleDuration);
- }
-
- if (!rc) {
- MP4DeleteTrack(dstFile, dstTrackId);
- return MP4_INVALID_TRACK_ID;
- }
- }
-
- return dstTrackId;
- }
-
-// Given a source track in a source file, make an encrypted copy of
-// the track in the destination file, including sample encryption
- MP4TrackId MP4EncAndCopyTrack(MP4FileHandle srcFile,
- MP4TrackId srcTrackId,
- mp4v2_ismacrypParams *icPp,
- encryptFunc_t encfcnp,
- uint32_t encfcnparam1,
- MP4FileHandle dstFile,
- bool applyEdits,
- MP4TrackId dstHintTrackReferenceTrack
- )
- {
- bool copySamples = true; // LATER allow false => reference samples
-
- MP4TrackId dstTrackId =
- MP4EncAndCloneTrack(srcFile, srcTrackId,
- icPp,
- dstFile, dstHintTrackReferenceTrack);
-
- if (dstTrackId == MP4_INVALID_TRACK_ID) {
- return dstTrackId;
- }
-
- bool viaEdits =
- applyEdits && MP4GetTrackNumberOfEdits(srcFile, srcTrackId);
-
- MP4SampleId sampleId = 0;
- MP4SampleId numSamples =
- MP4GetTrackNumberOfSamples(srcFile, srcTrackId);
-
- MP4Timestamp when = 0;
- MP4Duration editsDuration =
- MP4GetTrackEditTotalDuration(srcFile, srcTrackId);
-
- while (true) {
- MP4Duration sampleDuration = MP4_INVALID_DURATION;
-
- if (viaEdits) {
- sampleId = MP4GetSampleIdFromEditTime(srcFile,
- srcTrackId,
- when,
- NULL,
- &sampleDuration);
-
- // in theory, this shouldn't happen
- if (sampleId == MP4_INVALID_SAMPLE_ID) {
- MP4DeleteTrack(dstFile, dstTrackId);
- return MP4_INVALID_TRACK_ID;
- }
-
- when += sampleDuration;
-
- if (when >= editsDuration) {
- break;
- }
- } else {
- sampleId++;
- if (sampleId > numSamples) {
- break;
- }
- }
-
- bool rc = false;
-
- if (copySamples) {
- // encrypt and copy
- rc = MP4EncAndCopySample(srcFile,
- srcTrackId,
- sampleId,
- encfcnp,
- encfcnparam1,
- dstFile,
- dstTrackId,
- sampleDuration);
-
- } else {
- // not sure what these are - encrypt?
- rc = MP4ReferenceSample(srcFile,
- srcTrackId,
- sampleId,
- dstFile,
- dstTrackId,
- sampleDuration);
- }
-
- if (!rc) {
- MP4DeleteTrack(dstFile, dstTrackId);
- return MP4_INVALID_TRACK_ID;
- }
- }
-
- return dstTrackId;
- }
-
- bool MP4DeleteTrack(
- MP4FileHandle hFile,
- MP4TrackId trackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->DeleteTrack(trackId);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- uint32_t MP4GetNumberOfTracks(
- MP4FileHandle hFile,
- const char* type,
- uint8_t subType)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetNumberOfTracks(type, subType);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return 0;
- }
-
- MP4TrackId MP4FindTrackId(
- MP4FileHandle hFile,
- uint16_t index,
- const char* type,
- uint8_t subType)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->FindTrackId(index, type, subType);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TRACK_ID;
- }
-
- uint16_t MP4FindTrackIndex(
- MP4FileHandle hFile, MP4TrackId trackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->FindTrackIndex(trackId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return (uint16_t)-1;
- }
-
- /* specific track properties */
-
- const char* MP4GetTrackType(
- MP4FileHandle hFile, MP4TrackId trackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetTrackType(trackId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return NULL;
- }
- const char* MP4GetTrackMediaDataName(
- MP4FileHandle hFile, MP4TrackId trackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetTrackMediaDataName(trackId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return NULL;
- }
-
- bool MP4GetTrackMediaDataOriginalFormat(
- MP4FileHandle hFile, MP4TrackId trackId, char *originalFormat,
- uint32_t buflen)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
-
- return ((MP4File*)hFile)->GetTrackMediaDataOriginalFormat(trackId,
- originalFormat, buflen);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- MP4Duration MP4GetTrackDuration(
- MP4FileHandle hFile, MP4TrackId trackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetTrackDuration(trackId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_DURATION;
- }
-
- uint32_t MP4GetTrackTimeScale(
- MP4FileHandle hFile, MP4TrackId trackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetTrackTimeScale(trackId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return 0;
- }
-
- bool MP4SetTrackTimeScale(
- MP4FileHandle hFile, MP4TrackId trackId, uint32_t value)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->SetTrackTimeScale(trackId, value);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- uint8_t MP4GetTrackAudioMpeg4Type(
- MP4FileHandle hFile, MP4TrackId trackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetTrackAudioMpeg4Type(trackId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_MPEG4_INVALID_AUDIO_TYPE;
- }
-
-
-
-// Replacement to MP4GetTrackVideoType and MP4GetTrackAudioType
-// Basically does the same thing but with a more self-explanatory name
- uint8_t MP4GetTrackEsdsObjectTypeId(
- MP4FileHandle hFile, MP4TrackId trackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
-
- return ((MP4File*)hFile)->GetTrackEsdsObjectTypeId(trackId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_AUDIO_TYPE;
- }
-
- MP4Duration MP4GetTrackFixedSampleDuration(
- MP4FileHandle hFile, MP4TrackId trackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetTrackFixedSampleDuration(trackId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_DURATION;
- }
-
- uint32_t MP4GetTrackBitRate(
- MP4FileHandle hFile, MP4TrackId trackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- MP4File *pFile = (MP4File *)hFile;
- try {
- return pFile->GetTrackIntegerProperty(trackId,
- "mdia.minf.stbl.stsd.*.esds.decConfigDescr.avgBitrate");
- }
- catch( Exception* x ) {
- //mp4v2::impl::log.errorf(*x); we don't really need to print this.
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- // if we're here, we can't get the bitrate from above -
- // lets calculate it
- try {
- MP4Duration trackDur;
- trackDur = MP4GetTrackDuration(hFile, trackId);
- uint64_t msDuration =
- pFile->ConvertFromTrackDuration(trackId, trackDur,
- MP4_MSECS_TIME_SCALE);
- if (msDuration == 0) return 0;
-
- MP4Track *pTrack = pFile->GetTrack(trackId);
- uint64_t bytes = pTrack->GetTotalOfSampleSizes();
- bytes *= UINT64_C(8000); // 8 * 1000
- bytes /= msDuration;
- return (uint32_t)bytes;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return 0;
- }
-
- bool MP4GetTrackESConfiguration(
- MP4FileHandle hFile, MP4TrackId trackId,
- uint8_t** ppConfig, uint32_t* pConfigSize)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->GetTrackESConfiguration(
- trackId, ppConfig, pConfigSize);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- *ppConfig = NULL;
- *pConfigSize = 0;
- return false;
- }
- bool MP4GetTrackVideoMetadata(
- MP4FileHandle hFile, MP4TrackId trackId,
- uint8_t** ppConfig, uint32_t* pConfigSize)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->GetTrackVideoMetadata(
- trackId, ppConfig, pConfigSize);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- *ppConfig = NULL;
- *pConfigSize = 0;
- return false;
- }
-
- bool MP4SetTrackESConfiguration(
- MP4FileHandle hFile, MP4TrackId trackId,
- const uint8_t* pConfig, uint32_t configSize)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->SetTrackESConfiguration(
- trackId, pConfig, configSize);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4GetTrackH264ProfileLevel (MP4FileHandle hFile,
- MP4TrackId trackId,
- uint8_t *pProfile,
- uint8_t *pLevel)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- *pProfile =
- ((MP4File *)hFile)->GetTrackIntegerProperty(trackId,
- "mdia.minf.stbl.stsd.*[0].avcC.AVCProfileIndication");
- *pLevel =
- ((MP4File *)hFile)->GetTrackIntegerProperty(trackId,
- "mdia.minf.stbl.stsd.*[0].avcC.AVCLevelIndication");
-
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4GetTrackH264SeqPictHeaders (MP4FileHandle hFile,
- MP4TrackId trackId,
- uint8_t ***pSeqHeader,
- uint32_t **pSeqHeaderSize,
- uint8_t ***pPictHeader,
- uint32_t **pPictHeaderSize)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->GetTrackH264SeqPictHeaders(trackId,
- pSeqHeader,
- pSeqHeaderSize,
- pPictHeader,
- pPictHeaderSize);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
- bool MP4GetTrackH264LengthSize (MP4FileHandle hFile,
- MP4TrackId trackId,
- uint32_t *pLength)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- *pLength = 1 +
- ((MP4File*) hFile)->GetTrackIntegerProperty(trackId,
- "mdia.minf.stbl.stsd.*[0].avcC.lengthSizeMinusOne");
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- MP4SampleId MP4GetTrackNumberOfSamples(
- MP4FileHandle hFile, MP4TrackId trackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetTrackNumberOfSamples(trackId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return 0;
- }
-
- uint16_t MP4GetTrackVideoWidth(
- MP4FileHandle hFile, MP4TrackId trackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetTrackIntegerProperty(trackId,
- "mdia.minf.stbl.stsd.*.width");
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return 0;
- }
-
- uint16_t MP4GetTrackVideoHeight(
- MP4FileHandle hFile, MP4TrackId trackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetTrackIntegerProperty(trackId,
- "mdia.minf.stbl.stsd.*.height");
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return 0;
- }
-
- double MP4GetTrackVideoFrameRate(
- MP4FileHandle hFile, MP4TrackId trackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetTrackVideoFrameRate(trackId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return 0.0;
- }
-
- int MP4GetTrackAudioChannels (MP4FileHandle hFile,
- MP4TrackId trackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetTrackAudioChannels(trackId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return -1;
- }
-
-// returns true if the track is a media track encrypted according to ismacryp
- bool MP4IsIsmaCrypMediaTrack(
- MP4FileHandle hFile, MP4TrackId trackId)
- {
- bool retval = false;
- MP4LogLevel verb = mp4v2::impl::log.verbosity;
- mp4v2::impl::log.setVerbosity(MP4_LOG_NONE);
-
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- retval = ((MP4File*)hFile)->IsIsmaCrypMediaTrack(trackId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- mp4v2::impl::log.setVerbosity(verb);
- return retval;
- }
-
-
- /* generic track properties */
-
- bool MP4HaveTrackAtom (MP4FileHandle hFile,
- MP4TrackId trackId,
- const char *atomName)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->FindTrackAtom(trackId, atomName) != NULL;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4GetTrackIntegerProperty (
- MP4FileHandle hFile, MP4TrackId trackId,
- const char* propName,
- uint64_t *retvalue)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- *retvalue = ((MP4File*)hFile)->GetTrackIntegerProperty(trackId,
- propName);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4GetTrackFloatProperty(
- MP4FileHandle hFile, MP4TrackId trackId,
- const char* propName,
- float *retvalue)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- *retvalue = ((MP4File*)hFile)->GetTrackFloatProperty(trackId, propName);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4GetTrackStringProperty(
- MP4FileHandle hFile, MP4TrackId trackId,
- const char* propName,
- const char **retvalue)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- *retvalue = ((MP4File*)hFile)->GetTrackStringProperty(trackId, propName);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4GetTrackBytesProperty(
- MP4FileHandle hFile, MP4TrackId trackId, const char* propName,
- uint8_t** ppValue, uint32_t* pValueSize)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->GetTrackBytesProperty(
- trackId, propName, ppValue, pValueSize);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- *ppValue = NULL;
- *pValueSize = 0;
- return false;
- }
-
- bool MP4SetTrackIntegerProperty(
- MP4FileHandle hFile, MP4TrackId trackId,
- const char* propName, int64_t value)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->SetTrackIntegerProperty(trackId,
- propName, value);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4SetTrackFloatProperty(
- MP4FileHandle hFile, MP4TrackId trackId,
- const char* propName, float value)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->SetTrackFloatProperty(trackId, propName, value);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4SetTrackStringProperty(
- MP4FileHandle hFile, MP4TrackId trackId,
- const char* propName, const char* value)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->SetTrackStringProperty(trackId, propName, value);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4SetTrackBytesProperty(
- MP4FileHandle hFile, MP4TrackId trackId,
- const char* propName, const uint8_t* pValue, uint32_t valueSize)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->SetTrackBytesProperty(
- trackId, propName, pValue, valueSize);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- /* sample operations */
-
- bool MP4ReadSample(
- /* input parameters */
- MP4FileHandle hFile,
- MP4TrackId trackId,
- MP4SampleId sampleId,
- /* output parameters */
- uint8_t** ppBytes,
- uint32_t* pNumBytes,
- MP4Timestamp* pStartTime,
- MP4Duration* pDuration,
- MP4Duration* pRenderingOffset,
- bool* pIsSyncSample)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->ReadSample(
- trackId,
- sampleId,
- ppBytes,
- pNumBytes,
- pStartTime,
- pDuration,
- pRenderingOffset,
- pIsSyncSample);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- *pNumBytes = 0;
- return false;
- }
-
- bool MP4ReadSampleFromTime(
- /* input parameters */
- MP4FileHandle hFile,
- MP4TrackId trackId,
- MP4Timestamp when,
- /* output parameters */
- uint8_t** ppBytes,
- uint32_t* pNumBytes,
- MP4Timestamp* pStartTime,
- MP4Duration* pDuration,
- MP4Duration* pRenderingOffset,
- bool* pIsSyncSample)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- MP4SampleId sampleId =
- ((MP4File*)hFile)->GetSampleIdFromTime(
- trackId, when, false);
-
- ((MP4File*)hFile)->ReadSample(
- trackId,
- sampleId,
- ppBytes,
- pNumBytes,
- pStartTime,
- pDuration,
- pRenderingOffset,
- pIsSyncSample);
-
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- *pNumBytes = 0;
- return false;
- }
-
- bool MP4WriteSample(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- const uint8_t* pBytes,
- uint32_t numBytes,
- MP4Duration duration,
- MP4Duration renderingOffset,
- bool isSyncSample )
- {
- if( MP4_IS_VALID_FILE_HANDLE( hFile )) {
- try {
- ((MP4File*)hFile)->WriteSample(
- trackId,
- pBytes,
- numBytes,
- duration,
- renderingOffset,
- isSyncSample );
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4WriteSampleDependency(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- const uint8_t* pBytes,
- uint32_t numBytes,
- MP4Duration duration,
- MP4Duration renderingOffset,
- bool isSyncSample,
- uint32_t dependencyFlags )
- {
- if( MP4_IS_VALID_FILE_HANDLE( hFile )) {
- try {
- ((MP4File*)hFile)->WriteSampleDependency(
- trackId,
- pBytes,
- numBytes,
- duration,
- renderingOffset,
- isSyncSample,
- dependencyFlags );
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4CopySample(
- MP4FileHandle srcFile,
- MP4TrackId srcTrackId,
- MP4SampleId srcSampleId,
- MP4FileHandle dstFile,
- MP4TrackId dstTrackId,
- MP4Duration dstSampleDuration )
- {
- if( !MP4_IS_VALID_FILE_HANDLE( srcFile ))
- return false;
-
- try {
- MP4File::CopySample(
- (MP4File*)srcFile,
- srcTrackId,
- srcSampleId,
- (MP4File*)dstFile,
- dstTrackId,
- dstSampleDuration );
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
-
- return false;
- }
-
- bool MP4EncAndCopySample(
- MP4FileHandle srcFile,
- MP4TrackId srcTrackId,
- MP4SampleId srcSampleId,
- encryptFunc_t encfcnp,
- uint32_t encfcnparam1,
- MP4FileHandle dstFile,
- MP4TrackId dstTrackId,
- MP4Duration dstSampleDuration)
- {
- if( !MP4_IS_VALID_FILE_HANDLE( srcFile ))
- return false;
-
- try {
- MP4File::EncAndCopySample(
- (MP4File*)srcFile,
- srcTrackId,
- srcSampleId,
- encfcnp,
- encfcnparam1,
- (MP4File*)dstFile,
- dstTrackId,
- dstSampleDuration );
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
-
- return false;
- }
-
- bool MP4ReferenceSample(
- MP4FileHandle srcFile,
- MP4TrackId srcTrackId,
- MP4SampleId srcSampleId,
- MP4FileHandle dstFile,
- MP4TrackId dstTrackId,
- MP4Duration dstSampleDuration)
- {
- // LATER Not yet implemented
- return false;
- }
-
- uint32_t MP4GetSampleSize(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- MP4SampleId sampleId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetSampleSize(
- trackId, sampleId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return 0;
- }
-
- uint32_t MP4GetTrackMaxSampleSize(
- MP4FileHandle hFile,
- MP4TrackId trackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetTrackMaxSampleSize(trackId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return 0;
- }
-
- MP4SampleId MP4GetSampleIdFromTime(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- MP4Timestamp when,
- bool wantSyncSample)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetSampleIdFromTime(
- trackId, when, wantSyncSample);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_SAMPLE_ID;
- }
-
- MP4Timestamp MP4GetSampleTime(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- MP4SampleId sampleId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetSampleTime(
- trackId, sampleId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TIMESTAMP;
- }
-
- MP4Duration MP4GetSampleDuration(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- MP4SampleId sampleId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetSampleDuration(
- trackId, sampleId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_DURATION;
- }
-
- MP4Duration MP4GetSampleRenderingOffset(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- MP4SampleId sampleId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetSampleRenderingOffset(
- trackId, sampleId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_DURATION;
- }
-
- bool MP4SetSampleRenderingOffset(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- MP4SampleId sampleId,
- MP4Duration renderingOffset)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->SetSampleRenderingOffset(
- trackId, sampleId, renderingOffset);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- int8_t MP4GetSampleSync(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- MP4SampleId sampleId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetSampleSync(
- trackId, sampleId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return -1;
- }
-
-
- uint64_t MP4ConvertFromMovieDuration(
- MP4FileHandle hFile,
- MP4Duration duration,
- uint32_t timeScale)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->ConvertFromMovieDuration(
- duration, timeScale);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return (uint64_t)MP4_INVALID_DURATION;
- }
-
- uint64_t MP4ConvertFromTrackTimestamp(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- MP4Timestamp timeStamp,
- uint32_t timeScale)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->ConvertFromTrackTimestamp(
- trackId, timeStamp, timeScale);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return (uint64_t)MP4_INVALID_TIMESTAMP;
- }
-
- MP4Timestamp MP4ConvertToTrackTimestamp(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- uint64_t timeStamp,
- uint32_t timeScale)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->ConvertToTrackTimestamp(
- trackId, timeStamp, timeScale);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TIMESTAMP;
- }
-
- uint64_t MP4ConvertFromTrackDuration(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- MP4Duration duration,
- uint32_t timeScale)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->ConvertFromTrackDuration(
- trackId, duration, timeScale);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return (uint64_t)MP4_INVALID_DURATION;
- }
-
- MP4Duration MP4ConvertToTrackDuration(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- uint64_t duration,
- uint32_t timeScale)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->ConvertToTrackDuration(
- trackId, duration, timeScale);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_DURATION;
- }
-
- bool MP4GetHintTrackRtpPayload(
- MP4FileHandle hFile,
- MP4TrackId hintTrackId,
- char** ppPayloadName,
- uint8_t* pPayloadNumber,
- uint16_t* pMaxPayloadSize,
- char **ppEncodingParams)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->GetHintTrackRtpPayload(
- hintTrackId, ppPayloadName, pPayloadNumber, pMaxPayloadSize,
- ppEncodingParams);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4SetHintTrackRtpPayload(
- MP4FileHandle hFile,
- MP4TrackId hintTrackId,
- const char* pPayloadName,
- uint8_t* pPayloadNumber,
- uint16_t maxPayloadSize,
- const char *encode_params,
- bool include_rtp_map,
- bool include_mpeg4_esid)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->SetHintTrackRtpPayload(
- hintTrackId, pPayloadName, pPayloadNumber, maxPayloadSize, encode_params,
- include_rtp_map, include_mpeg4_esid);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- const char* MP4GetSessionSdp(
- MP4FileHandle hFile)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetSessionSdp();
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return NULL;
- }
-
- bool MP4SetSessionSdp(
- MP4FileHandle hFile,
- const char* sdpString)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->SetSessionSdp(sdpString);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4AppendSessionSdp(
- MP4FileHandle hFile,
- const char* sdpString)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->AppendSessionSdp(sdpString);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- const char* MP4GetHintTrackSdp(
- MP4FileHandle hFile,
- MP4TrackId hintTrackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetHintTrackSdp(hintTrackId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return NULL;
- }
-
- bool MP4SetHintTrackSdp(
- MP4FileHandle hFile,
- MP4TrackId hintTrackId,
- const char* sdpString)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->SetHintTrackSdp(hintTrackId, sdpString);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4AppendHintTrackSdp(
- MP4FileHandle hFile,
- MP4TrackId hintTrackId,
- const char* sdpString)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->AppendHintTrackSdp(hintTrackId, sdpString);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- MP4TrackId MP4GetHintTrackReferenceTrackId(
- MP4FileHandle hFile,
- MP4TrackId hintTrackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->
- GetHintTrackReferenceTrackId(hintTrackId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TRACK_ID;
- }
-
- bool MP4ReadRtpHint(
- MP4FileHandle hFile,
- MP4TrackId hintTrackId,
- MP4SampleId hintSampleId,
- uint16_t* pNumPackets)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->ReadRtpHint(
- hintTrackId, hintSampleId, pNumPackets);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- uint16_t MP4GetRtpHintNumberOfPackets(
- MP4FileHandle hFile,
- MP4TrackId hintTrackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetRtpHintNumberOfPackets(hintTrackId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return 0;
- }
-
- int8_t MP4GetRtpPacketBFrame(
- MP4FileHandle hFile,
- MP4TrackId hintTrackId,
- uint16_t packetIndex)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->
- GetRtpPacketBFrame(hintTrackId, packetIndex);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return -1;
- }
-
- int32_t MP4GetRtpPacketTransmitOffset(
- MP4FileHandle hFile,
- MP4TrackId hintTrackId,
- uint16_t packetIndex)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->
- GetRtpPacketTransmitOffset(hintTrackId, packetIndex);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return 0;
- }
-
- bool MP4ReadRtpPacket(
- MP4FileHandle hFile,
- MP4TrackId hintTrackId,
- uint16_t packetIndex,
- uint8_t** ppBytes,
- uint32_t* pNumBytes,
- uint32_t ssrc,
- bool includeHeader,
- bool includePayload)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->ReadRtpPacket(
- hintTrackId, packetIndex,
- ppBytes, pNumBytes,
- ssrc, includeHeader, includePayload);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- MP4Timestamp MP4GetRtpTimestampStart(
- MP4FileHandle hFile,
- MP4TrackId hintTrackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetRtpTimestampStart(hintTrackId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TIMESTAMP;
- }
-
- bool MP4SetRtpTimestampStart(
- MP4FileHandle hFile,
- MP4TrackId hintTrackId,
- MP4Timestamp rtpStart)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->SetRtpTimestampStart(
- hintTrackId, rtpStart);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4AddRtpHint(
- MP4FileHandle hFile,
- MP4TrackId hintTrackId)
- {
- return MP4AddRtpVideoHint(hFile, hintTrackId, false, 0);
- }
-
- bool MP4AddRtpVideoHint(
- MP4FileHandle hFile,
- MP4TrackId hintTrackId,
- bool isBframe,
- uint32_t timestampOffset)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->AddRtpHint(hintTrackId,
- isBframe, timestampOffset);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4AddRtpPacket(
- MP4FileHandle hFile,
- MP4TrackId hintTrackId,
- bool setMbit,
- int32_t transmitOffset)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->AddRtpPacket(
- hintTrackId, setMbit, transmitOffset);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4AddRtpImmediateData(
- MP4FileHandle hFile,
- MP4TrackId hintTrackId,
- const uint8_t* pBytes,
- uint32_t numBytes)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->AddRtpImmediateData(hintTrackId,
- pBytes, numBytes);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4AddRtpSampleData(
- MP4FileHandle hFile,
- MP4TrackId hintTrackId,
- MP4SampleId sampleId,
- uint32_t dataOffset,
- uint32_t dataLength)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->AddRtpSampleData(
- hintTrackId, sampleId, dataOffset, dataLength);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4AddRtpESConfigurationPacket(
- MP4FileHandle hFile,
- MP4TrackId hintTrackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->AddRtpESConfigurationPacket(hintTrackId);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4WriteRtpHint(
- MP4FileHandle hFile,
- MP4TrackId hintTrackId,
- MP4Duration duration,
- bool isSyncSample)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->WriteRtpHint(
- hintTrackId, duration, isSyncSample);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf( "%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
- /* 3GPP specific operations */
-
- bool MP4Make3GPCompliant(
- const char* fileName,
- char* majorBrand,
- uint32_t minorVersion,
- char** supportedBrands,
- uint32_t supportedBrandsCount,
- bool deleteIodsAtom)
- {
- if (!fileName)
- return false;
-
- MP4File* pFile = ConstructMP4File();
- if (!pFile)
- return MP4_INVALID_FILE_HANDLE;
-
- try {
- ASSERT(pFile);
- pFile->Modify(fileName);
- pFile->Make3GPCompliant(fileName, majorBrand, minorVersion, supportedBrands, supportedBrandsCount, deleteIodsAtom);
- pFile->Close();
- delete pFile;
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: failed", __FUNCTION__ );
- }
-
- if (pFile)
- delete pFile;
- return false;
- }
-
- /* ISMA specific operations */
-
- bool MP4MakeIsmaCompliant(
- const char* fileName,
- bool addIsmaComplianceSdp)
- {
- if (!fileName)
- return false;
-
- MP4File* pFile = ConstructMP4File();
- if (!pFile)
- return MP4_INVALID_FILE_HANDLE;
-
- try {
- ASSERT(pFile);
- pFile->Modify(fileName);
- pFile->MakeIsmaCompliant(addIsmaComplianceSdp);
- pFile->Close();
- delete pFile;
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: \"%s\": failed", __FUNCTION__,
- fileName );
- }
-
- if (pFile)
- delete pFile;
- return false;
- }
-
- char* MP4MakeIsmaSdpIod(
- uint8_t videoProfile,
- uint32_t videoBitrate,
- uint8_t* videoConfig,
- uint32_t videoConfigLength,
- uint8_t audioProfile,
- uint32_t audioBitrate,
- uint8_t* audioConfig,
- uint32_t audioConfigLength)
-
- {
- MP4File* pFile = ConstructMP4File();
- if (!pFile)
- return NULL;
-
- try {
- uint8_t* pBytes = NULL;
- uint64_t numBytes = 0;
-
- ASSERT(pFile);
- pFile->CreateIsmaIodFromParams(
- videoProfile,
- videoBitrate,
- videoConfig,
- videoConfigLength,
- audioProfile,
- audioBitrate,
- audioConfig,
- audioConfigLength,
- &pBytes,
- &numBytes);
-
- char* iodBase64 =
- MP4ToBase64(pBytes, numBytes);
- MP4Free(pBytes);
-
- char* sdpIod =
- (char*)MP4Malloc(strlen(iodBase64) + 64);
- snprintf(sdpIod, strlen(iodBase64) + 64,
- "a=mpeg4-iod: \042data:application/mpeg4-iod;base64,%s\042",
- iodBase64);
- MP4Free(iodBase64);
-
- delete pFile;
-
- return sdpIod;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: failed", __FUNCTION__ );
- }
-
- if (pFile)
- delete pFile;
- return NULL;
- }
-
- /* Edit list */
-
- MP4EditId MP4AddTrackEdit(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- MP4EditId editId,
- MP4Timestamp startTime,
- MP4Duration duration,
- bool dwell)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- MP4EditId newEditId =
- ((MP4File*)hFile)->AddTrackEdit(trackId, editId);
-
- if (newEditId != MP4_INVALID_EDIT_ID) {
- ((MP4File*)hFile)->SetTrackEditMediaStart(
- trackId, newEditId, startTime);
- ((MP4File*)hFile)->SetTrackEditDuration(
- trackId, newEditId, duration);
- ((MP4File*)hFile)->SetTrackEditDwell(
- trackId, newEditId, dwell);
- }
-
- return newEditId;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_EDIT_ID;
- }
-
- bool MP4DeleteTrackEdit(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- MP4EditId editId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->DeleteTrackEdit(trackId, editId);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- uint32_t MP4GetTrackNumberOfEdits(
- MP4FileHandle hFile,
- MP4TrackId trackId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetTrackNumberOfEdits(trackId);
- }
- catch( Exception* x ) {
- //mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: failed", __FUNCTION__ );
- }
- }
- return 0;
- }
-
- MP4Timestamp MP4GetTrackEditMediaStart(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- MP4EditId editId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetTrackEditMediaStart(
- trackId, editId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_TIMESTAMP;
- }
-
- MP4Duration MP4GetTrackEditTotalDuration(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- MP4EditId editId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetTrackEditTotalDuration(
- trackId, editId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_DURATION;
- }
-
- bool MP4SetTrackEditMediaStart(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- MP4EditId editId,
- MP4Timestamp startTime)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->SetTrackEditMediaStart(
- trackId, editId, startTime);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- MP4Duration MP4GetTrackEditDuration(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- MP4EditId editId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetTrackEditDuration(trackId, editId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_DURATION;
- }
-
- bool MP4SetTrackEditDuration(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- MP4EditId editId,
- MP4Duration duration)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->SetTrackEditDuration(trackId, editId, duration);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- int8_t MP4GetTrackEditDwell(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- MP4EditId editId)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetTrackEditDwell(trackId, editId);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: failed", __FUNCTION__ );
- }
- }
- return -1;
- }
-
- bool MP4SetTrackEditDwell(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- MP4EditId editId,
- bool dwell)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- ((MP4File*)hFile)->SetTrackEditDwell(trackId, editId, dwell);
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: failed", __FUNCTION__ );
- }
- }
- return false;
- }
-
- bool MP4ReadSampleFromEditTime(
- /* input parameters */
- MP4FileHandle hFile,
- MP4TrackId trackId,
- MP4Timestamp when,
- /* output parameters */
- uint8_t** ppBytes,
- uint32_t* pNumBytes,
- MP4Timestamp* pStartTime,
- MP4Duration* pDuration,
- MP4Duration* pRenderingOffset,
- bool* pIsSyncSample)
- {
- MP4SampleId sampleId =
- MP4GetSampleIdFromEditTime(
- hFile,
- trackId,
- when,
- pStartTime,
- pDuration);
-
- return MP4ReadSample(
- hFile,
- trackId,
- sampleId,
- ppBytes,
- pNumBytes,
- NULL,
- NULL,
- pRenderingOffset,
- pIsSyncSample);
- }
-
- MP4SampleId MP4GetSampleIdFromEditTime(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- MP4Timestamp when,
- MP4Timestamp* pStartTime,
- MP4Duration* pDuration)
- {
- if (MP4_IS_VALID_FILE_HANDLE(hFile)) {
- try {
- return ((MP4File*)hFile)->GetSampleIdFromEditTime(
- trackId, when, pStartTime, pDuration);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: failed", __FUNCTION__ );
- }
- }
- return MP4_INVALID_SAMPLE_ID;
- }
-
- /* Utlities */
-
- char* MP4BinaryToBase16(
- const uint8_t* pData,
- uint32_t dataSize)
- {
- if (pData || dataSize == 0) {
- try {
- return MP4ToBase16(pData, dataSize);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: failed", __FUNCTION__ );
- }
- }
- return NULL;
- }
-
- char* MP4BinaryToBase64(
- const uint8_t* pData,
- uint32_t dataSize)
- {
- if (pData || dataSize == 0) {
- try {
- return MP4ToBase64(pData, dataSize);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: failed", __FUNCTION__ );
- }
- }
- return NULL;
- }
-
- void MP4Free (void *p)
- {
- if (p != NULL)
- free(p);
- }
-
- bool MP4AddIPodUUID (MP4FileHandle hFile, MP4TrackId trackId)
- {
- if( !MP4_IS_VALID_FILE_HANDLE( hFile ))
- return false;
-
- MP4Track* track = NULL;
- MP4Atom* avc1 = NULL;
-
- try
- {
- track = ((MP4File*)hFile)->GetTrack(trackId);
- ASSERT(track);
- avc1 = track->GetTrakAtom().FindChildAtom("mdia.minf.stbl.stsd.avc1");
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- return false;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: failed", __FUNCTION__ );
- return false;
- }
-
- IPodUUIDAtom *ipod_uuid = NULL;
- try
- {
- ipod_uuid = new IPodUUIDAtom(*(MP4File*)hFile);
- }
- catch( std::bad_alloc ) {
- mp4v2::impl::log.errorf("%s: unable to allocate IPodUUIDAtom", __FUNCTION__);
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- return false;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: unknown exception constructing IPodUUIDAtom", __FUNCTION__ );
- return false;
- }
-
- try
- {
- ASSERT(avc1);
- ASSERT(ipod_uuid);
- avc1->AddChildAtom(ipod_uuid);
- return true;
- }
- catch( Exception* x ) {
- delete ipod_uuid;
- ipod_uuid = NULL;
- mp4v2::impl::log.errorf(*x);
- delete x;
- return false;
- }
- catch( ... ) {
- delete ipod_uuid;
- ipod_uuid = NULL;
- mp4v2::impl::log.errorf("%s: unknown exception adding IPodUUIDAtom", __FUNCTION__ );
- return false;
- }
-
- return false;
- }
-
-///////////////////////////////////////////////////////////////////////////////
-
-bool MP4GetTrackLanguage(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- char* code )
-{
- if( !MP4_IS_VALID_FILE_HANDLE( hFile ))
- return false;
-
- try {
- return ((MP4File*)hFile)->GetTrackLanguage( trackId, code );
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: failed", __FUNCTION__ );
- }
-
- return false;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-bool MP4SetTrackLanguage(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- const char* code )
-{
- if( !MP4_IS_VALID_FILE_HANDLE( hFile ))
- return false;
-
- try {
- return ((MP4File*)hFile)->SetTrackLanguage( trackId, code );
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: failed", __FUNCTION__ );
- }
-
- return false;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-bool MP4GetTrackName(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- char** name )
-{
- if( !MP4_IS_VALID_FILE_HANDLE( hFile ))
- return false;
-
- try {
- return ((MP4File*)hFile)->GetTrackName( trackId, name );
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: failed", __FUNCTION__ );
- }
-
- return false;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-bool MP4SetTrackName(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- const char* code )
-{
- if( !MP4_IS_VALID_FILE_HANDLE( hFile ))
- return false;
-
- try {
- return ((MP4File*)hFile)->SetTrackName( trackId, code );
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: failed", __FUNCTION__ );
- }
-
- return false;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-bool MP4GetTrackDurationPerChunk(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- MP4Duration* duration )
-{
- if( !MP4_IS_VALID_FILE_HANDLE( hFile ))
- return false;
-
- if (!duration)
- return false;
-
- try {
- *duration = ((MP4File*)hFile)->GetTrackDurationPerChunk( trackId );
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: failed", __FUNCTION__ );
- }
-
- return false;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-bool MP4SetTrackDurationPerChunk(
- MP4FileHandle hFile,
- MP4TrackId trackId,
- MP4Duration duration )
-{
- if( !MP4_IS_VALID_FILE_HANDLE( hFile ))
- return false;
-
- try {
- ((MP4File*)hFile)->SetTrackDurationPerChunk( trackId, duration );
- return true;
- }
- catch( Exception* x ) {
- mp4v2::impl::log.errorf(*x);
- delete x;
- }
- catch( ... ) {
- mp4v2::impl::log.errorf("%s: failed", __FUNCTION__ );
- }
-
- return false;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-} // extern "C"