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 * @file M4PTO3GPP_API.c 197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Picture to 3gpp Service implementation. 207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*16 bytes signature to be written in the generated 3gp files */ 257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4PTO3GPP_SIGNATURE "NXP-SW : PTO3GPP" 267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************/ 287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*** Includes ***/ 297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************/ 307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Our header */ 337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4PTO3GPP_InternalTypes.h" 347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4PTO3GPP_API.h" 357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Our errors */ 387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4PTO3GPP_ErrorCodes.h" 397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_SUPPORT_ENCODER_MPEG4 417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "VideoEditorVideoEncoder.h" 427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif 437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * OSAL headers */ 477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Memory.h" /* OSAL memory management */ 487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Debug.h" /* OSAL debug management */ 497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/************************/ 527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*** Various Magicals ***/ 537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/************************/ 547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4PTO3GPP_WRITER_AUDIO_STREAM_ID 1 567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4PTO3GPP_WRITER_VIDEO_STREAM_ID 2 577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4PTO3GPP_QUANTIZER_STEP 4 /**< Quantizer step */ 587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4PTO3GPP_WRITER_AUDIO_PROFILE_LEVEL 0xFF /**< No specific profile and 597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi level */ 607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4PTO3GPP_WRITER_AUDIO_AMR_TIME_SCALE 8000 /**< AMR */ 617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4PTO3GPP_BITRATE_REGULATION_CTS_PERIOD_IN_MS 500 /**< MAGICAL */ 627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4PTO3GPP_MARGE_OF_FILE_SIZE 25000 /**< MAGICAL */ 637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * define AMR 12.2 kbps silence frame 667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4PTO3GPP_AMR_AU_SILENCE_FRAME_122_SIZE 32 697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4PTO3GPP_AMR_AU_SILENCE_FRAME_122_DURATION 20 707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargiconst M4OSA_UInt8 M4PTO3GPP_AMR_AU_SILENCE_122_FRAME[M4PTO3GPP_AMR_AU_SILENCE_FRAME_122_SIZE]= 717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 0x3C, 0x91, 0x17, 0x16, 0xBE, 0x66, 0x78, 0x00, 0x00, 0x01, 0xE7, 0xAF, 727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; 747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4PTO3GPP_AMR_AU_SILENCE_FRAME_048_SIZE 13 767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4PTO3GPP_AMR_AU_SILENCE_FRAME_048_DURATION 20 777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargiconst M4OSA_UInt8 M4PTO3GPP_AMR_AU_SILENCE_048_FRAME[M4PTO3GPP_AMR_AU_SILENCE_FRAME_048_SIZE] = 787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 0x04, 0xFF, 0x18, 0xC7, 0xF0, 0x0D, 0x04, 0x33, 0xFF, 0xE0, 0x00, 0x00, 0x00 }; 797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/***************************/ 817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*** "Private" functions ***/ 827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/***************************/ 837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR M4PTO3GPP_Ready4Processing(M4PTO3GPP_InternalContext* pC); 847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************/ 867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*** "External" functions ***/ 877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************/ 887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargiextern M4OSA_ERR M4WRITER_3GP_getInterfaces(M4WRITER_OutputFileType* pType, 897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_GlobalInterface** SrcGlobalInterface, 907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_DataInterface** SrcDataInterface); 917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargiextern M4OSA_ERR M4READER_AMR_getInterfaces(M4READER_MediaType *pMediaType, 927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_GlobalInterface **pRdrGlobalInterface, 937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_DataInterface **pRdrDataInterface); 947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargiextern M4OSA_ERR M4READER_3GP_getInterfaces(M4READER_MediaType *pMediaType, 957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_GlobalInterface **pRdrGlobalInterface, 967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_DataInterface **pRdrDataInterface); 977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************/ 997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*** "Static" functions ***/ 1007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************/ 1017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR M4PTO3GPP_writeAmrSilence122Frame( 1027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_DataInterface* pWriterDataIntInterface, 1037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_Context* pWriterContext, 1047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_AccessUnit* pWriterAudioAU, 1057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Time mtIncCts); 1067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR M4PTO3GPP_writeAmrSilence048Frame( 1077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_DataInterface* pWriterDataIntInterface, 1087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_Context* pWriterContext, 1097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_AccessUnit* pWriterAudioAU, 1107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Time mtIncCts); 1117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 1127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 1137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4PTO3GPP_GetVersion(M4_VersionInfo* pVersionInfo); 1147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Get the M4PTO3GPP version. 1157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note Can be called anytime. Do not need any context. 1167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pVersionInfo (OUT) Pointer to a version info structure 1177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 1187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: pVersionInfo is M4OSA_NULL (If Debug Level >= 2) 1197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 1207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 1217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*********************************************************/ 1237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4PTO3GPP_GetVersion(M4_VersionInfo* pVersionInfo) 1247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*********************************************************/ 1257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 1267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_1("M4PTO3GPP_GetVersion called with pVersionInfo=0x%x", pVersionInfo); 1277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check input parameters */ 1307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL==pVersionInfo),M4ERR_PARAMETER, 1317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4PTO3GPP_GetVersion: pVersionInfo is M4OSA_NULL"); 1327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pVersionInfo->m_major = M4PTO3GPP_VERSION_MAJOR; 1347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pVersionInfo->m_minor = M4PTO3GPP_VERSION_MINOR; 1357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pVersionInfo->m_revision = M4PTO3GPP_VERSION_REVISION; 1367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 1387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 1397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 1417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 1427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4PTO3GPP_Init(M4PTO3GPP_Context* pContext); 1437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Initializes the M4PTO3GPP (allocates an execution context). 1447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 1457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (OUT) Pointer on the M4PTO3GPP context to allocate 1467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pFileReadPtrFct (IN) Pointer to OSAL file reader functions 1477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pFileWritePtrFct (IN) Pointer to OSAL file writer functions 1487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 1497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one parameter is M4OSA_NULL (If Debug Level >= 2) 1507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_ALLOC: There is no more available memory 1517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 1527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 1537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*********************************************************/ 1547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4PTO3GPP_Init( M4PTO3GPP_Context* pContext, 1557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_FileReadPointer* pFileReadPtrFct, 1567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_FileWriterPointer* pFileWritePtrFct) 1577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*********************************************************/ 1587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 1597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4PTO3GPP_InternalContext *pC; 1607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 i; 1617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_1("M4PTO3GPP_Init called with pContext=0x%x", pContext); 1637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check input parameters */ 1667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER, 1677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4PTO3GPP_Init: pContext is M4OSA_NULL"); 1687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Allocate the M4PTO3GPP context and return it to the user */ 171694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu pC = (M4PTO3GPP_InternalContext*)M4OSA_32bitAlignedMalloc(sizeof(M4PTO3GPP_InternalContext), M4PTO3GPP, 1727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char *)"M4PTO3GPP_InternalContext"); 1737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pContext = pC; 1747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == pC) 1757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4PTO3GPP_Step(): unable to allocate M4PTO3GPP_InternalContext,\ 1777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returning M4ERR_ALLOC"); 1787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 1797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Init the context. All pointers must be initialized to M4OSA_NULL because CleanUp() 1837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi can be called just after Init(). */ 1847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_State = M4PTO3GPP_kState_CREATED; 1857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_VideoState = M4PTO3GPP_kStreamState_NOSTREAM; 1867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_AudioState = M4PTO3GPP_kStreamState_NOSTREAM; 1877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Reader stuff */ 1907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReaderAudioAU = M4OSA_NULL; 1917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReaderAudioStream = M4OSA_NULL; 1927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Writer stuff */ 1957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pEncoderHeader = M4OSA_NULL; 1967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterVideoStream = M4OSA_NULL; 1977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterAudioStream = M4OSA_NULL; 1987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterVideoStreamInfo= M4OSA_NULL; 1997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterAudioStreamInfo= M4OSA_NULL; 2007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 2027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Contexts of the used modules */ 2037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pAudioReaderContext = M4OSA_NULL; 2047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_p3gpWriterContext = M4OSA_NULL; 2057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pMp4EncoderContext = M4OSA_NULL; 2067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_eEncoderState = M4PTO3GPP_kNoEncoder; 2077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 2097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Interfaces of the used modules */ 2107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReaderGlobInt = M4OSA_NULL; 2117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReaderDataInt = M4OSA_NULL; 2127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterGlobInt = M4OSA_NULL; 2137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterDataInt = M4OSA_NULL; 2147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pEncoderInt = M4OSA_NULL; 2157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pEncoderExternalAPI = M4OSA_NULL; 2167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pEncoderUserData = M4OSA_NULL; 2177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 2197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Fill the OSAL file function set */ 2207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pOsalFileRead = pFileReadPtrFct; 2217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pOsalFileWrite = pFileWritePtrFct; 2227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 2247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Video rate control stuff */ 2257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_mtCts = 0.0F; 2267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_mtNextCts = 0.0F; 2277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_mtAudioCts = 0.0F; 2287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_AudioOffSet = 0.0F; 2297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_dLastVideoRegulCts= 0.0F; 2307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_PrevAudioCts = 0.0F; 2317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_DeltaAudioCts = 0.0F; 2327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_MaxFileSize = 0; 2347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_CurrentFileSize = 0; 2357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_IsLastPicture = M4OSA_FALSE; 2377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_bAudioPaddingSilence = M4OSA_FALSE; 2387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_bLastInternalCallBack = M4OSA_FALSE; 2397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_NbCurrentFrame = 0; 2407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pSavedPlane = M4OSA_NULL; 2427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->uiSavedDuration = 0; 2437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_0("M4PTO3GPP_Init(): returning M4NO_ERROR"); 2457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 2467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 2477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 2497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 2507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4PTO3GPP_Open(M4PTO3GPP_Context pContext, M4PTO3GPP_Params* pParams); 2517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Set the M4PTO3GPP input and output files. 2527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note It opens the input file, but the output file may not be created yet. 2537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN) M4PTO3GPP context 2547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pParams (IN) Pointer to the parameters for the PTO3GPP. 2557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note The pointed structure can be de-allocated after this function returns because 2567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * it is internally copied by the PTO3GPP 2577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 2587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one parameter is M4OSA_NULL 2597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_STATE: M4PTO3GPP is not in an appropriate state for this function to be 2600a389ab70db304fb840e33f33781ecc0503eae3chongteng called 2617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_ALLOC: There is no more available memory 2627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return ERR_PTO3GPP_INVALID_VIDEO_FRAME_SIZE_FOR_H263 The output video frame 2637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * size parameter is incompatible with H263 encoding 2647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return ERR_PTO3GPP_UNDEFINED_OUTPUT_VIDEO_FORMAT The output video format 2657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi parameter is undefined 2667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return ERR_PTO3GPP_UNDEFINED_OUTPUT_VIDEO_BITRATE The output video bit-rate parameter 2677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi is undefined 2687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return ERR_PTO3GPP_UNDEFINED_OUTPUT_VIDEO_FRAME_SIZE The output video frame size parameter 2697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi is undefined 2707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return ERR_PTO3GPP_UNDEFINED_OUTPUT_FILE_SIZE The output file size parameter 2717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi is undefined 2727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return ERR_PTO3GPP_UNDEFINED_AUDIO_PADDING The output audio padding parameter 2737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi is undefined 2747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return ERR_PTO3GPP_UNHANDLED_AUDIO_TRACK_INPUT_FILE The input audio file contains 2757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi a track format not handled by PTO3GPP 2767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 2777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 2787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*********************************************************/ 2797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4PTO3GPP_Open(M4PTO3GPP_Context pContext, M4PTO3GPP_Params* pParams) 2807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*********************************************************/ 2817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 2827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4PTO3GPP_InternalContext *pC = (M4PTO3GPP_InternalContext*)(pContext); 2837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 2847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_MediaFamily mediaFamily; 2867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamHandler* pStreamHandler; 2877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_MediaType readerMediaType; 2887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_2("M4PTO3GPP_Open called with pContext=0x%x, pParams=0x%x", pContext, pParams); 2907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 2927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check input parameters */ 2937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER, \ 2947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4PTO3GPP_Open: pContext is M4OSA_NULL"); 2957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pParams), M4ERR_PARAMETER, \ 2967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4PTO3GPP_Open: pParams is M4OSA_NULL"); 2977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 2997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check parameters correctness */ 3007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pParams->pPictureCallbackFct), 3017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4ERR_PARAMETER, "M4PTO3GPP_Open: pC->m_Params.pPictureCallbackFct is M4OSA_NULL"); 3027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pParams->pPictureCallbackCtxt), 3037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4ERR_PARAMETER, 3047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4PTO3GPP_Open: pC->m_Params.pPictureCallbackCtxt is M4OSA_NULL"); 3057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pParams->pOutput3gppFile), 3067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4ERR_PARAMETER, "M4PTO3GPP_Open: pC->m_Params.pOutput3gppFile is M4OSA_NULL"); 3077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pParams->pTemporaryFile), 3087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4ERR_PARAMETER, "M4PTO3GPP_Open: pC->m_Params.pTemporaryFile is M4OSA_NULL"); 3097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 3117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Video Format */ 3120a389ab70db304fb840e33f33781ecc0503eae3chongteng if( (M4VIDEOEDITING_kH263 != pParams->OutputVideoFormat) && 3137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_kMPEG4 != pParams->OutputVideoFormat) && 3148806b706693c0992724f6603353af18aeb4a0f80Hong Teng (M4VIDEOEDITING_kH264 != pParams->OutputVideoFormat)) { 3157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4PTO3GPP_Open: Undefined output video format"); 3167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return ERR_PTO3GPP_UNDEFINED_OUTPUT_VIDEO_FORMAT; 3177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 3207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Video Bitrate */ 3210a389ab70db304fb840e33f33781ecc0503eae3chongteng if(!((M4VIDEOEDITING_k16_KBPS == pParams->OutputVideoBitrate) || 3227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_k24_KBPS == pParams->OutputVideoBitrate) || 3237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_k32_KBPS == pParams->OutputVideoBitrate) || 3247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_k48_KBPS == pParams->OutputVideoBitrate) || 3257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_k64_KBPS == pParams->OutputVideoBitrate) || 3267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_k96_KBPS == pParams->OutputVideoBitrate) || 3277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_k128_KBPS == pParams->OutputVideoBitrate) || 3287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_k192_KBPS == pParams->OutputVideoBitrate) || 3297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_k256_KBPS == pParams->OutputVideoBitrate) || 3307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_k288_KBPS == pParams->OutputVideoBitrate) || 3317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_k384_KBPS == pParams->OutputVideoBitrate) || 3327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_k512_KBPS == pParams->OutputVideoBitrate) || 3337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_k800_KBPS == pParams->OutputVideoBitrate) || 3347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*+ New Encoder bitrates */ 3357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_k2_MBPS == pParams->OutputVideoBitrate) || 3367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_k5_MBPS == pParams->OutputVideoBitrate) || 3377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_k8_MBPS == pParams->OutputVideoBitrate) || 3388806b706693c0992724f6603353af18aeb4a0f80Hong Teng (M4VIDEOEDITING_kVARIABLE_KBPS == pParams->OutputVideoBitrate))) { 3397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4PTO3GPP_Open: Undefined output video bitrate"); 3407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return ERR_PTO3GPP_UNDEFINED_OUTPUT_VIDEO_BITRATE; 3417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 3447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Video frame size */ 3457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (!((M4VIDEOEDITING_kSQCIF == pParams->OutputVideoFrameSize) || 3467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_kQQVGA == pParams->OutputVideoFrameSize) || 3477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_kQCIF == pParams->OutputVideoFrameSize) || 3487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_kQVGA == pParams->OutputVideoFrameSize) || 3497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_kCIF == pParams->OutputVideoFrameSize) || 3507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_kVGA == pParams->OutputVideoFrameSize) || 3517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_kNTSC == pParams->OutputVideoFrameSize) || 3537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_kWVGA == pParams->OutputVideoFrameSize) || 3547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_k640_360 == pParams->OutputVideoFrameSize) || 3567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_k854_480 == pParams->OutputVideoFrameSize) || 3578806b706693c0992724f6603353af18aeb4a0f80Hong Teng (M4VIDEOEDITING_k1280_720 == pParams->OutputVideoFrameSize) || 3588806b706693c0992724f6603353af18aeb4a0f80Hong Teng (M4VIDEOEDITING_k1080_720 == pParams->OutputVideoFrameSize) || 3598806b706693c0992724f6603353af18aeb4a0f80Hong Teng (M4VIDEOEDITING_k960_720 == pParams->OutputVideoFrameSize) || 3608806b706693c0992724f6603353af18aeb4a0f80Hong Teng (M4VIDEOEDITING_k1920_1080 == pParams->OutputVideoFrameSize))) { 3617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4PTO3GPP_Open: Undefined output video frame size"); 3627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return ERR_PTO3GPP_UNDEFINED_OUTPUT_VIDEO_FRAME_SIZE; 3637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 3667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Maximum size of the output 3GPP file */ 3677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (!((M4PTO3GPP_k50_KB == pParams->OutputFileMaxSize) || 3687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4PTO3GPP_k75_KB == pParams->OutputFileMaxSize) || 3697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4PTO3GPP_k100_KB == pParams->OutputFileMaxSize) || 3707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4PTO3GPP_k150_KB == pParams->OutputFileMaxSize) || 3717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4PTO3GPP_k200_KB == pParams->OutputFileMaxSize) || 3727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4PTO3GPP_k300_KB == pParams->OutputFileMaxSize) || 3737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4PTO3GPP_k400_KB == pParams->OutputFileMaxSize) || 3747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4PTO3GPP_k500_KB == pParams->OutputFileMaxSize) || 3758806b706693c0992724f6603353af18aeb4a0f80Hong Teng (M4PTO3GPP_kUNLIMITED == pParams->OutputFileMaxSize))) { 3767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4PTO3GPP_Open: Undefined output 3GPP file size"); 3777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return ERR_PTO3GPP_UNDEFINED_OUTPUT_FILE_SIZE; 3787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Audio padding */ 3818806b706693c0992724f6603353af18aeb4a0f80Hong Teng if (M4OSA_NULL != pParams->pInputAudioTrackFile) { 3827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if ((!( (M4PTO3GPP_kAudioPaddingMode_None == pParams->AudioPaddingMode) || 3837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4PTO3GPP_kAudioPaddingMode_Silence== pParams->AudioPaddingMode) || 3848806b706693c0992724f6603353af18aeb4a0f80Hong Teng (M4PTO3GPP_kAudioPaddingMode_Loop == pParams->AudioPaddingMode)))) { 3857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4PTO3GPP_Open: Undefined audio padding"); 3867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return ERR_PTO3GPP_UNDEFINED_AUDIO_PADDING; 3877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< Size check for H263 (only valid sizes are CIF, QCIF and SQCIF) */ 3917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if ((M4VIDEOEDITING_kH263 == pParams->OutputVideoFormat) && 3927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_kSQCIF != pParams->OutputVideoFrameSize) && 3937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4VIDEOEDITING_kQCIF != pParams->OutputVideoFrameSize) && 3948806b706693c0992724f6603353af18aeb4a0f80Hong Teng (M4VIDEOEDITING_kCIF != pParams->OutputVideoFrameSize)) { 3957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4PTO3GPP_Open():\ 3967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returning ERR_PTO3GPP_INVALID_VIDEO_FRAME_SIZE_FOR_H263"); 3977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return ERR_PTO3GPP_INVALID_VIDEO_FRAME_SIZE_FOR_H263; 3987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 4017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check state automaton */ 4028806b706693c0992724f6603353af18aeb4a0f80Hong Teng if (M4PTO3GPP_kState_CREATED != pC->m_State) { 4037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Open(): Wrong State (%d), returning M4ERR_STATE", pC->m_State); 4047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_STATE; 4057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 4087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Copy the M4PTO3GPP_Params structure */ 40932ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memcpy((void *)(&pC->m_Params), 41032ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu (void *)pParams, sizeof(M4PTO3GPP_Params)); 4117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Open: outputVideoBitrate = %d", pC->m_Params.OutputVideoBitrate); 4127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /***********************************/ 4147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Open input file with the reader */ 4157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /***********************************/ 4168806b706693c0992724f6603353af18aeb4a0f80Hong Teng if (M4OSA_NULL != pC->m_Params.pInputAudioTrackFile) { 4177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 4187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Get the reader interface according to the input audio file type */ 4197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch(pC->m_Params.AudioFileFormat) 4207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_SUPPORT_READER_AMR 4227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kFileType_AMR: 4237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4READER_AMR_getInterfaces( &readerMediaType, &pC->m_pReaderGlobInt, 4247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi &pC->m_pReaderDataInt); 4257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 4267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Open(): M4READER_AMR_getInterfaces returns 0x%x", err); 4287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 4297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 4317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif 4327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef AAC_SUPPORTED 4347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kFileType_3GPP: 4357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4READER_3GP_getInterfaces( &readerMediaType, &pC->m_pReaderGlobInt, 4367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi &pC->m_pReaderDataInt); 4377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 4387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Open(): M4READER_3GP_getInterfaces returns 0x%x", err); 4407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 4417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 4437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif 4447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default: 4467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return ERR_PTO3GPP_UNHANDLED_AUDIO_TRACK_INPUT_FILE; 4477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 4507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Initializes the reader shell */ 4517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pReaderGlobInt->m_pFctCreate(&pC->m_pAudioReaderContext); 4527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 4537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Open(): pReaderGlobInt->m_pFctCreate returns 0x%x", err); 4557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 4567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReaderDataInt->m_readerContext = pC->m_pAudioReaderContext; 4597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< Link the reader interface to the reader context */ 4607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 4627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Set the reader shell file access functions */ 4637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pReaderGlobInt->m_pFctSetOption(pC->m_pAudioReaderContext, 4647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_kOptionID_SetOsaFileReaderFctsPtr, (M4OSA_DataOption)pC->pOsalFileRead); 4657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 4667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Open(): pReaderGlobInt->m_pFctSetOption returns 0x%x", err); 4687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 4697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 4727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Open the input audio file */ 4737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pReaderGlobInt->m_pFctOpen(pC->m_pAudioReaderContext, 4747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_Params.pInputAudioTrackFile); 4757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 4767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Open(): pReaderGlobInt->m_pFctOpen returns 0x%x", err); 4787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReaderGlobInt->m_pFctDestroy(pC->m_pAudioReaderContext); 4797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pAudioReaderContext = M4OSA_NULL; 4807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 4817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 4847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Get the audio streams from the input file */ 4857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4NO_ERROR; 4867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi while (M4NO_ERROR == err) 4877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pReaderGlobInt->m_pFctGetNextStream(pC->m_pAudioReaderContext, 4897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi &mediaFamily, &pStreamHandler); 4907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if((err == ((M4OSA_UInt32)M4ERR_READER_UNKNOWN_STREAM_TYPE)) || 4927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (err == ((M4OSA_UInt32)M4WAR_TOO_MUCH_STREAMS))) 4937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4NO_ERROR; 4957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi continue; 4967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR == err) /**< One stream found */ 4997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< Found an audio stream */ 5017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if ((M4READER_kMediaFamilyAudio == mediaFamily) 5027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi && (M4OSA_NULL == pC->m_pReaderAudioStream)) 5037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReaderAudioStream = (M4_AudioStreamHandler*)pStreamHandler; 5057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< Keep pointer to the audio stream */ 5067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_0("M4PTO3GPP_Open(): Found an audio stream in input"); 5077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler->m_bStreamIsOK = M4OSA_TRUE; 5087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 5107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Allocate audio AU used for read operations */ 511694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu pC->m_pReaderAudioAU = (M4_AccessUnit*)M4OSA_32bitAlignedMalloc(sizeof(M4_AccessUnit), 5127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4PTO3GPP,(M4OSA_Char *)"pReaderAudioAU"); 5137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == pC->m_pReaderAudioAU) 5147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4PTO3GPP_Open(): unable to allocate pReaderAudioAU, \ 5167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returning M4ERR_ALLOC"); 5177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 5187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 5217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Initializes an access Unit */ 5227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pReaderGlobInt->m_pFctFillAuStruct(pC->m_pAudioReaderContext, 5237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler, pC->m_pReaderAudioAU); 5247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 5257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Open():\ 5277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderGlobInt->m_pFctFillAuStruct(audio)returns 0x%x", err); 5287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 5297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 5327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamHandler->m_bStreamIsOK = M4OSA_FALSE; 5347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else if (M4WAR_NO_MORE_STREAM != err) /**< Unexpected error code */ 5377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Open():\ 5397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderGlobInt->m_pFctGetNextStream returns 0x%x", 5407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err); 5417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 5427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } /* while*/ 5447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } /*if (M4OSA_NULL != pC->m_Params.pInputAudioTrackFile)*/ 5457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_VideoState = M4PTO3GPP_kStreamState_STARTED; 5477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 5497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Init the audio stream */ 5507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL != pC->m_pReaderAudioStream) 5517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_AudioState = M4PTO3GPP_kStreamState_STARTED; 5537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pReaderGlobInt->m_pFctReset(pC->m_pAudioReaderContext, 5547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4_StreamHandler*)pC->m_pReaderAudioStream); 5557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 5567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Open(): pReaderDataInt->m_pFctReset(audio returns 0x%x", 5587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err); 5597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 5607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 5647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Update state automaton */ 5657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_State = M4PTO3GPP_kState_OPENED; 5667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 5687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Get the max File size */ 5697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch(pC->m_Params.OutputFileMaxSize) 5707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4PTO3GPP_k50_KB: pC->m_MaxFileSize = 50000; break; 5727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4PTO3GPP_k75_KB: pC->m_MaxFileSize = 75000; break; 5737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4PTO3GPP_k100_KB: pC->m_MaxFileSize = 100000; break; 5747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4PTO3GPP_k150_KB: pC->m_MaxFileSize = 150000; break; 5757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4PTO3GPP_k200_KB: pC->m_MaxFileSize = 200000; break; 5767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4PTO3GPP_k300_KB: pC->m_MaxFileSize = 300000; break; 5777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4PTO3GPP_k400_KB: pC->m_MaxFileSize = 400000; break; 5787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4PTO3GPP_k500_KB: pC->m_MaxFileSize = 500000; break; 5797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4PTO3GPP_kUNLIMITED: 5807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default: break; 5817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_0("M4PTO3GPP_Open(): returning M4NO_ERROR"); 5847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 5857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 5867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 5887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 5897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4PTO3GPP_Step(M4PTO3GPP_Context pContext); 5907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Perform one step of trancoding. 5917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 5927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN) M4PTO3GPP context 5937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR No error 5947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER pContext is M4OSA_NULL 5957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_STATE: M4PTO3GPP is not in an appropriate state for this function 5967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * to be called 5977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4PTO3GPP_WAR_END_OF_PROCESSING Encoding completed 5987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 5997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 6007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*********************************************************/ 6017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4PTO3GPP_Step(M4PTO3GPP_Context pContext) 6027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*********************************************************/ 6037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 6047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4PTO3GPP_InternalContext *pC = (M4PTO3GPP_InternalContext*)(pContext); 6057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 6067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 l_uiAudioStepCount = 0; 6077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int32 JumpToTime = 0; 6087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Time mtIncCts; 6097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 6117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check input parameters */ 6127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL==pContext), M4ERR_PARAMETER, 6137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4PTO3GPP_Step: pContext is M4OSA_NULL"); 6147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 6167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check state automaton */ 6177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if ( !((M4PTO3GPP_kState_OPENED == pC->m_State) || (M4PTO3GPP_kState_READY == pC->m_State)) ) 6187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Step(): Wrong State (%d), returning M4ERR_STATE", pC->m_State); 6207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_STATE; 6217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /******************************************************************/ 6247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 6257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * In case this is the first step, we prepare the decoder, the encoder and the writer */ 6267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4PTO3GPP_kState_OPENED == pC->m_State) 6277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_0("M4PTO3GPP_Step(): This is the first step, \ 6297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi calling M4PTO3GPP_Ready4Processing"); 6307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 6327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Prepare the reader, the decoder, the encoder, the writer... */ 6337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4PTO3GPP_Ready4Processing(pC); 6347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 6357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Step(): M4PTO3GPP_Ready4Processing() returns 0x%x", err); 6377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 6387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 6417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Update state automaton */ 6427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_State = M4PTO3GPP_kState_READY; 6437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_0("M4PTO3GPP_Step(): returning M4NO_ERROR (a)"); 6457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; /**< we only do that in the first step, \ 6467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi first REAL step will be the next one */ 6477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* 6517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check if we reached the targeted file size. 6527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * We do that before the encoding, because the core encoder has to know if this is 6537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * the last frame to encode */ 6547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pWriterGlobInt->pFctGetOption(pC->m_p3gpWriterContext, 6557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_kFileSizeAudioEstimated, (M4OSA_DataOption) &pC->m_CurrentFileSize); 6567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if ((0 != pC->m_MaxFileSize) && 6577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< Add a marge to the file size in order to never exceed the max file size */ 6587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((pC->m_CurrentFileSize + M4PTO3GPP_MARGE_OF_FILE_SIZE) >= pC->m_MaxFileSize)) 6597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_IsLastPicture = M4OSA_TRUE; 6617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /****************************************************************** 6647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * At that point we are in M4PTO3GPP_kState_READY state 6657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * We perform one step of video encoding 6667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************/ 6677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /************* VIDEO ENCODING ***************/ 6697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4PTO3GPP_kStreamState_STARTED == pC->m_VideoState) /**<If the video encoding is going on*/ 6707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { /** 6717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Call the encoder */ 6727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_NbCurrentFrame++; 6737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Check if it is the last frame the to encode */ 6757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if((pC->m_Params.NbVideoFrames > 0) \ 6767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi && (pC->m_NbCurrentFrame >= pC->m_Params.NbVideoFrames)) 6777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_IsLastPicture = M4OSA_TRUE; 6797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_2("M4PTO3GPP_Step(): Calling pEncoderInt->pFctEncode with videoCts = %.2f\ 6827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi nb = %lu", pC->m_mtCts, pC->m_NbCurrentFrame); 6837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pEncoderInt->pFctEncode(pC->m_pMp4EncoderContext, M4OSA_NULL, 6857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< The input plane is null because the input Picture will be obtained by the\ 6867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VPP filter from the context */ 6877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_mtCts, 6887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pC->m_IsLastPicture ? 6897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4ENCODER_kLastFrame : M4ENCODER_kNormalFrame) ); 6907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< Last param set to M4OSA_TRUE signals that this is the last frame to be encoded,\ 6917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_FALSE else */ 6927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_2("M4PTO3GPP_Step(): pEncoderInt->pFctEncode returns 0x%x, vidFormat =0x%x", 6947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err, pC->m_Params.OutputVideoFormat); 6957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if((M4NO_ERROR == err) && (M4VIDEOEDITING_kH264 == pC->m_Params.OutputVideoFormat)) 6967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Check if last frame.* 6987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * */ 6997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_TRUE == pC->m_IsLastPicture) 7007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_0("M4PTO3GPP_Step(): Last picture"); 7027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_VideoState = M4PTO3GPP_kStreamState_FINISHED; 7037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4WAR_NO_MORE_AU == err) /**< The video encoding is finished */ 7087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_0("M4PTO3GPP_Step(): pEncoderInt->pFctEncode returns M4WAR_NO_MORE_AU"); 7107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_VideoState = M4PTO3GPP_kStreamState_FINISHED; 7117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else if (M4NO_ERROR != err) /**< Unexpected error code */ 7137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if( (((M4OSA_UInt32)M4WAR_WRITER_STOP_REQ) == err) || 7157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (((M4OSA_UInt32)M4ERR_ALLOC) == err) ) 7167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4PTO3GPP_Step: returning ERR_PTO3GPP_ENCODER_ACCES_UNIT_ERROR"); 7187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return ERR_PTO3GPP_ENCODER_ACCES_UNIT_ERROR; 7197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 7217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Step(): pEncoderInt->pFctEncode(last) (a) returns 0x%x", 7237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err); 7247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 7257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } /**< End of video encoding */ 7287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /****** AUDIO TRANSCODING (read + null encoding + write) ******/ 7317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4PTO3GPP_kStreamState_STARTED == pC->m_AudioState) 7327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi while ( (M4PTO3GPP_kStreamState_STARTED == pC->m_AudioState) && 7347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pC->m_mtAudioCts < pC->m_mtNextCts)) 7357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi l_uiAudioStepCount++; 7387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_FALSE == pC->m_bAudioPaddingSilence) 7397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< Read the next audio AU in the input Audio file */ 7417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pReaderDataInt->m_pFctGetNextAu(pC->m_pAudioReaderContext, 7427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4_StreamHandler*)pC->m_pReaderAudioStream, pC->m_pReaderAudioAU); 7437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_mtAudioCts = pC->m_pReaderAudioAU->m_CTS + pC->m_AudioOffSet; 7447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4WAR_NO_MORE_AU == err) /* The audio transcoding is finished */ 7467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_0("M4PTO3GPP_Step():\ 7487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderDataInt->m_pFctGetNextAu(audio) returns \ 7497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WAR_NO_MORE_AU"); 7507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch(pC->m_Params.AudioPaddingMode) 7517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4PTO3GPP_kAudioPaddingMode_None: 7537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_AudioState = M4PTO3GPP_kStreamState_FINISHED; 7557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 7567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4PTO3GPP_kAudioPaddingMode_Silence: 7587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4DA_StreamTypeAudioAmrNarrowBand 7607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi != pC->m_pReaderAudioStream->m_basicProperties.m_streamType) 7617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< Do nothing if the input audio file format is not AMR */ 7627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_AudioState = M4PTO3GPP_kStreamState_FINISHED; 7647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 7667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_bAudioPaddingSilence = M4OSA_TRUE; 7687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 7707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4PTO3GPP_kAudioPaddingMode_Loop: 7727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< Jump to the beginning of the audio file */ 7747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pReaderGlobInt->m_pFctJump(pC->m_pAudioReaderContext, 7757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4_StreamHandler*)pC->m_pReaderAudioStream, &JumpToTime); 7767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 7787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Step(): \ 7807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pReaderDataInt->m_pFctReset(audio returns 0x%x", 7817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err); 7827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 7837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4DA_StreamTypeAudioAmrNarrowBand 7867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi == pC->m_pReaderAudioStream->m_basicProperties.m_streamType) 7877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_mtAudioCts += 20; /*< SEMC bug fixed at Lund */ 7897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_AudioOffSet = pC->m_mtAudioCts; 7907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 7927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 'BZZZ' bug fix: 7937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * add a silence frame */ 7947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mtIncCts = (M4OSA_Time)((pC->m_mtAudioCts) * 7957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pC->m_pWriterAudioStream->timeScale / 1000.0)); 7967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4PTO3GPP_writeAmrSilence122Frame(pC->m_pWriterDataInt, 7977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_p3gpWriterContext, &pC->m_WriterAudioAU, mtIncCts); 7987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 8007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 8017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Step(): \ 8027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4PTO3GPP_AddAmrSilenceSid returns 0x%x", err); 8037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 8047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi }/**< Add => no audio cts increment...*/ 8057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 8067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 8077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 8087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_AudioOffSet = pC->m_mtAudioCts + pC->m_DeltaAudioCts; 8097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 8107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 8117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } /* end of: switch */ 8127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 8137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else if (M4NO_ERROR != err) 8147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 8157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Step(): pReaderDataInt->m_pFctGetNextAu(Audio)\ 8167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returns 0x%x", err); 8177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 8187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 8197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 8207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 8217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 8227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Save the delta Cts (AAC only) */ 8237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_DeltaAudioCts = pC->m_pReaderAudioAU->m_CTS - pC->m_PrevAudioCts; 8247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_PrevAudioCts = pC->m_pReaderAudioAU->m_CTS; 8257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 8277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Prepare the writer AU */ 8287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pWriterDataInt->pStartAU(pC->m_p3gpWriterContext, 1, 8297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi &pC->m_WriterAudioAU); 8307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 8317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 8327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Step(): pWriterDataInt->pStartAU(Audio)\ 8337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returns 0x%x", err); 8347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 8357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 8367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 8387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Copy audio data from reader AU to writer AU */ 8397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_1("M4PTO3GPP_Step(): Copying audio AU: size=%d", 8407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReaderAudioAU->m_size); 84132ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memcpy((void *)pC->m_WriterAudioAU.dataAddress, 84232ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu (void *)pC->m_pReaderAudioAU->m_dataAddress, 8437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReaderAudioAU->m_size); 8447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_WriterAudioAU.size = pC->m_pReaderAudioAU->m_size; 8457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 8477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Convert CTS unit from milliseconds to timescale */ 8487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4DA_StreamTypeAudioAmrNarrowBand 8497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi != pC->m_pReaderAudioStream->m_basicProperties.m_streamType) 8507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 8517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_WriterAudioAU.CTS = (M4OSA_Time) 8527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((pC->m_AudioOffSet + pC->m_pReaderAudioAU->m_CTS) 8537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * pC->m_pWriterAudioStream->timeScale / 1000.0); 8547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 8557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 8567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 8577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_WriterAudioAU.CTS = (M4OSA_Time)(pC->m_mtAudioCts * 8587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pC->m_pWriterAudioStream->timeScale / 1000.0)); 8597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 8607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_WriterAudioAU.nbFrag = 0; 8617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_1("M4PTO3GPP_Step(): audio AU: CTS=%d ms", pC->m_mtAudioCts 8627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*pC->m_pReaderAudioAU->m_CTS*/); 8637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 8657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Write it to the output file */ 8667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pWriterDataInt->pProcessAU(pC->m_p3gpWriterContext, 1, 8677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi &pC->m_WriterAudioAU); 8687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 8707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 8717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Step(): pWriterDataInt->pProcessAU(Audio)\ 8727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returns 0x%x", err); 8737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 8747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 8757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 8767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 8777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else /**< M4OSA_TRUE == pC->m_bAudioPaddingSilence */ 8787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 8797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4DA_StreamTypeAudioAmrNarrowBand == 8807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReaderAudioStream->m_basicProperties.m_streamType) 8817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 8827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 8837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Fill in audio au with silence */ 8847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_mtAudioCts += 20; 8857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 8877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Padd with silence */ 8887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mtIncCts = (M4OSA_Time)(pC->m_mtAudioCts 8897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * (pC->m_pWriterAudioStream->timeScale / 1000.0)); 8907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4PTO3GPP_writeAmrSilence048Frame(pC->m_pWriterDataInt, 8917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_p3gpWriterContext, &pC->m_WriterAudioAU, mtIncCts); 8927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 8947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 8957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Step(): M4PTO3GPP_AddAmrSilenceSid returns 0x%x", 8967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err); 8977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 8987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 8997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 9007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else /**< Do nothing if the input audio file format is not AMR */ 9017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 9027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_AudioState = M4PTO3GPP_kStreamState_FINISHED; 9037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 9047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 9067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } /**< while */ 9077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } /**< End of audio encoding */ 9087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_mtCts = pC->m_mtNextCts; 9107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 9127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * The transcoding is finished when no stream is being encoded anymore */ 9137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4PTO3GPP_kStreamState_FINISHED == pC->m_VideoState) 9147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 9157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_State = M4PTO3GPP_kState_FINISHED; 9167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_0("M4PTO3GPP_Step(): transcoding finished, returning M4WAR_NO_MORE_AU"); 9177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4PTO3GPP_WAR_END_OF_PROCESSING; 9187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 9197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_0("M4PTO3GPP_Step(): returning M4NO_ERROR (b)"); 9217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 9227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 9237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 9257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 9267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4PTO3GPP_Close(M4PTO3GPP_Context pContext); 9277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Finish the M4PTO3GPP transcoding. 9287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note The output 3GPP file is ready to be played after this call 9297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN) M4PTO3GPP context 9307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 9317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (If Debug Level >= 2) 9327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_STATE: M4PTO3GPP is not in an appropriate state for this function to be called 9337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 9347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 9357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*********************************************************/ 9367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4PTO3GPP_Close(M4PTO3GPP_Context pContext) 9377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*********************************************************/ 9387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 9397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4PTO3GPP_InternalContext *pC = (M4PTO3GPP_InternalContext*)(pContext); 9407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR osaErr = M4NO_ERROR; 9417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 lastCTS; 9427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4ENCODER_Header* encHeader; 9437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_StreamIDmemAddr streamHeader; 9447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_1("M4PTO3GPP_Close called with pContext=0x%x", pContext); 9467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 9487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check input parameters */ 9497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL==pContext), M4ERR_PARAMETER, "M4PTO3GPP_Close:\ 9507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pContext is M4OSA_NULL"); 9517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Check state automaton */ 9537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if ((pC->m_State != M4PTO3GPP_kState_OPENED) && 9547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pC->m_State != M4PTO3GPP_kState_READY) && 9557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pC->m_State != M4PTO3GPP_kState_FINISHED)) 9567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 9577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Close(): Wrong State (%d), returning M4ERR_STATE", pC->m_State); 9587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_STATE; 9597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 9607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*************************************/ 9627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /******** Finish the encoding ********/ 9637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*************************************/ 9647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4PTO3GPP_kState_READY == pC->m_State) 9657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 9667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_State = M4PTO3GPP_kState_FINISHED; 9677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 9687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4PTO3GPP_kEncoderRunning == pC->m_eEncoderState) 9707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 9717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->m_pEncoderInt->pFctStop != M4OSA_NULL) 9727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 9737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi osaErr = pC->m_pEncoderInt->pFctStop(pC->m_pMp4EncoderContext); 9747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != osaErr) 9757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 9767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_close: m_pEncoderInt->pFctStop returns 0x%x", osaErr); 9777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Well... how the heck do you handle a failed cleanup? */ 9787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 9797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 9807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_eEncoderState = M4PTO3GPP_kEncoderStopped; 9827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 9837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Has the encoder actually been opened? Don't close it if that's not the case. */ 9857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4PTO3GPP_kEncoderStopped == pC->m_eEncoderState) 9867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 9877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi osaErr = pC->m_pEncoderInt->pFctClose(pC->m_pMp4EncoderContext); 9887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != osaErr) 9897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 9907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_close: m_pEncoderInt->pFctClose returns 0x%x", osaErr); 9917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Well... how the heck do you handle a failed cleanup? */ 9927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 9937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_eEncoderState = M4PTO3GPP_kEncoderClosed; 9957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 9967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*******************************/ 9987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /******** Close 3GP out ********/ 9997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*******************************/ 10007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 10017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL != pC->m_p3gpWriterContext) /* happens in state _SET */ 10027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 10037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* HW encoder: fetch the DSI from the shell video encoder, and feed it to the writer before 10047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi closing it. */ 10050a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury if ((M4VIDEOEDITING_kMPEG4 == pC->m_Params.OutputVideoFormat) 10067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi || (M4VIDEOEDITING_kH264 == pC->m_Params.OutputVideoFormat)) 10077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 10087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi osaErr = pC->m_pEncoderInt->pFctGetOption(pC->m_pMp4EncoderContext, 10097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4ENCODER_kOptionID_EncoderHeader, 10107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_DataOption)&encHeader); 10117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if ( (M4NO_ERROR != osaErr) || (M4OSA_NULL == encHeader->pBuf) ) 10127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 10137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_close: failed to get the encoder header (err 0x%x)", 10147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi osaErr); 10157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< no return here, we still have stuff to deallocate after close, even if \ 10167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi it fails. */ 10177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 10187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 10197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 10207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* set this header in the writer */ 10217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamHeader.streamID = M4PTO3GPP_WRITER_VIDEO_STREAM_ID; 10227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamHeader.size = encHeader->Size; 10237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi streamHeader.addr = (M4OSA_MemAddr32)encHeader->pBuf; 10247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi osaErr = pC->m_pWriterGlobInt->pFctSetOption(pC->m_p3gpWriterContext, 10257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_kDSI, &streamHeader); 10267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != osaErr) 10277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 10287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_close: failed to set the DSI in the writer \ 10297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (err 0x%x) ", osaErr); 10307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 10317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 10327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 10337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 10347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Update last Video CTS */ 10357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi lastCTS = (M4OSA_UInt32)pC->m_mtCts; 10367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 10377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi osaErr = pC->m_pWriterGlobInt->pFctSetOption(pC->m_p3gpWriterContext, 10387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32)M4WRITER_kMaxFileDuration, &lastCTS); 10397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != osaErr) 10407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 10417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Close: SetOption(M4WRITER_kMaxFileDuration) returns 0x%x", 10427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi osaErr); 10437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 10447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 10457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Write and close the 3GP output file */ 10467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi osaErr = pC->m_pWriterGlobInt->pFctCloseWrite(pC->m_p3gpWriterContext); 10477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != osaErr) 10487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 10497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Close: pWriterGlobInt->pFctCloseWrite returns 0x%x", osaErr); 10507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< don't return yet, we have to close other things */ 10517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 10527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_p3gpWriterContext = M4OSA_NULL; 10537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 10547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 10557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 10567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * State transition */ 10577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_State = M4PTO3GPP_kState_CLOSED; 10587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 10597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_1("M4PTO3GPP_Close(): returning 0x%x", osaErr); 10607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return osaErr; 10617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 10627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 10637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 10647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 10657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 10667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4PTO3GPP_CleanUp(M4PTO3GPP_Context pContext); 10677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Free all resources used by the M4PTO3GPP. 10687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note The context is no more valid after this call 10697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN) M4PTO3GPP context 10707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 10717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (If Debug Level >= 2) 10727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 10737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 10747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*********************************************************/ 10757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4PTO3GPP_CleanUp(M4PTO3GPP_Context pContext) 10767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*********************************************************/ 10777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 10787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 10797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4PTO3GPP_InternalContext *pC = (M4PTO3GPP_InternalContext*)(pContext); 10807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 10817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_1("M4PTO3GPP_CleanUp called with pContext=0x%x", pContext); 10827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 10837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 10847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check input parameters */ 10857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL==pContext),M4ERR_PARAMETER, "M4PTO3GPP_CleanUp: pContext \ 10867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi is M4OSA_NULL"); 10877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 10887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 10897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * First call Close, if needed, to clean the video encoder */ 10907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 10917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if ((M4PTO3GPP_kState_OPENED == pC->m_State) || (M4PTO3GPP_kState_READY == pC->m_State) 10927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi || (M4PTO3GPP_kState_FINISHED == pC->m_State)) 10937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 10947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4PTO3GPP_Close(pContext); 10957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 10967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 10977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_CleanUp: M4PTO3GPP_Close returns 0x%x", err); 10987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< don't return, we have to free other components */ 10997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 11037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Free Audio reader stuff, if needed */ 11047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL != pC->m_pAudioReaderContext) /**< may be M4OSA_NULL if M4PTO3GPP_Open was not\ 11067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi called */ 11077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 11087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pReaderGlobInt->m_pFctClose(pC->m_pAudioReaderContext); 11107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 11117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 11127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_CleanUp: pReaderGlobInt->m_pFctClose returns 0x%x", err); 11137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< don't return, we have to free other components */ 11147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pReaderGlobInt->m_pFctDestroy(pC->m_pAudioReaderContext); 11167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pAudioReaderContext = M4OSA_NULL; 11177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 11187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 11197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_CleanUp: pReaderGlobInt->m_pFctDestroy returns 0x%x", err); 11207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< don't return, we have to free other components */ 11217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL != pC->m_pReaderAudioAU) 11257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1126694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pReaderAudioAU); 11277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReaderAudioAU = M4OSA_NULL; 11287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 11317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Free video encoder stuff, if needed */ 11327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL != pC->m_pMp4EncoderContext) 11337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 11347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pEncoderInt->pFctCleanup(pC->m_pMp4EncoderContext); 11357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pMp4EncoderContext = M4OSA_NULL; 11367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 11377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 11387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_CleanUp: pEncoderInt->pFctDestroy returns 0x%x", err); 11397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< don't return, we have to free other components */ 11407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL != pC->m_pWriterVideoStream) 11447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1145694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pWriterVideoStream); 11467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterVideoStream = M4OSA_NULL; 11477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL != pC->m_pWriterAudioStream) 11497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1150694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pWriterAudioStream); 11517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterAudioStream = M4OSA_NULL; 11527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL != pC->m_pWriterVideoStreamInfo) 11547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1155694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pWriterVideoStreamInfo); 11567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterVideoStreamInfo = M4OSA_NULL; 11577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL != pC->m_pWriterAudioStreamInfo) 11597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1160694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pWriterAudioStreamInfo); 11617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterAudioStreamInfo = M4OSA_NULL; 11627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 11667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Free the shells interfaces */ 11677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL != pC->m_pReaderGlobInt) 11687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1169694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pReaderGlobInt); 11707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReaderGlobInt = M4OSA_NULL; 11717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL != pC->m_pReaderDataInt) 11737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1174694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pReaderDataInt); 11757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReaderDataInt = M4OSA_NULL; 11767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_NULL != pC->m_pEncoderInt) 11797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1180694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pEncoderInt); 11817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pEncoderInt = M4OSA_NULL; 11827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_NULL != pC->m_pWriterGlobInt) 11847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1185694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pWriterGlobInt); 11867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterGlobInt = M4OSA_NULL; 11877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_NULL != pC->m_pWriterDataInt) 11897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1190694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pWriterDataInt); 11917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterDataInt = M4OSA_NULL; 11927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 11937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< Do not free pC->pOsaMemoryPtrFct and pC->pOsaMemoryPtrFct, because it's owned by the \ 11947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi application */ 11957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 11967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 11977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Free the context itself */ 1198694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC); 11997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC = M4OSA_NULL; 12007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 12017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_0("M4PTO3GPP_CleanUp(): returning M4NO_ERROR"); 12027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 12037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 12047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 12057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/********************* INTERNAL FUNCTIONS *********************/ 12067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 12077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 12087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 12097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4PTO3GPP_Ready4Processing(M4PTO3GPP_InternalContext* pC); 12107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Prepare all resources and interfaces for the transcoding. 12117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note It is called by the first M4OSA_Step() call 12127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pC (IN) M4PTO3GPP private context 12137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 12147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return Any error returned by an underlaying module 12157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 12167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 12177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/******************************************************/ 12187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4PTO3GPP_Ready4Processing(M4PTO3GPP_InternalContext* pC) 12197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/******************************************************/ 12207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 12217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 12227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_OutputFileType outputFileType; 12237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 uiVersion; 12247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4ENCODER_Format encFormat; 12257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4ENCODER_AdvancedParams EncParams; /**< Encoder advanced parameters */ 12267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_StreamIDValue optionValue; 12277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 12287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_1("M4PTO3GPP_Ready4Processing called with pC=0x%x", pC); 12297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 12307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /******************************/ 12317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /******************************/ 12327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 12337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /********************************************/ 12347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /******** ********/ 12357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /******** Video Encoder Parames init ********/ 12367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /******** ********/ 12377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /********************************************/ 12387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 12397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 12407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Get the correct encoder interface */ 12417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch(pC->m_Params.OutputVideoFormat) 12427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 12437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kMPEG4: 12447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_SUPPORT_ENCODER_MPEG4 12457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = VideoEditorVideoEncoder_getInterface_MPEG4(&encFormat, &pC->m_pEncoderInt, 12467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4ENCODER_OPEN_ADVANCED); 12477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#else /* software MPEG4 encoder not available! */ 12487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("No MPEG4 encoder available! Did you forget to register one?"); 12497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4ERR_STATE; 12507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* software MPEG4 encoder available? */ 12517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 12527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kH263: 12537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_SUPPORT_ENCODER_MPEG4 12547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = VideoEditorVideoEncoder_getInterface_H263(&encFormat, &pC->m_pEncoderInt, 12557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4ENCODER_OPEN_ADVANCED); 12567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#else /* software H263 encoder not available! */ 12577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("No H263 encoder available! Did you forget to register one?"); 12587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4ERR_STATE; 12597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* software H263 encoder available? */ 12607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 12617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kH264: 12627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_SUPPORT_ENCODER_AVC 12637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = VideoEditorVideoEncoder_getInterface_H264(&encFormat, &pC->m_pEncoderInt, 12647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4ENCODER_OPEN_ADVANCED); 12657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#else /* software H264 encoder not available! */ 12667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4PTO3GPP_Ready4Processing: No H264 encoder available!\ 12677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi Did you forget to register one?"); 12687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4ERR_STATE; 12697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* software H264 encoder available? */ 12707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 12717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default: 12727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: unknown format 0x%x returning \ 12737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ERR_M4PTO3GPP_UNDEFINED_OUTPUT_VIDEO_FORMAT", 12747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_Params.OutputVideoFormat); 12757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return ERR_PTO3GPP_UNDEFINED_OUTPUT_VIDEO_FORMAT; 12767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 12777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 12787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 12797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("switch(pC->m_Params.OutputVideoFormat): getInterfaces returns 0x%x", err); 12807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 12817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 12827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 12837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 12847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Fill encoder parameters according to M4PTO3GPP settings */ 12857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 12867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 12877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Video frame size */ 12887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch(pC->m_Params.OutputVideoFrameSize) 12897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 12907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kSQCIF : 12917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.FrameHeight = M4ENCODER_SQCIF_Height; 12927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.FrameWidth = M4ENCODER_SQCIF_Width; 12937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 12947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kQQVGA : 12957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.FrameHeight = M4ENCODER_QQVGA_Height; 12967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.FrameWidth = M4ENCODER_QQVGA_Width; 12977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 12987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kQCIF : 12997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.FrameHeight = M4ENCODER_QCIF_Height; 13007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.FrameWidth = M4ENCODER_QCIF_Width; 13017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 13027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kQVGA : 13037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.FrameHeight = M4ENCODER_QVGA_Height; 13047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.FrameWidth = M4ENCODER_QVGA_Width; 13057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 13067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kCIF : 13077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.FrameHeight = M4ENCODER_CIF_Height; 13087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.FrameWidth = M4ENCODER_CIF_Width; 13097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 13107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kVGA : 13117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.FrameHeight = M4ENCODER_VGA_Height; 13127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.FrameWidth = M4ENCODER_VGA_Width; 13137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 13147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* +PR LV5807 */ 13157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kWVGA : 13167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.FrameHeight = M4ENCODER_WVGA_Height; 13177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.FrameWidth = M4ENCODER_WVGA_Width; 13187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 13197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kNTSC: 13207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.FrameHeight = M4ENCODER_NTSC_Height; 13217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.FrameWidth = M4ENCODER_NTSC_Width; 13227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 13237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* -PR LV5807 */ 13247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* +CR Google */ 13257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k640_360: 13267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.FrameHeight = M4ENCODER_640_360_Height; 13277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.FrameWidth = M4ENCODER_640_360_Width; 13287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 13297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k854_480: 13317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.FrameHeight = M4ENCODER_854_480_Height; 13327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.FrameWidth = M4ENCODER_854_480_Width; 13337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 13347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13358806b706693c0992724f6603353af18aeb4a0f80Hong Teng case M4VIDEOEDITING_k1280_720: 13368806b706693c0992724f6603353af18aeb4a0f80Hong Teng EncParams.FrameHeight = M4ENCODER_1280_720_Height; 13378806b706693c0992724f6603353af18aeb4a0f80Hong Teng EncParams.FrameWidth = M4ENCODER_1280_720_Width; 13388806b706693c0992724f6603353af18aeb4a0f80Hong Teng break; 13398806b706693c0992724f6603353af18aeb4a0f80Hong Teng 13408806b706693c0992724f6603353af18aeb4a0f80Hong Teng case M4VIDEOEDITING_k1080_720: 13418806b706693c0992724f6603353af18aeb4a0f80Hong Teng EncParams.FrameHeight = M4ENCODER_1080_720_Height; 13428806b706693c0992724f6603353af18aeb4a0f80Hong Teng EncParams.FrameWidth = M4ENCODER_1080_720_Width; 13437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 13447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13458806b706693c0992724f6603353af18aeb4a0f80Hong Teng case M4VIDEOEDITING_k960_720: 13468806b706693c0992724f6603353af18aeb4a0f80Hong Teng EncParams.FrameHeight = M4ENCODER_960_720_Height; 13478806b706693c0992724f6603353af18aeb4a0f80Hong Teng EncParams.FrameWidth = M4ENCODER_960_720_Width; 13487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 13497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13508806b706693c0992724f6603353af18aeb4a0f80Hong Teng case M4VIDEOEDITING_k1920_1080: 13518806b706693c0992724f6603353af18aeb4a0f80Hong Teng EncParams.FrameHeight = M4ENCODER_1920_1080_Height; 13528806b706693c0992724f6603353af18aeb4a0f80Hong Teng EncParams.FrameWidth = M4ENCODER_1920_1080_Width; 13537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 13547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* -CR Google */ 13557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default : 13567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: unknown format 0x%x returning \ 13577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ERR_M4PTO3GPP_UNDEFINED_OUTPUT_VIDEO_FRAME_SIZE", 13587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_Params.OutputVideoFrameSize); 13597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return ERR_PTO3GPP_UNDEFINED_OUTPUT_VIDEO_FRAME_SIZE; 13607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 13617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.InputFormat = M4ENCODER_kIYUV420; 13637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 13657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Video bitrate */ 13667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch(pC->m_Params.OutputVideoBitrate) 13677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 13687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k16_KBPS: 13697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k24_KBPS: 13707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k32_KBPS: 13717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k48_KBPS: 13727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k64_KBPS: 13737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k96_KBPS: 13747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k128_KBPS: 13757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k192_KBPS: 13767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k256_KBPS: 13777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k288_KBPS: 13787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k384_KBPS: 13797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k512_KBPS: 13807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k800_KBPS: 13817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*+ New Encoder bitrates */ 13827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k2_MBPS: 13837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k5_MBPS: 13847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k8_MBPS: 13857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*- New Encoder bitrates */ 13867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.Bitrate = pC->m_Params.OutputVideoBitrate; 13877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 13887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kVARIABLE_KBPS: 13907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*+ New Encoder bitrates */ 13917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.Bitrate = M4VIDEOEDITING_k8_MBPS; 13927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*- New Encoder bitrates */ 13937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 13947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default : 13967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: unknown format 0x%x returning\ 13977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ERR_M4PTO3GPP_UNDEFINED_OUTPUT_VIDEO_BITRATE", 13987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_Params.OutputVideoBitrate); 13997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return ERR_PTO3GPP_UNDEFINED_OUTPUT_VIDEO_BITRATE; 14007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 14017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 14037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Video format */ 14047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch(pC->m_Params.OutputVideoFormat) 14057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 14067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kMPEG4 : 14077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.Format = M4ENCODER_kMPEG4; 14087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 14097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kH263 : 14107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.Format = M4ENCODER_kH263; 14117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 14127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kH264: 14137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.Format = M4ENCODER_kH264; 14147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 14157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default : 14167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: unknown format 0x%x returning\ 14177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ERR_M4PTO3GPP_UNDEFINED_OUTPUT_VIDEO_FORMAT", 14187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_Params.OutputVideoFormat); 14197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return ERR_PTO3GPP_UNDEFINED_OUTPUT_VIDEO_FORMAT; 14207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 14217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 14237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Video frame rate (set it to max = 30 fps) */ 14247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.uiTimeScale = 30; 14257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.uiRateFactor = 1; 14267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.FrameRate = M4ENCODER_k30_FPS; 14287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /******************************/ 14317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /******** 3GP out init ********/ 14327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /******************************/ 14337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Get the 3GPP writer interface */ 14357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4WRITER_3GP_getInterfaces(&outputFileType, &pC->m_pWriterGlobInt, &pC->m_pWriterDataInt); 14367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 14377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 14387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4WRITER_3GP_getInterfaces: M4WRITER_3GP_getInterfaces returns 0x%x", err); 14397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 14407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 14417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Init the 3GPP writer */ 14437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pWriterGlobInt->pFctOpen(&pC->m_p3gpWriterContext, pC->m_Params.pOutput3gppFile, 14447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pOsalFileWrite, pC->m_Params.pTemporaryFile, pC->pOsalFileRead); 14457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 14467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 14477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: pWriterGlobInt->pFctOpen returns 0x%x", err); 14487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 14497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 14507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 14527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Link to the writer context in the writer interface */ 14537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterDataInt->pWriterContext = pC->m_p3gpWriterContext; 14547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 14567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Set the product description string in the written file */ 14577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pWriterGlobInt->pFctSetOption(pC->m_p3gpWriterContext, M4WRITER_kEmbeddedString, 14587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_DataOption)M4PTO3GPP_SIGNATURE); 14597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 14607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 14617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: \ 14627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pWriterGlobInt->pFctSetOption(M4WRITER_kEmbeddedString) returns 0x%x", err); 14637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 14647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 14657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 14677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Set the product version in the written file */ 14687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi uiVersion = M4VIDEOEDITING_VERSION_MAJOR*100 + M4VIDEOEDITING_VERSION_MINOR*10 14697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi + M4VIDEOEDITING_VERSION_REVISION; 14707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pWriterGlobInt->pFctSetOption(pC->m_p3gpWriterContext, M4WRITER_kEmbeddedVersion, 14717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_DataOption)&uiVersion); 14727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 14737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 14747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: \ 14757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pWriterGlobInt->pFctSetOption(M4WRITER_kEmbeddedVersion) returns 0x%x", err); 14767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 14777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 14787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 14797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 14807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Allocate and fill the video stream structures for the writer */ 14817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterVideoStream = 1482694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu (M4SYS_StreamDescription*)M4OSA_32bitAlignedMalloc(sizeof(M4SYS_StreamDescription), M4PTO3GPP, 14837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char *)"pWriterVideoStream"); 14847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == pC->m_pWriterVideoStream) 14857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 14867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4PTO3GPP_Ready4Processing(): unable to allocate pWriterVideoStream, \ 14877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returning M4ERR_ALLOC"); 14887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 14897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 14907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterVideoStreamInfo = 1491694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu (M4WRITER_StreamVideoInfos*)M4OSA_32bitAlignedMalloc(sizeof(M4WRITER_StreamVideoInfos), M4PTO3GPP, 14927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char *)"pWriterVideoStreamInfo"); 14937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == pC->m_pWriterVideoStreamInfo) 14947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 14957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4PTO3GPP_Ready4Processing(): unable to allocate pWriterVideoStreamInfo,\ 14967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returning M4ERR_ALLOC"); 14977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 14987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 14997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 15017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Fill Video properties structure for the AddStream method */ 15027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterVideoStreamInfo->height = EncParams.FrameHeight; 15037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterVideoStreamInfo->width = EncParams.FrameWidth; 15047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterVideoStreamInfo->fps = 0; /**< Not used by the core writer */ 15057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterVideoStreamInfo->Header.pBuf = M4OSA_NULL; 15067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** No header, will be set by setOption */ 15077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterVideoStreamInfo->Header.Size = 0; 15087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 15107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Fill Video stream description structure for the AddStream method */ 15117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterVideoStream->streamID = M4PTO3GPP_WRITER_VIDEO_STREAM_ID; 15127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 15147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Video format */ 15157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch(pC->m_Params.OutputVideoFormat) 15167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 15177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kMPEG4: 15187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterVideoStream->streamType = M4SYS_kMPEG_4; break; 15197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kH263: 15207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterVideoStream->streamType = M4SYS_kH263; break; 15217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kH264: 15227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterVideoStream->streamType = M4SYS_kH264; break; 15237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default : 15247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: unknown format 0x%x returning \ 15257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ERR_M4PTO3GPP_UNDEFINED_OUTPUT_VIDEO_FORMAT", 15267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_Params.OutputVideoFormat); 15277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return ERR_PTO3GPP_UNDEFINED_OUTPUT_VIDEO_FORMAT; 15287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 15297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 15317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Video bitrate */ 15327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch(pC->m_Params.OutputVideoBitrate) 15337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 15347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k16_KBPS: 15357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k24_KBPS: 15367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k32_KBPS: 15377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k48_KBPS: 15387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k64_KBPS: 15397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k96_KBPS: 15407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k128_KBPS: 15417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k192_KBPS: 15427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k256_KBPS: 15437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k288_KBPS: 15447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k384_KBPS: 15457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k512_KBPS: 15467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k800_KBPS: 15477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*+ New Encoder bitrates */ 15487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k2_MBPS: 15497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k5_MBPS: 15507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_k8_MBPS: 15517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*- New Encoder bitrates */ 15527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterVideoStream->averageBitrate = pC->m_Params.OutputVideoBitrate; 15537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 15547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kVARIABLE_KBPS : 15567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterVideoStream->averageBitrate = 0; 15577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 15587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default : 15607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: unknown format 0x%x returning\ 15617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ERR_M4PTO3GPP_UNDEFINED_OUTPUT_VIDEO_BITRATE", 15627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_Params.OutputVideoBitrate); 15637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return ERR_PTO3GPP_UNDEFINED_OUTPUT_VIDEO_BITRATE; 15647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 15657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterVideoStream->duration = 0; /**< Duration is not known */ 15677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterVideoStream->timeScale = 0; /**< Not used by the core writer */ 15687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterVideoStream->maxBitrate = pC->m_pWriterVideoStream->averageBitrate; 15697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterVideoStream->profileLevel = 0; /**< Not used by the core writer */ 15707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterVideoStream->decoderSpecificInfo = (M4OSA_MemAddr32) 15717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (pC->m_pWriterVideoStreamInfo); 15727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterVideoStream->decoderSpecificInfoSize = sizeof(M4WRITER_StreamVideoInfos); 15737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 15757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Update AU properties for video stream */ 15767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_WriterVideoAU.CTS = pC->m_WriterVideoAU.DTS = 0; /** Reset time */ 15777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_WriterVideoAU.size = 0; 15787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_WriterVideoAU.frag = M4OSA_NULL; 15797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_WriterVideoAU.nbFrag = 0; /** No fragment */ 15807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_WriterVideoAU.stream = pC->m_pWriterVideoStream; 15817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_WriterVideoAU.attribute = AU_RAP; 15827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_WriterVideoAU.dataAddress = M4OSA_NULL; 15837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 15847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 15857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * If there is an audio input, allocate and fill the audio stream structures for the writer */ 15867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_NULL != pC->m_pReaderAudioStream) 15877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 15887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterAudioStream = 1589694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu (M4SYS_StreamDescription*)M4OSA_32bitAlignedMalloc(sizeof(M4SYS_StreamDescription), M4PTO3GPP, 15907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char *)"pWriterAudioStream"); 15917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == pC->m_pWriterAudioStream) 15927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 15937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4PTO3GPP_Ready4Processing(): unable to allocate pWriterAudioStream, \ 15947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returning M4ERR_ALLOC"); 15957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 15967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 15977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterAudioStreamInfo = 1598694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu (M4WRITER_StreamAudioInfos*)M4OSA_32bitAlignedMalloc(sizeof(M4WRITER_StreamAudioInfos), M4PTO3GPP, 15997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char *)"pWriterAudioStreamInfo"); 16007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == pC->m_pWriterAudioStreamInfo) 16017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 16027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4PTO3GPP_Ready4Processing(): unable to allocate \ 16037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pWriterAudioStreamInfo, returning M4ERR_ALLOC"); 16047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_ALLOC; 16057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 16067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterAudioStreamInfo->nbSamplesPerSec = 0; /**< unused by our shell writer */ 16087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterAudioStreamInfo->nbBitsPerSample = 0; /**< unused by our shell writer */ 16097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterAudioStreamInfo->nbChannels = 1; /**< unused by our shell writer */ 16107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if( (M4OSA_NULL != pC->m_pReaderAudioStream) && /* audio could have been discarded */ 16127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_NULL != pC->m_pReaderAudioStream->m_basicProperties.m_pDecoderSpecificInfo) ) 16137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 16147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* If we copy the stream from the input, we copy its DSI */ 16157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterAudioStreamInfo->Header.Size = 16167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReaderAudioStream->m_basicProperties.m_decoderSpecificInfoSize; 16177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterAudioStreamInfo->Header.pBuf = 16187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_MemAddr8)pC->m_pReaderAudioStream->m_basicProperties.m_pDecoderSpecificInfo; 16197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 16207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 16217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 16227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Writer will put a default DSI */ 16237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterAudioStreamInfo->Header.Size = 0; 16247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterAudioStreamInfo->Header.pBuf = M4OSA_NULL; 16257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 16267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 16287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Add the audio stream */ 16297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch (pC->m_pReaderAudioStream->m_basicProperties.m_streamType) 16307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 16317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4DA_StreamTypeAudioAmrNarrowBand: 16327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterAudioStream->streamType = M4SYS_kAMR; 16337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 16347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4DA_StreamTypeAudioAac: 16357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterAudioStream->streamType = M4SYS_kAAC; 16367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 16377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4DA_StreamTypeAudioEvrc: 16387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterAudioStream->streamType = M4SYS_kEVRC; 16397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 16407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default: 16417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: unhandled audio format (0x%x),\ 16427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returning ERR_PTO3GPP_UNDEFINED_OUTPUT_VIDEO_BITRATE", 16437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReaderAudioStream->m_basicProperties.m_streamType); 16447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return ERR_PTO3GPP_UNDEFINED_OUTPUT_AUDIO_FORMAT; 16457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 16467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* 16487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Fill Audio stream description structure for the AddStream method */ 16497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterAudioStream->streamID = M4PTO3GPP_WRITER_AUDIO_STREAM_ID; 16507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterAudioStream->duration = 0;/**< Duration is not known yet */ 16517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterAudioStream->timeScale = M4PTO3GPP_WRITER_AUDIO_AMR_TIME_SCALE; 16527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterAudioStream->profileLevel = M4PTO3GPP_WRITER_AUDIO_PROFILE_LEVEL; 16537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterAudioStream->averageBitrate = 16547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReaderAudioStream->m_basicProperties.m_averageBitRate; 16557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterAudioStream->maxBitrate = 16567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterAudioStream->averageBitrate; 16577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 16597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Our writer shell interface is a little tricky: we put M4WRITER_StreamAudioInfos \ 16607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi in the DSI pointer... */ 16617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pWriterAudioStream->decoderSpecificInfo = 16627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_MemAddr32)pC->m_pWriterAudioStreamInfo; 16637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 16657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Update AU properties for audio stream */ 16667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_WriterAudioAU.CTS = pC->m_WriterAudioAU.DTS = 0; /** Reset time */ 16677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_WriterAudioAU.size = 0; 16687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_WriterAudioAU.frag = M4OSA_NULL; 16697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_WriterAudioAU.nbFrag = 0; /** No fragment */ 16707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_WriterAudioAU.stream = pC->m_pWriterAudioStream; 16717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_WriterAudioAU.attribute = AU_RAP; 16727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_WriterAudioAU.dataAddress = M4OSA_NULL; 16737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 16747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /************************************/ 16767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /******** Video Encoder Init ********/ 16777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /************************************/ 16787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 16807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * PTO uses its own bitrate regulation, not the "true" core regulation */ 16817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.bInternalRegulation = M4OSA_TRUE; //M4OSA_FALSE; 16827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi EncParams.uiStartingQuantizerValue = M4PTO3GPP_QUANTIZER_STEP; 16837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16840a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury EncParams.videoProfile = pC->m_Params.videoProfile; 16850a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury EncParams.videoLevel = pC->m_Params.videoLevel; 16860a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury 16877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 16887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Other encoder settings */ 16890a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury 16900a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury EncParams.uiHorizontalSearchRange = 0; /* use default */ 16910a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury EncParams.uiVerticalSearchRange = 0; /* use default */ 16920a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury EncParams.bErrorResilience = M4OSA_FALSE; /* no error resilience */ 16930a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury EncParams.uiIVopPeriod = 15; /* use default */ 16940a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury EncParams.uiMotionEstimationTools = 0; /* M4V_MOTION_EST_TOOLS_ALL */ 16950a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury EncParams.bAcPrediction = M4OSA_TRUE; /* use AC prediction */ 16960a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury EncParams.bDataPartitioning = M4OSA_FALSE; /* no data partitioning */ 16970a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury 16987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 17007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Create video encoder */ 17017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pEncoderInt->pFctInit(&pC->m_pMp4EncoderContext, pC->m_pWriterDataInt, 17027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4PTO3GPP_applyVPP, pC, pC->m_pEncoderExternalAPI, 17037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pEncoderUserData); 17047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 17057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 17067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: EncoderInt->pFctInit returns 0x%x", err); 17077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 17087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 17097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_eEncoderState = M4PTO3GPP_kEncoderClosed; 17117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pEncoderInt->pFctOpen(pC->m_pMp4EncoderContext, &pC->m_WriterVideoAU, &EncParams); 17137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 17147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 17157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: EncoderInt->pFctOpen returns 0x%x", err); 17167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 17177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 17187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_eEncoderState = M4PTO3GPP_kEncoderStopped; 17207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL != pC->m_pEncoderInt->pFctStart) 17227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 17237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pEncoderInt->pFctStart(pC->m_pMp4EncoderContext); 17247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 17267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 17277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: EncoderInt->pFctStart returns 0x%x", err); 17287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 17297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 17307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 17317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_eEncoderState = M4PTO3GPP_kEncoderRunning; 17337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 17357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * No more setoption on "M4ENCODER_kVideoFragmentSize" here. 17367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * It is now automaticly and "smartly" set in the encoder shell. */ 17377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**************************************/ 17397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /******** 3GP out add streams ********/ 17407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**************************************/ 17417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pWriterGlobInt->pFctAddStream(pC->m_p3gpWriterContext, pC->m_pWriterVideoStream); 17437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 17447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 17457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: pWriterGlobInt->pFctAddStream(video) returns\ 17467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 0x%x", err); 17477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 17487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 17497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 17517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Set video max au size */ 17527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi optionValue.streamID = M4PTO3GPP_WRITER_VIDEO_STREAM_ID; 17537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi optionValue.value = (M4OSA_UInt32)(1.5F * (M4OSA_Float)(pC->m_pWriterVideoStreamInfo->width 17547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * pC->m_pWriterVideoStreamInfo->height) 17557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4PTO3GPP_VIDEO_MIN_COMPRESSION_RATIO); 17567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_1("M4PTO3GPP_Ready4Processing,M4WRITER_kMaxAUSize: %u",optionValue.value); 17577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pWriterGlobInt->pFctSetOption(pC->m_p3gpWriterContext, 17587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32)M4WRITER_kMaxAUSize,(M4OSA_DataOption) &optionValue); 17597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 17607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 17617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: pWriterGlobInt->pFctSetOption(video,\ 17627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_kMaxAUSize) returns 0x%x", err); 17637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 17647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 17657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 17677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Set video max chunck size */ 17687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi optionValue.value = (M4OSA_UInt32)((M4OSA_Float)optionValue.value 17697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4PTO3GPP_VIDEO_AU_SIZE_TO_CHUNCK_SIZE_RATIO); 17707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_1("M4PTO3GPP_Ready4Processing,M4WRITER_kMaxChunckSize: %u",optionValue.value); 17717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pWriterGlobInt->pFctSetOption(pC->m_p3gpWriterContext, 17727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32)M4WRITER_kMaxChunckSize,(M4OSA_DataOption) &optionValue); 17737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 17747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 17757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: pWriterGlobInt->pFctSetOption(video,\ 17767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_kMaxChunckSize) returns 0x%x", err); 17777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 17787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 17797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL != pC->m_pReaderAudioStream) 17817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 17827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pWriterGlobInt->pFctAddStream(pC->m_p3gpWriterContext, pC->m_pWriterAudioStream); 17837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 17847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 17857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: pWriterGlobInt->pFctAddStream(audio) \ 17867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returns 0x%x", err); 17877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 17887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 17897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 17907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 17917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Set audio max au size */ 17927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi optionValue.value = M4PTO3GPP_AUDIO_MAX_AU_SIZE; 17937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi optionValue.streamID = M4PTO3GPP_WRITER_AUDIO_STREAM_ID; 17947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pWriterGlobInt->pFctSetOption(pC->m_p3gpWriterContext, 17957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32)M4WRITER_kMaxAUSize,(M4OSA_DataOption) &optionValue); 17967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 17977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 17987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: pWriterGlobInt->pFctSetOption(audio,\ 17997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_kMaxAUSize) returns 0x%x", err); 18007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 18017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 18027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 18047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Set audio max chunck size */ 18057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi optionValue.value = M4PTO3GPP_AUDIO_MAX_CHUNK_SIZE; /**< Magical */ 18067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pWriterGlobInt->pFctSetOption(pC->m_p3gpWriterContext, 18077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32)M4WRITER_kMaxChunckSize,(M4OSA_DataOption) &optionValue); 18087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 18097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 18107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: pWriterGlobInt->pFctSetOption(audio,\ 18117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_kMaxChunckSize) returns 0x%x", err); 18127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 18137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 18147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 18157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* 18177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Close the stream registering in order to be ready to write data */ 18187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pC->m_pWriterGlobInt->pFctStartWriting(pC->m_p3gpWriterContext); 18197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 18207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 18217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: pWriterGlobInt->pFctStartWriting returns 0x%x", 18227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err); 18237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 18247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 18257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_0("M4PTO3GPP_Ready4Processing: returning M4NO_ERROR"); 18287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 18297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 18307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 18327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 18337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR M4PTO3GPP_writeAmrSilence122Frame(M4WRITER_DataInterface* pWriterDataIntInterface, 18347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_Context* pWriterContext, 18357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_AccessUnit* pWriterAudioAU, M4OSA_Time mtIncCts) 18367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Write an AMR 12.2kbps silence FRAME into the writer 18377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note Mainly used to fix the 'bzz' bug... 18387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pWriterDataIntInterface (IN) writer data interfaces 18397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * pWriterContext (IN/OUT)writer context 18407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * pWriterAudioAU (OUT) writer audio access unit 18417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * mtIncCts (IN) writer CTS 18427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 18437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 18447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 18457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR M4PTO3GPP_writeAmrSilence122Frame(M4WRITER_DataInterface* pWriterDataIntInterface, 18467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_Context* pWriterContext, 18477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_AccessUnit* pWriterAudioAU, 18487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Time mtIncCts) 18497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 18507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 18517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pWriterDataIntInterface->pStartAU(pWriterContext, M4PTO3GPP_WRITER_AUDIO_STREAM_ID, 18537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pWriterAudioAU); 18547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 18557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 18567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_writeAmrSilence122Frame: pWriterDataInt->pStartAU(audio) returns \ 18577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 0x%x!", err); 18587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 18597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 18607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 186132ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memcpy((void *)pWriterAudioAU->dataAddress, 186232ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu (void *)M4PTO3GPP_AMR_AU_SILENCE_122_FRAME, M4PTO3GPP_AMR_AU_SILENCE_FRAME_122_SIZE); 18637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pWriterAudioAU->size = M4PTO3GPP_AMR_AU_SILENCE_FRAME_122_SIZE; 18647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pWriterAudioAU->CTS = mtIncCts; 18657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pWriterAudioAU->nbFrag = 0; 18667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pWriterDataIntInterface->pProcessAU(pWriterContext, M4PTO3GPP_WRITER_AUDIO_STREAM_ID, 18687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pWriterAudioAU); 18697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 18707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 18717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_writeAmrSilence122Frame: pWriterDataInt->pProcessAU(silence) \ 18727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returns 0x%x!", err); 18737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 18747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 18757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 18777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 18787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 18797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 18807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 18817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR M4PTO3GPP_writeAmrSilence048Frame(M4WRITER_DataInterface* pWriterDataIntInterface, 18827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_Context* pWriterContext, 18837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_AccessUnit* pWriterAudioAU, M4OSA_Time mtIncCts) 18847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Write an AMR 12.2kbps silence FRAME into the writer 18857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note Mainly used to fix the 'bzz' bug... 18867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pWriterDataIntInterface (IN) writer data interfaces 18877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * pWriterContext (IN/OUT)writer context 18887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * pWriterAudioAU (OUT) writer audio access unit 18897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * mtIncCts (IN) writer CTS 18907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 18917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 18927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 18937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR M4PTO3GPP_writeAmrSilence048Frame(M4WRITER_DataInterface* pWriterDataIntInterface, 18947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_Context* pWriterContext, 18957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_AccessUnit* pWriterAudioAU, 18967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Time mtIncCts) 18977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 18987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 18997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pWriterDataIntInterface->pStartAU(pWriterContext, M4PTO3GPP_WRITER_AUDIO_STREAM_ID, 19017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pWriterAudioAU); 19027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 19037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 19047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_writeAmrSilence048Frame: pWriterDataInt->pStartAU(audio)\ 19057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returns 0x%x!", err); 19067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 19077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 19087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 190932ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memcpy((void *)pWriterAudioAU->dataAddress, 191032ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu (void *)M4PTO3GPP_AMR_AU_SILENCE_048_FRAME, 19117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4PTO3GPP_AMR_AU_SILENCE_FRAME_048_SIZE); 19127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pWriterAudioAU->size = M4PTO3GPP_AMR_AU_SILENCE_FRAME_048_SIZE; 19137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pWriterAudioAU->CTS = mtIncCts; 19147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pWriterAudioAU->nbFrag = 0; 19157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = pWriterDataIntInterface->pProcessAU(pWriterContext, 19177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4PTO3GPP_WRITER_AUDIO_STREAM_ID, pWriterAudioAU); 19187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4NO_ERROR != err) 19197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 19207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4PTO3GPP_writeAmrSilence048Frame: \ 19217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pWriterDataInt->pProcessAU(silence) returns 0x%x!", err); 19227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 19237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 19247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 19267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 19277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 19287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1929