17c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*
27c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project
37c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
47c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License");
57c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * you may not use this file except in compliance with the License.
67c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * You may obtain a copy of the License at
77c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
87c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *      http://www.apache.org/licenses/LICENSE-2.0
97c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software
117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS,
127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * See the License for the specific language governing permissions and
147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * limitations under the License.
157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi******************************************************************************
197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @file    M4MP4W_Utils.c
207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief   Utilities and private functions for the MP4 writer
217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi******************************************************************************
227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "NXPSW_CompilerSwitches.h"
257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifndef _M4MP4W_USE_CST_MEMORY_WRITER
277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4MP4W_Utils.h"
297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Error.h"
307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4MP4W_Types.h"
317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define ERR_CHECK(exp, err) if (!(exp)) { return err; }
337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*******************************************************************************/
357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MP4W_putByte(M4OSA_UChar c, M4OSA_FileWriterPointer* fileFunction,
367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                         M4OSA_Context context)
377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*******************************************************************************/
387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err = fileFunction->writeData(context, (M4OSA_MemAddr8)&c, 1);
407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return err;
417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*******************************************************************************/
447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MP4W_putBE16(M4OSA_UInt32 val, M4OSA_FileWriterPointer* fileFunction,
457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                         M4OSA_Context context)
467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*******************************************************************************/
477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = M4MP4W_putByte((M4OSA_UChar)(val >> 8), fileFunction, context);
507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    ERR_CHECK(err == M4NO_ERROR, err);
517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = M4MP4W_putByte((M4OSA_UChar)val, fileFunction, context);
527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return err;
537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*******************************************************************************/
567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MP4W_putBE24(M4OSA_UInt32 val, M4OSA_FileWriterPointer* fileFunction,
577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                         M4OSA_Context context)
587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*******************************************************************************/
597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = M4MP4W_putByte((M4OSA_UChar)(val >> 16), fileFunction, context);
627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    ERR_CHECK(err == M4NO_ERROR, err);
637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = M4MP4W_putByte((M4OSA_UChar)(val >> 8), fileFunction, context);
647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    ERR_CHECK(err == M4NO_ERROR, err);
657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = M4MP4W_putByte((M4OSA_UChar)val, fileFunction, context);
667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return err;
677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*******************************************************************************/
707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MP4W_putBE32(M4OSA_UInt32 val, M4OSA_FileWriterPointer* fileFunction,
717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                         M4OSA_Context context)
727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*******************************************************************************/
737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = M4MP4W_putByte((M4OSA_UChar)(val >> 24), fileFunction, context);
767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    ERR_CHECK(err == M4NO_ERROR, err);
777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = M4MP4W_putByte((M4OSA_UChar)(val >> 16), fileFunction, context);
787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    ERR_CHECK(err == M4NO_ERROR, err);
797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = M4MP4W_putByte((M4OSA_UChar)(val >> 8), fileFunction, context);
807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    ERR_CHECK(err == M4NO_ERROR, err);
817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = M4MP4W_putByte((M4OSA_UChar)val, fileFunction, context);
827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return err;
837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*******************************************************************************/
867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MP4W_putBlock(const M4OSA_UChar* Block, M4OSA_UInt32 size,
877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                           M4OSA_FileWriterPointer* fileFunction, M4OSA_Context context)
887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*******************************************************************************/
897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err = fileFunction->writeData(context, (M4OSA_MemAddr8)Block, size);
917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return err;
927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*******************************************************************************/
957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargivoid M4MP4W_convertInt32BE(M4OSA_UInt32* valPtr)
967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*******************************************************************************/
977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UChar a, b;
997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UChar* c = (M4OSA_UChar*)valPtr;
1007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    a       = *(c);
1017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    b       = *(c+1);
1027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *(c)   = *(c+3);
1037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *(c+1) = *(c+2);
1047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *(c+2) = b;
1057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *(c+3) = a;
1067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
1077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*******************************************************************************/
1097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargivoid M4MP4W_table32ToBE(M4OSA_UInt32* tab, M4OSA_UInt32 nb)
1107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*******************************************************************************/
1117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
1127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 i;
1137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    for (i=0; i<nb; i++)
1147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4MP4W_convertInt32BE(&(tab)[i]);
1157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
1167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*******************************************************************************/
1187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargivoid* M4MP4W_realloc(M4OSA_MemAddr32 ptr, M4OSA_UInt32 oldSize, M4OSA_UInt32 newSize)
1197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*******************************************************************************/
1207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
121694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu    M4OSA_MemAddr32 ptr2 = (M4OSA_MemAddr32)M4OSA_32bitAlignedMalloc(newSize, M4MP4_WRITER,
1227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                          (M4OSA_Char *)"realloc");
1237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4OSA_NULL != ptr2)
1247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
12532ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu        memcpy((void *)ptr2, (void *)ptr, oldSize);
1267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
127694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu    free(ptr);
1287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return ptr2;
1297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
1307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*******************************************************************************/
1327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MP4W_freeContext(M4OSA_Context context)
1337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*******************************************************************************/
1347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
1357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef _M4MP4W_MOOV_FIRST
1367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 i;
1377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /*_M4MP4W_MOOV_FIRST*/
1387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4MP4W_Mp4FileData* mMp4FileDataPtr = (M4MP4W_Mp4FileData*)context;
1397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    ERR_CHECK(context != M4OSA_NULL, M4ERR_PARAMETER);
1407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /*freeContext is now called after closeWrite*/
1427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    ERR_CHECK( mMp4FileDataPtr->state == M4MP4W_closed, M4ERR_STATE);
1437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    mMp4FileDataPtr->state = M4MP4W_closed;
1447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (mMp4FileDataPtr->audioTrackPtr != M4OSA_NULL)
1467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /*delete also other chunks if any*/
1487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /*for (i=0; i<=mMp4FileDataPtr->audioTrackPtr->currentChunk; i++)*/
1497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef _M4MP4W_MOOV_FIRST
1517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        for (i=0; i<=mMp4FileDataPtr->audioTrackPtr->LastAllocatedChunk; i++)
1527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
153694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            free(mMp4FileDataPtr->audioTrackPtr->Chunk[i]);
1547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
1557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#else
1567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if ((M4OSA_NULL != mMp4FileDataPtr->audioTrackPtr->Chunk) &&
1577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi             (M4OSA_NULL != mMp4FileDataPtr->audioTrackPtr->Chunk[0]))
1587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
159694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            free(mMp4FileDataPtr->audioTrackPtr->Chunk[0]);
1607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
1617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4OSA_NULL != mMp4FileDataPtr->audioTrackPtr->chunkOffsetTable)
1627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
163694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            free(mMp4FileDataPtr->audioTrackPtr->chunkOffsetTable);
1647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
1657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /*_M4MP4W_MOOV_FIRST*/
1667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /*now dynamic*/
1687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4OSA_NULL != mMp4FileDataPtr->audioTrackPtr->Chunk)
1697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
170694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            free(mMp4FileDataPtr->audioTrackPtr->Chunk);
1717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
1727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4OSA_NULL != mMp4FileDataPtr->audioTrackPtr->chunkSizeTable)
1737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
174694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            free(mMp4FileDataPtr->audioTrackPtr->chunkSizeTable);
1757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
1767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4OSA_NULL != mMp4FileDataPtr->audioTrackPtr->chunkSampleNbTable)
1777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
178694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            free(mMp4FileDataPtr->audioTrackPtr->chunkSampleNbTable);
1797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
1807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4OSA_NULL != mMp4FileDataPtr->audioTrackPtr->chunkTimeMsTable)
1817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
182694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            free(mMp4FileDataPtr->audioTrackPtr->chunkTimeMsTable);
1837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
1847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (mMp4FileDataPtr->audioTrackPtr->TABLE_STTS != M4OSA_NULL)
1867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
187694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            free(mMp4FileDataPtr->audioTrackPtr->TABLE_STTS);
1887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
1897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (mMp4FileDataPtr->audioTrackPtr->TABLE_STSZ != M4OSA_NULL)
1917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
192694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            free(mMp4FileDataPtr->audioTrackPtr->TABLE_STSZ);
1937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
1947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (mMp4FileDataPtr->audioTrackPtr->DSI != M4OSA_NULL)
1967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
197694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            free(mMp4FileDataPtr->audioTrackPtr->DSI);
1987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            mMp4FileDataPtr->audioTrackPtr->DSI = M4OSA_NULL;
1997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
2007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
201694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(mMp4FileDataPtr->audioTrackPtr);
2027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        mMp4FileDataPtr->audioTrackPtr = M4OSA_NULL;
2037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
2047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (mMp4FileDataPtr->videoTrackPtr != M4OSA_NULL)
2057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
2067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /*delete also other chunks if any*/
2077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /*for (i=0; i<=mMp4FileDataPtr->videoTrackPtr->currentChunk; i++)*/
2087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef _M4MP4W_MOOV_FIRST
2107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        for (i=0; i<=mMp4FileDataPtr->videoTrackPtr->LastAllocatedChunk; i++)
2117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
212694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            free(mMp4FileDataPtr->videoTrackPtr->Chunk[i]);
2137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
2147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#else
2157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if ((M4OSA_NULL != mMp4FileDataPtr->videoTrackPtr->Chunk) &&
2167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi             (M4OSA_NULL != mMp4FileDataPtr->videoTrackPtr->Chunk[0]))
2177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
218694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            free(mMp4FileDataPtr->videoTrackPtr->Chunk[0]);
2197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
2207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4OSA_NULL != mMp4FileDataPtr->videoTrackPtr->chunkOffsetTable)
2217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
222694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            free(mMp4FileDataPtr->videoTrackPtr->chunkOffsetTable);
2237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
2247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /*_M4MP4W_MOOV_FIRST*/
2257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /*now dynamic*/
2277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4OSA_NULL != mMp4FileDataPtr->videoTrackPtr->Chunk)
2287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
229694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            free(mMp4FileDataPtr->videoTrackPtr->Chunk);
2307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
2317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4OSA_NULL != mMp4FileDataPtr->videoTrackPtr->chunkSizeTable)
2327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
233694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            free(mMp4FileDataPtr->videoTrackPtr->chunkSizeTable);
2347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
2357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4OSA_NULL != mMp4FileDataPtr->videoTrackPtr->chunkSampleNbTable)
2367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
237694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            free(mMp4FileDataPtr->videoTrackPtr->chunkSampleNbTable);
2387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
2397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4OSA_NULL != mMp4FileDataPtr->videoTrackPtr->chunkTimeMsTable)
2407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
241694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            free(mMp4FileDataPtr->videoTrackPtr->chunkTimeMsTable);
2427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
2437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (mMp4FileDataPtr->videoTrackPtr->DSI != M4OSA_NULL)
2457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
246694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            free(mMp4FileDataPtr->videoTrackPtr->DSI);
2477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            mMp4FileDataPtr->videoTrackPtr->DSI = M4OSA_NULL;
2487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
2497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /*now dynamic*/
2517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4OSA_NULL != mMp4FileDataPtr->videoTrackPtr->TABLE_STTS)
2527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
253694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            free(mMp4FileDataPtr->videoTrackPtr->TABLE_STTS);
2547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
2557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4OSA_NULL != mMp4FileDataPtr->videoTrackPtr->TABLE_STSZ)
2567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
257694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            free(mMp4FileDataPtr->videoTrackPtr->TABLE_STSZ);
2587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
2597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4OSA_NULL != mMp4FileDataPtr->videoTrackPtr->TABLE_STSS)
2607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
261694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            free(mMp4FileDataPtr->videoTrackPtr->TABLE_STSS);
2627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
2637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
264694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(mMp4FileDataPtr->videoTrackPtr);
2657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        mMp4FileDataPtr->videoTrackPtr = M4OSA_NULL;
2667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
2677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (mMp4FileDataPtr->embeddedString != M4OSA_NULL)
2697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
270694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(mMp4FileDataPtr->embeddedString);
2717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        mMp4FileDataPtr->embeddedString = M4OSA_NULL;
2727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
2737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
274694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu    free(mMp4FileDataPtr);
2757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
2777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
2787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef _M4MP4W_OPTIMIZE_FOR_PHONE
2807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*******************************************************************************/
2817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_Void M4MP4W_put32_Hi(M4OSA_UInt32* tab, M4OSA_UInt16 Hi)
2827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*******************************************************************************/
2837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
2847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *tab &= 0xFFFF;
2857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *tab |= Hi<<16;
2867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
2877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*******************************************************************************/
2897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_Void M4MP4W_put32_Lo(M4OSA_UInt32* tab, M4OSA_UInt16 Lo)
2907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*******************************************************************************/
2917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
2927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *tab &= 0xFFFF0000;
2937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *tab |= Lo;
2947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
2957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*******************************************************************************/
2977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_UInt16 M4MP4W_get32_Hi(M4OSA_UInt32* tab)
2987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*******************************************************************************/
2997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
3007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return (*tab >> 16) & 0xFFFF;
3017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
3027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*******************************************************************************/
3047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_UInt16 M4MP4W_get32_Lo(M4OSA_UInt32* tab)
3057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*******************************************************************************/
3067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
3077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return *tab & 0xFFFF;
3087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
3097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif
3107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* _M4MP4W_USE_CST_MEMORY_WRITER */
3127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
313