summaryrefslogtreecommitdiffstats
path: root/libvideoeditor/vss/3gpwriter/src/M4MP4W_Interface.c
diff options
context:
space:
mode:
Diffstat (limited to 'libvideoeditor/vss/3gpwriter/src/M4MP4W_Interface.c')
-rwxr-xr-xlibvideoeditor/vss/3gpwriter/src/M4MP4W_Interface.c914
1 files changed, 0 insertions, 914 deletions
diff --git a/libvideoeditor/vss/3gpwriter/src/M4MP4W_Interface.c b/libvideoeditor/vss/3gpwriter/src/M4MP4W_Interface.c
deleted file mode 100755
index c2c5250..0000000
--- a/libvideoeditor/vss/3gpwriter/src/M4MP4W_Interface.c
+++ /dev/null
@@ -1,914 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- ******************************************************************************
- * @file M4MP4W_Interface.c
- * @brief 3GPP file writer interface
- * @note This implementation follows the common interface defined
- * in "M4WRITER_common.h".
- ******************************************************************************
-*/
-
-#include "NXPSW_CompilerSwitches.h"
-
-/**
- * OSAL includes */
-#include "M4OSA_Types.h" /**< OSAL basic types definiton */
-#include "M4OSA_FileWriter.h" /**< Include for OSAL file accesses implementation */
-#include "M4OSA_Memory.h" /**< Include for OSAL memory accesses implementation */
-#include "M4OSA_Debug.h" /**< OSAL debug tools */
-
-/**
- * Writer includes */
-#include "M4WRITER_common.h" /**< Definition of the writer common interface that
- this module follows */
-
-#ifdef _M4MP4W_USE_CST_MEMORY_WRITER
-#include "M4MP4W_Types_CstMem.h" /**< MP4/3GP core writer types */
-#include "M4MP4W_Writer_CstMem.h" /**< MP4/3GP core writer functions */
-#else
-#include "M4MP4W_Types.h" /**< MP4/3GP core writer types */
-#include "M4MP4W_Writer.h" /**< MP4/3GP core writer functions */
-#endif /* _M4MP4W_USE_CST_MEMORY_WRITER */
-
-/**
- * Specific errors for this module */
-#define M4WRITER_3GP_ERR_UNSUPPORTED_STREAM_TYPE \
- M4OSA_ERR_CREATE(M4_ERR, M4WRITER_3GP, 0x000001)
-
-
-/**
- ******************************************************************************
- * structure M4WRITER_3GP_InternalContext
- * @brief This structure defines the writer context (private)
- * @note This structure is used for all writer calls to store the context
- ******************************************************************************
-*/
-typedef struct
-{
- M4OSA_Context pMP4Context; /**< MP4 writer context */
- M4OSA_UInt32 maxAUsizes; /**< the maximum AU size possible */
-} M4WRITER_3GP_InternalContext;
-
-
-/******************************************************************************
- * M4OSA_ERR M4WRITER_3GP_openWrite(M4WRITER_Context* pContext, void* pWhat,
- * M4OSA_FileWriterPointer* pFileWriterPointer)
- * @brief Open a writer session.
- * @note
- * @param pContext: (OUT) Execution context of the 3GP writer, allocated by this function.
- * @param outputFileDescriptor (IN) Descriptor of the output file to create.
- * @param fileWriterFunction (IN) Pointer to structure containing the set of OSAL
- * file write functions.
- * @param tempFileDescriptor (IN) Descriptor of the temporary file to open
- * (NULL if not used)
- * @param fileReaderFunction (IN) Pointer to structure containing the set of OSAL file read
- * functions (NULL if not used)
- * @return M4NO_ERROR: there is no error
- * @return M4ERR_ALLOC: there is no more available memory
- * @return M4ERR_PARAMETER: pContext or pFilePtrFct is M4OSA_NULL (debug only)
- * @return any error returned by the MP4 core writer openWrite (Its coreID is M4MP4_WRITER)
- ******************************************************************************
-*/
-M4OSA_ERR M4WRITER_3GP_openWrite( M4WRITER_Context* pContext,
- void* outputFileDescriptor,
- M4OSA_FileWriterPointer* pFileWriterPointer,
- void* tempFileDescriptor,
- M4OSA_FileReadPointer* pFileReaderPointer )
-{
- M4WRITER_3GP_InternalContext* apContext;
- M4OSA_ERR err;
-
- M4OSA_TRACE1_0("M4WRITER_3GP_openWrite");
-
- /**
- * Check input parameters */
- M4OSA_DEBUG_IF2((M4OSA_NULL == pContext),M4ERR_PARAMETER,
- "M4WRITER_3GP_openWrite: pContext is M4OSA_NULL");
- M4OSA_DEBUG_IF2((M4OSA_NULL == pFileWriterPointer),M4ERR_PARAMETER,
- "M4WRITER_3GP_openWrite: pFileWriterPointer is M4OSA_NULL");
-
- /**
- * Allocate memory for the context */
- *pContext=M4OSA_NULL;
- apContext = (M4WRITER_3GP_InternalContext*)M4OSA_32bitAlignedMalloc(
- sizeof(M4WRITER_3GP_InternalContext),
- M4WRITER_3GP,
- (M4OSA_Char *)"M4WRITER_3GP_InternalContext");
-
- if (M4OSA_NULL == apContext)
- {
- M4OSA_TRACE1_0("M4WRITER_3GP_openWrite:\
- unable to allocate context, returning M4ERR_ALLOC");
- return (M4OSA_ERR)M4ERR_ALLOC;
- }
-
- /**
- * Reset context variables */
- apContext->pMP4Context = M4OSA_NULL;
- apContext->maxAUsizes = 0;
-
- /**
- * Return the writer context */
- *pContext = (M4WRITER_Context *)apContext;
-
- /**
- * Launch the openWrite of the MP4 writer */
- M4OSA_TRACE3_0("M4WRITER_3GP_openWrite: calling M4MP4W_openWrite()");
-
- err = M4MP4W_openWrite(&apContext->pMP4Context, outputFileDescriptor,
- pFileWriterPointer, tempFileDescriptor, pFileReaderPointer );
-
- if (M4OSA_ERR_IS_ERROR(err))
- {
- M4OSA_TRACE1_1("M4WRITER_3GP_openWrite: "
- "M4MP4W_openWrite returns error 0x%x", err);
- }
-
- M4OSA_TRACE2_1("M4WRITER_3GP_openWrite: returning 0x%x", err);
-
- return err;
-}
-
-
-/******************************************************************************
- * M4OSA_ERR M4WRITER_3GP_startWriting(M4WRITER_Context pContext)
- * @brief Indicates to the writer that the setup session is ended and that
- * we will start to write.
- * @note
- * @param pContext: (IN) Execution context of the 3GP writer,
- * @return M4NO_ERROR: there is no error
- * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (debug only)
- * @return any error returned by the MP4 core writer startWriting (Its
- * coreID is M4MP4_WRITER)
- ******************************************************************************
-*/
-M4OSA_ERR M4WRITER_3GP_startWriting(M4WRITER_Context pContext)
-{
- M4WRITER_3GP_InternalContext* apContext =
- (M4WRITER_3GP_InternalContext*)pContext;
-
- M4OSA_ERR err;
-
- M4OSA_TRACE1_1("M4WRITER_3GP_startWriting: pContext=0x%x", pContext);
-
- /**
- * Check input parameter */
- M4OSA_DEBUG_IF2((M4OSA_NULL == apContext),M4ERR_PARAMETER,
- "M4WRITER_3GP_startWriting: pContext is M4OSA_NULL");
-
- /**
- * Call the MP4 core writer */
- M4OSA_TRACE3_0("M4WRITER_3GP_startWriting: calling M4MP4W_startWriting()");
- err = M4MP4W_startWriting(apContext->pMP4Context);
- if (M4OSA_ERR_IS_ERROR(err))
- {
- M4OSA_TRACE1_1("M4MP4W_startWriting returns error 0x%x", err);
- }
-
- M4OSA_TRACE2_1("M4WRITER_3GP_startWriting: returning 0x%x", err);
- return err;
-}
-
-
-/******************************************************************************
- * M4OSA_ERR M4WRITER_3GP_addStream(
- * M4WRITER_Context pContext,
- * M4SYS_StreamDescription *pStreamDescription)
- * @brief Add a stream (audio or video).
- * @note Decoder specific info properties are correctly set before calling
- * the core writer add function
- * @param pContext: (IN) Execution context of the 3GP writer,
- * @param streamDescription: (IN) stream description.
- * @return M4NO_ERROR: there is no error
- * @return M4ERR_PARAMETER: pContext or pStreamDescription is M4OSA_NULL
- * (debug only)
- * @return any error returned by the MP4 core writer addStream
- * (Its coreID is M4MP4_WRITER)
- ******************************************************************************
-*/
-M4OSA_ERR M4WRITER_3GP_addStream(M4WRITER_Context pContext,
- M4SYS_StreamDescription* pStreamDescription)
-{
- M4WRITER_3GP_InternalContext *apContext =
- (M4WRITER_3GP_InternalContext *)pContext;
-
- M4OSA_ERR err;
- M4WRITER_StreamVideoInfos *pVideoInfo = M4OSA_NULL;
- M4WRITER_StreamAudioInfos *pAudioInfo = M4OSA_NULL;
- M4MP4W_StreamIDsize sizeValue;
-
- M4OSA_TRACE1_2("M4WRITER_3GP_addStream: pContext=0x%x, "
- "pStreamDescription=0x%x",
- pContext, pStreamDescription);
-
- /**
- * Check input parameters */
- M4OSA_DEBUG_IF2((M4OSA_NULL == apContext),M4ERR_PARAMETER,
- "M4WRITER_3GP_addStream: pContext is M4OSA_NULL");
- M4OSA_DEBUG_IF2((M4OSA_NULL == pStreamDescription),M4ERR_PARAMETER,
- "M4WRITER_3GP_addStream: pStreamDescription is M4OSA_NULL");
-
- /**
- * Adapt audio/video stream infos */
- switch (pStreamDescription->streamType)
- {
- case M4SYS_kMPEG_4:
- case M4SYS_kH264:
- case M4SYS_kH263:
- M4OSA_TRACE3_1("M4WRITER_3GP_addStream: "
- "adding a Video stream (streamType=0x%x)",
- pStreamDescription->streamType);
- /**
- * Common descriptions */
- pStreamDescription->streamID = VideoStreamID; /**< The only values checked by our
- core writer are streamID */
- pStreamDescription->timeScale = 1000; /**< and timeScale */
-
-/* Not recommended for video editing -> write explicitely the 'bitr' box into 'd263' */
-/* Rem : it is REL 5 of 3gpp documentation */
-// /**
-// * Average bit-rate must not be set in H263 to be compatible with Platform4 */
-// if (M4SYS_kH263 == pStreamDescription->streamType)
-// {
-// pStreamDescription->averageBitrate = -1;
-// }
-
- /**
- * Decoder specific info */
- pVideoInfo = (M4WRITER_StreamVideoInfos *)pStreamDescription->decoderSpecificInfo;
- pStreamDescription->decoderSpecificInfoSize = pVideoInfo->Header.Size;
- pStreamDescription->decoderSpecificInfo = (M4OSA_MemAddr32)pVideoInfo->Header.pBuf;
- M4OSA_TRACE3_2("M4WRITER_3GP_addStream: Video: DSI=0x%x, DSIsize=%d",
- pVideoInfo->Header.pBuf, pVideoInfo->Header.Size);
- break;
-
- case M4SYS_kAMR:
- case M4SYS_kAMR_WB:
- case M4SYS_kAAC:
- case M4SYS_kEVRC:
- M4OSA_TRACE3_1("M4WRITER_3GP_addStream: adding an Audio stream (streamType=0x%x)",
- pStreamDescription->streamType);
- /**
- * Common descriptions */
- pStreamDescription->streamID = AudioStreamID; /**< The only value checked by our
- core writer is streamID */
-
- /**
- * Decoder specific info */
- pAudioInfo = (M4WRITER_StreamAudioInfos *)pStreamDescription->decoderSpecificInfo;
- pStreamDescription->decoderSpecificInfoSize = pAudioInfo->Header.Size;
- pStreamDescription->decoderSpecificInfo = (M4OSA_MemAddr32)pAudioInfo->Header.pBuf;
- M4OSA_TRACE3_2("M4WRITER_3GP_addStream: Audio: DSI=0x%x, DSIsize=%d",
- pAudioInfo->Header.pBuf, pAudioInfo->Header.Size);
- break;
-
- default:
- M4OSA_TRACE1_1("M4WRITER_3GP_addStream:\
- returning M4WRITER_3GP_ERR_UNSUPPORTED_STREAM_TYPE (streamType=0x%x)",
- pStreamDescription->streamType);
- return (M4OSA_ERR)M4WRITER_3GP_ERR_UNSUPPORTED_STREAM_TYPE;
- break;
- }
-
- /**
- * Call the MP4 core writer */
- M4OSA_TRACE3_0("M4WRITER_3GP_addStream: calling M4MP4W_addStream()");
- err = M4MP4W_addStream(apContext->pMP4Context,pStreamDescription);
- if (M4OSA_ERR_IS_ERROR(err))
- {
- M4OSA_TRACE1_1("M4WRITER_3GP_addStream: M4MP4W_addStream returns error 0x%x", err);
- M4OSA_TRACE1_1("M4WRITER_3GP_addStream: returning 0x%x", err);
- return (err);
- }
-
- /**
- * For Video, set the M4MP4W_trackSize Option */
- switch (pStreamDescription->streamType)
- {
- case M4SYS_kMPEG_4:
- case M4SYS_kH264:
- case M4SYS_kH263:
- sizeValue.streamID = VideoStreamID;
- sizeValue.height = (M4OSA_UInt16)(pVideoInfo->height);
- sizeValue.width = (M4OSA_UInt16)(pVideoInfo->width);
- M4OSA_TRACE3_2("M4WRITER_3GP_addStream: Video: height=%d, width=%d",
- sizeValue.height, sizeValue.width);
-
- M4OSA_TRACE3_0("M4WRITER_3GP_addStream: calling M4MP4W_setOption(M4MP4W_trackSize)");
- err = M4MP4W_setOption( apContext->pMP4Context, M4MP4W_trackSize,
- (M4OSA_DataOption)&sizeValue);
- if (M4OSA_ERR_IS_ERROR(err))
- {
- M4OSA_TRACE1_1("M4WRITER_3GP_addStream: M4MP4W_setOption returns error 0x%x",
- err);
- }
- break;
- default:
- break;
- }
-
- M4OSA_TRACE2_1("M4WRITER_3GP_addStream: returning 0x%x", err);
- return err;
-}
-
-
-/******************************************************************************
- * M4OSA_ERR M4WRITER_3GP_closeWrite(M4WRITER_Context pContext)
- * @brief Close the writer. The context is freed here.
- * @note
- * @param pContext: (IN) Execution context of the 3GP writer,
- * @return M4NO_ERROR: there is no error
- * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (debug only)
- * @return any error returned by the MP4 core writer closeWrite (Its coreID
- * is M4MP4_WRITER)
- ******************************************************************************
-*/
-M4OSA_ERR M4WRITER_3GP_closeWrite(M4WRITER_Context pContext)
-{
- M4WRITER_3GP_InternalContext* apContext=(M4WRITER_3GP_InternalContext*)pContext;
- M4OSA_ERR err = M4NO_ERROR;
-
- M4OSA_TRACE1_1("M4WRITER_3GP_closeWrite called with pContext=0x%x", pContext);
-
- /**
- * Check input parameter */
- M4OSA_DEBUG_IF2((M4OSA_NULL == apContext),M4ERR_PARAMETER,
- "M4WRITER_3GP_closeWrite: pContext is M4OSA_NULL");
-
- /**
- * Call the MP4 core writer */
- if (M4OSA_NULL != apContext->pMP4Context)
- {
- M4OSA_TRACE3_0("M4WRITER_3GP_closeWrite: calling M4MP4W_closeWrite()");
- err = M4MP4W_closeWrite(apContext->pMP4Context);
- if (M4OSA_ERR_IS_ERROR(err))
- {
- M4OSA_TRACE1_1("M4WRITER_3GP_closeWrite: M4MP4W_closeWrite returns error 0x%x", err);
- }
- }
-
- /**
- * Deallocate our own context */
- free(apContext);
-
- M4OSA_TRACE2_1("M4WRITER_3GP_closeWrite: returning 0x%x", err);
- return err;
-}
-
-
-/******************************************************************************
- * M4OSA_ERR M4WRITER_3GP_setOption(
- * M4WRITER_Context pContext, M4OSA_UInt32 optionID,
- * M4OSA_DataOption optionValue)
- * @brief This function asks the writer to set the value associated with
- * the optionID. The caller is responsible for allocating/
- * de-allocating the memory of the value field.
- * @note The options handled by the component depend on the implementation
- * of the component.
- * @param pContext: (IN) Execution context of the 3GP writer,
- * @param pptionId: (IN) ID of the option to set.
- * @param OptionValue : (IN) Value of the option to set.
- * @return M4NO_ERROR: there is no error
- * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (debug only)
- * @return M4ERR_BAD_OPTION_ID: the ID of the option is not valid.
- * @return any error returned by the MP4 core writer setOption (Its coreID
- * is M4MP4_WRITER)
- ******************************************************************************
-*/
-M4OSA_ERR M4WRITER_3GP_setOption(
- M4WRITER_Context pContext, M4OSA_UInt32 optionID,
- M4OSA_DataOption optionValue)
-{
- M4WRITER_3GP_InternalContext* apContext =
- (M4WRITER_3GP_InternalContext*)pContext;
-
- M4OSA_ERR err = M4NO_ERROR;
- M4MP4W_memAddr memval;
- M4SYS_StreamIDValue optval;
-
- M4OSA_TRACE2_3("M4WRITER_3GP_setOption: pContext=0x%x, optionID=0x%x,\
- optionValue=0x%x", pContext, optionID, optionValue);
-
- /**
- * Check input parameter */
- M4OSA_DEBUG_IF2((M4OSA_NULL==apContext),M4ERR_PARAMETER,
- "M4WRITER_3GP_setOption: pContext is M4OSA_NULL");
-
- switch (optionID)
- {
- /**
- * Maximum Access Unit size */
- case M4WRITER_kMaxAUSize:
- M4OSA_TRACE2_0("setting M4WRITER_kMaxAUSize option");
- err = M4MP4W_setOption(
- apContext->pMP4Context,M4MP4W_maxAUsize, optionValue);
- if (M4OSA_ERR_IS_ERROR(err))
- {
- M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_maxAUsize) "
- "returns error 0x%x", err);
- }
- break;
- /**
- * Maximum chunck size */
- case M4WRITER_kMaxChunckSize:
- M4OSA_TRACE2_0("setting M4WRITER_kMaxChunckSize option");
- err = M4MP4W_setOption(
- apContext->pMP4Context,M4MP4W_maxChunkSize, optionValue);
- if (M4OSA_ERR_IS_ERROR(err))
- {
- M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_maxChunkSize)\
- returns error 0x%x", err);
- }
- break;
- /**
- * File string signature */
- case M4WRITER_kEmbeddedString:
- M4OSA_TRACE2_0("setting M4WRITER_kEmbeddedString option");
- /* The given M4OSA_DataOption must actually
- be a text string */
- memval.addr = (M4OSA_MemAddr32)optionValue;
- /**< this is max string size copied by the core */
- memval.size = 16;
- err = M4MP4W_setOption(
- apContext->pMP4Context,M4MP4W_embeddedString, &memval);
- if (M4OSA_ERR_IS_ERROR(err))
- {
- M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_embeddedString)\
- returns error 0x%x", err);
- }
- break;
- /**
- * File integration tag */
- case M4WRITER_kIntegrationTag:
- M4OSA_TRACE2_0("setting M4WRITER_kIntegrationTag option");
- /* The given M4OSA_DataOption must actually
- be a text string */
- memval.addr = (M4OSA_MemAddr32)optionValue;
- /**< this is max string size copied by the core */
- memval.size = strlen((const char *)optionValue);
- err = M4MP4W_setOption(
- apContext->pMP4Context,M4MP4W_integrationTag, &memval);
- if (M4OSA_ERR_IS_ERROR(err))
- {
- M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_integrationTag)"
- " returns error 0x%x", err);
- }
- break;
- /**
- * File version signature */
- case M4WRITER_kEmbeddedVersion:
- M4OSA_TRACE2_0("setting M4WRITER_kEmbeddedVersion option");
- /* The given M4OSA_DataOption must actually
- be a version number */
-
- /**< Here 0 means both streams */
- optval.streamID = 0;
- /**< version number */
- optval.value = *(M4OSA_UInt32*)optionValue;
- err = M4MP4W_setOption(
- apContext->pMP4Context,M4MP4W_CamcoderVersion, &optval);
- if (M4OSA_ERR_IS_ERROR(err))
- {
- M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_CamcoderVersion)"
- " returns error 0x%x", err);
- }
- break;
- /**
- * Some options are read-only */
- case M4WRITER_kFileSize:
- case M4WRITER_kFileSizeAudioEstimated:
- M4OSA_TRACE2_1("trying to set a read-only option! (ID=0x%x)",
- optionID);
- return (M4OSA_ERR)M4ERR_READ_ONLY;
- break;
- /**
- * Maximum filesize limitation */
- case M4WRITER_kMaxFileSize:
- M4OSA_TRACE2_0("setting M4WRITER_kMaxFileSize option");
- err = M4MP4W_setOption(
- apContext->pMP4Context,M4MP4W_maxFileSize, optionValue);
- if (M4OSA_ERR_IS_ERROR(err))
- {
- M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_maxFileSize)\
- returns error 0x%x", err);
- }
- break;
-
- /**
- * Maximum file duration limitation */
- case M4WRITER_kMaxFileDuration:
- M4OSA_TRACE2_0("setting M4WRITER_kMaxFileDuration option");
- err = M4MP4W_setOption(
- apContext->pMP4Context,M4MP4W_maxFileDuration, optionValue);
- if (M4OSA_ERR_IS_ERROR(err))
- {
- M4OSA_TRACE1_1("M4MP4W_setOption(M4WRITER_kMaxFileDuration)"
- " returns error 0x%x", err);
- }
- break;
-
- /**
- * Set 'ftyp' atom */
- case M4WRITER_kSetFtypBox:
- M4OSA_TRACE2_0("setting M4WRITER_kSetFtypBox option");
- err = M4MP4W_setOption(
- apContext->pMP4Context, M4MP4W_setFtypBox, optionValue);
- if (M4OSA_ERR_IS_ERROR(err))
- {
- M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_setFtypBox)\
- returns error 0x%x", err);
- }
- break;
-
- /**
- * Decoder Specific Info */
- case M4WRITER_kDSI:
- M4OSA_TRACE2_0("setting M4WRITER_kDSI option");
- err = M4MP4W_setOption(
- apContext->pMP4Context, M4MP4W_DSI, optionValue);
- if (M4OSA_ERR_IS_ERROR(err))
- {
- M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_DSI)\
- returns error 0x%x", err);
- }
- break;
- /*+ H.264 Trimming */
- case M4WRITER_kMUL_PPS_SPS:
- M4OSA_TRACE2_0("setting M4WRITER_kMUL_PPS_SPS option");
- err = M4MP4W_setOption(
- apContext->pMP4Context, M4MP4W_MUL_PPS_SPS, optionValue);
- if (M4OSA_ERR_IS_ERROR(err))
- {
- M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_DSI)\
- returns error 0x%x", err);
- }
- break;
- /*- H.264 Trimming */
-
- /**
- * Unknown option */
- default:
- M4OSA_TRACE2_1("trying to set an unknown option!\
- (optionID=0x%x)", optionID);
- return (M4OSA_ERR)M4ERR_BAD_OPTION_ID;
- break;
- }
-
- M4OSA_TRACE3_1("M4WRITER_3GP_setOption: returning 0x%x", err);
- return err;
-}
-
-
-/******************************************************************************
- * M4OSA_ERR M4WRITER_3GP_getOption(
- * M4WRITER_Context pContext, M4OSA_UInt32 optionID,
- * M4OSA_DataOption optionValue)
- * @brief This function asks the writer to return the value associated with
- * the optionID. The caller is responsible for allocating/
- * de-allocating the memory of the value field.
- * @note The options handled by the component depend on the implementation
- * of the component.
- * @param pContext: (IN) Execution context of the 3GP writer,
- * @param OptionId: (IN) Id of the option to get.
- * @param pOptionValue: (OUT) Value of the option to get.
- * @return M4NO_ERROR: there is no error
- * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (debug only)
- * @return M4ERR_BAD_OPTION_ID: the ID of the option is not valid.
- * @return M4ERR_NOT_IMPLEMENTED: This option is not implemented yet.
- * @return any error returned by the MP4 core writer getOption (Its coreID
- * is M4MP4_WRITER)
- ******************************************************************************
-*/
-M4OSA_ERR M4WRITER_3GP_getOption(
- M4WRITER_Context pContext, M4OSA_UInt32 optionID,
- M4OSA_DataOption optionValue)
-{
- M4WRITER_3GP_InternalContext* apContext =
- (M4WRITER_3GP_InternalContext*)pContext;
-
- M4OSA_ERR err;
-
- M4OSA_TRACE2_3("M4WRITER_3GP_getOption: pContext=0x%x, optionID=0x%x,\
- optionValue=0x%x", pContext, optionID, optionValue);
-
- /**
- * Check input parameter */
- M4OSA_DEBUG_IF2((M4OSA_NULL == apContext),M4ERR_PARAMETER,
- "M4WRITER_3GP_getOption: pContext is M4OSA_NULL");
-
- switch (optionID)
- {
- /**
- * Maximum Access Unit size */
- case M4WRITER_kMaxAUSize:
- M4OSA_TRACE2_0("getting M4WRITER_kMaxAUSize option");
- err = M4MP4W_getOption(apContext->pMP4Context,M4MP4W_maxAUsize,
- (M4OSA_DataOption*)&optionValue);
- if (M4OSA_ERR_IS_ERROR(err))
- {
- M4OSA_TRACE1_1("M4MP4W_getOption(M4MP4W_maxAUsize)"
- " returns error 0x%x", err);
- }
- break;
- /**
- * Maximum chunck size */
- case M4WRITER_kMaxChunckSize:
- M4OSA_TRACE2_0("getting M4WRITER_kMaxChunckSize option");
- err = M4MP4W_getOption(apContext->pMP4Context,M4MP4W_maxChunkSize,
- (M4OSA_DataOption*)&optionValue);
- if (M4OSA_ERR_IS_ERROR(err))
- {
- M4OSA_TRACE1_1("M4MP4W_getOption(M4MP4W_maxChunkSize)\
- returns error 0x%x", err);
- }
- break;
- /**
- * The file size option */
- case M4WRITER_kFileSize:
- M4OSA_TRACE2_0("getting M4WRITER_kFileSize option");
- /* get the current file size */
- err = M4MP4W_getCurrentFileSize(
- apContext->pMP4Context, (M4OSA_UInt32*)optionValue);
- if (M4OSA_ERR_IS_ERROR(err))
- {
- M4OSA_TRACE1_1("M4MP4W_getCurrentFileSize"
- " returns error 0x%x", err);
- }
- break;
- /**
- * The file size with audio option has its own function call
- in the MP4 core writer */
- case M4WRITER_kFileSizeAudioEstimated:
- M4OSA_TRACE2_0("getting M4WRITER_kFileSizeAudioEstimated option");
- /* get the current file size ... */
- err = M4MP4W_getCurrentFileSize(
- apContext->pMP4Context, (M4OSA_UInt32*)optionValue);
- if (M4OSA_ERR_IS_ERROR(err))
- {
- M4OSA_TRACE1_1("M4MP4W_getCurrentFileSize"
- " returns error 0x%x", err);
- }
- //no more needed 3gp writer has its own mecanism
- ///* ... add the estimated next max AU size */
- //*((M4OSA_UInt32*)optionValue) += apContext->maxAUsizes;
- break;
- /**
- * Unknown option */
- default:
- M4OSA_TRACE2_1("trying to get an unknown option!\
- (optionID=0x%x)", optionID);
- return (M4OSA_ERR)M4ERR_BAD_OPTION_ID;
- break;
- }
-
- M4OSA_TRACE3_1("M4WRITER_3GP_getOption: returning 0x%x", err);
- return err;
-}
-
-
-/******************************************************************************
- * M4OSA_ERR M4WRITER_3GP_startAU(
- * M4WRITER_Context pContext, M4SYS_StreamID streamID,
- * M4SYS_AccessUnit* pAU)
- * @brief Prepare an Access Unit to be ready to store data
- * @note
- * @param pContext: (IN) Execution context of the 3GP writer,
- * @param streamID: (IN) Id of the stream to which the Access Unit
- * is related.
- * @param pAU: (IN/OUT) Access Unit to be prepared.
- * @return M4NO_ERROR: there is no error
- * @return M4ERR_PARAMETER: pContext or pAU is M4OSA_NULL (debug only)
- * @return M4ERR_BAD_STREAM_ID: streamID is not VideoStreamID nor
- * AudioStreamID (debug only)
- * @return any error returned by the MP4 core writer startAU (Its coreID
- * is M4MP4_WRITER)
- ******************************************************************************
-*/
-M4OSA_ERR M4WRITER_3GP_startAU(
- M4WRITER_Context pContext, M4SYS_StreamID streamID,
- M4SYS_AccessUnit* pAU)
-{
- M4WRITER_3GP_InternalContext* apContext =
- (M4WRITER_3GP_InternalContext*)pContext;
-
- M4OSA_ERR err;
-
- M4OSA_TRACE2_3("M4WRITER_3GP_startAU: pContext=0x%x, streamID=%d, pAU=0x%x",
- pContext, streamID, pAU);
-
- /**
- * Check input parameter */
- M4OSA_DEBUG_IF2((M4OSA_NULL == apContext), M4ERR_PARAMETER,
- "M4WRITER_3GP_startAU: pContext is M4OSA_NULL");
- M4OSA_DEBUG_IF2((M4OSA_NULL == pAU), M4ERR_PARAMETER,
- "M4WRITER_3GP_startAU: pAU is M4OSA_NULL");
- M4OSA_DEBUG_IF2(
- ((VideoStreamID != streamID) && (AudioStreamID != streamID)),
- M4ERR_BAD_STREAM_ID,
- "M4WRITER_3GP_processAU: Wrong streamID");
-
- /**
- * Call the MP4 writer */
- M4OSA_TRACE3_0("M4WRITER_3GP_startAU: calling M4MP4W_startAU()");
- err = M4MP4W_startAU(apContext->pMP4Context, streamID, pAU);
- if (M4OSA_ERR_IS_ERROR(err))
- {
- M4OSA_TRACE1_1("M4MP4W_startAU returns error 0x%x", err);
- }
-
- M4OSA_TRACE3_2("AU: dataAddress=0x%x, size=%d",
- pAU->dataAddress, pAU->size);
-
- /* Convert oversize to a request toward VES automaton */
- if (M4WAR_MP4W_OVERSIZE == err)
- {
- err = M4WAR_WRITER_STOP_REQ;
- }
-
- M4OSA_TRACE3_1("M4WRITER_3GP_startAU: returning 0x%x", err);
- return err;
-}
-
-
-/******************************************************************************
- * M4OSA_ERR M4WRITER_3GP_processAU(
- * M4WRITER_Context pContext, M4SYS_StreamID streamID,
- * M4SYS_AccessUnit* pAU)
- * @brief Write an Access Unit
- * @note
- * @param pContext: (IN) Execution context of the 3GP writer,
- * @param streamID: (IN) Id of the stream to which the Access Unit
- * is related.
- * @param pAU: (IN/OUT) Access Unit to be written
- * @return M4NO_ERROR: there is no error
- * @return M4ERR_PARAMETER: pContext or pAU is M4OSA_NULL (debug only)
- * @return M4ERR_BAD_STREAM_ID: streamID is not VideoStreamID nor
- * AudioStreamID (debug only)
- * @return any error returned by the MP4 core writer processAU
- * (Its coreID is M4MP4_WRITER)
- ******************************************************************************
-*/
-M4OSA_ERR M4WRITER_3GP_processAU(
- M4WRITER_Context pContext, M4SYS_StreamID streamID,
- M4SYS_AccessUnit* pAU)
-{
- M4WRITER_3GP_InternalContext* apContext =
- (M4WRITER_3GP_InternalContext*)pContext;
-
- M4OSA_ERR err;
-
- M4OSA_TRACE2_3("M4WRITER_3GP_processAU: "
- "pContext=0x%x, streamID=%d, pAU=0x%x",
- pContext, streamID, pAU);
-
- /**
- * Check input parameter */
- M4OSA_DEBUG_IF2((M4OSA_NULL == apContext), M4ERR_PARAMETER,
- "M4WRITER_3GP_processAU: pContext is M4OSA_NULL");
- M4OSA_DEBUG_IF2((M4OSA_NULL == pAU), M4ERR_PARAMETER,
- "M4WRITER_3GP_processAU: pAU is M4OSA_NULL");
- M4OSA_DEBUG_IF2(
- ((VideoStreamID != streamID) && (AudioStreamID != streamID)),
- M4ERR_BAD_STREAM_ID,
- "M4WRITER_3GP_processAU: Wrong streamID");
-
- M4OSA_TRACE3_4("M4WRITER_3GP_processAU: AU: "
- "dataAddress=0x%x, size=%d, CTS=%d, nbFrag=%d",
- pAU->dataAddress, pAU->size, (M4OSA_UInt32)pAU->CTS, pAU->nbFrag);
-
- if(pAU->size > apContext->maxAUsizes)
- {
- apContext->maxAUsizes = pAU->size;
- }
- /**
- * Call the MP4 writer */
- M4OSA_TRACE3_0("M4WRITER_3GP_processAU: calling M4MP4W_processAU()");
- err = M4MP4W_processAU(apContext->pMP4Context, streamID, pAU);
- if (M4OSA_ERR_IS_ERROR(err))
- {
- M4OSA_TRACE1_1("M4MP4W_processAU returns error 0x%x", err);
- }
-
- /* Convert oversize to a request toward VES automaton */
- if(M4WAR_MP4W_OVERSIZE == err)
- {
- err = M4WAR_WRITER_STOP_REQ;
- }
-
- M4OSA_TRACE3_1("M4WRITER_3GP_processAU: returning 0x%x", err);
- return err;
-}
-
-
-/******************************************************************************
- * M4OSA_ERR M4WRITER_3GP_getInterfaces(
- * M4WRITER_OutputFileType* Type,
- * M4WRITER_GlobalInterface** SrcGlobalInterface,
- * M4WRITER_DataInterface** SrcDataInterface)
- * @brief Get the 3GPP writer common interface
- * @note Retrieves the set of functions needed to use the 3GPP writer.
- * It follows the common writer interface.
- * @param Type: (OUT) return the type of this writer. Will always be
- * M4WRITER_k3GPP.
- * @param SrcGlobalInterface: (OUT) Main set of function to use this
- * 3GPP writer
- * @param SrcDataInterface: (OUT) Set of function related to datas
- * to use this 3GPP writer
- * @return M4NO_ERROR: there is no error
- * @return M4ERR_ALLOC: there is no more available memory
- * @return M4ERR_PARAMETER: At least one of the parameters is M4OSA_NULL
- * (debug only)
- ******************************************************************************
-*/
-M4OSA_ERR M4WRITER_3GP_getInterfaces(
- M4WRITER_OutputFileType* Type,
- M4WRITER_GlobalInterface** SrcGlobalInterface,
- M4WRITER_DataInterface** SrcDataInterface)
-{
- M4WRITER_GlobalInterface *pGlobal;
- M4WRITER_DataInterface *pData;
-
- M4OSA_TRACE2_3("M4WRITER_3GP_getInterfaces: "
- "Type=0x%x, SrcGlobalInterface=0x%x,\
- SrcDataInterface=0x%x", Type, SrcGlobalInterface, SrcDataInterface);
-
- /**
- * Check input parameter */
- M4OSA_DEBUG_IF2((M4OSA_NULL == Type), M4ERR_PARAMETER,
- "M4WRITER_3GP_getInterfaces: Type is M4OSA_NULL");
- M4OSA_DEBUG_IF2((M4OSA_NULL == SrcGlobalInterface), M4ERR_PARAMETER,
- "M4WRITER_3GP_getInterfaces: SrcGlobalInterface is M4OSA_NULL");
- M4OSA_DEBUG_IF2((M4OSA_NULL == SrcDataInterface), M4ERR_PARAMETER,
- "M4WRITER_3GP_getInterfaces: SrcDataInterface is M4OSA_NULL");
-
- /**
- * Set the output type */
- *Type = M4WRITER_k3GPP;
-
- /**
- * Allocate the global interface structure */
- pGlobal = (M4WRITER_GlobalInterface*)M4OSA_32bitAlignedMalloc(
- sizeof(M4WRITER_GlobalInterface),
- M4WRITER_3GP, (M4OSA_Char *)"M4WRITER_GlobalInterface");
- if (M4OSA_NULL == pGlobal)
- {
- M4OSA_TRACE1_0("unable to allocate M4WRITER_GlobalInterface,\
- returning M4ERR_ALLOC");
- *SrcGlobalInterface = M4OSA_NULL;
- *SrcDataInterface = M4OSA_NULL;
- return (M4OSA_ERR)M4ERR_ALLOC;
- }
-
- /**
- * Allocate the data interface structure */
- pData =
- (M4WRITER_DataInterface *)M4OSA_32bitAlignedMalloc(sizeof(M4WRITER_DataInterface),
- M4WRITER_3GP, (M4OSA_Char *)"M4WRITER_DataInterface");
- if (M4OSA_NULL == pData)
- {
- M4OSA_TRACE1_0("unable to allocate M4WRITER_DataInterface,\
- returning M4ERR_ALLOC");
- free(pGlobal);
- *SrcGlobalInterface = M4OSA_NULL;
- *SrcDataInterface = M4OSA_NULL;
- return (M4OSA_ERR)M4ERR_ALLOC;
- }
-
- /**
- * Fill the global interface structure */
- pGlobal->pFctOpen = M4WRITER_3GP_openWrite;
- pGlobal->pFctAddStream = M4WRITER_3GP_addStream;
- pGlobal->pFctStartWriting = M4WRITER_3GP_startWriting;
- pGlobal->pFctCloseWrite = M4WRITER_3GP_closeWrite;
- pGlobal->pFctSetOption = M4WRITER_3GP_setOption;
- pGlobal->pFctGetOption = M4WRITER_3GP_getOption;
-
- /**
- * Fill the data interface structure */
- pData->pStartAU = M4WRITER_3GP_startAU;
- pData->pProcessAU = M4WRITER_3GP_processAU;
-
- /**
- * Set the return values */
- *SrcGlobalInterface = pGlobal;
- *SrcDataInterface = pData;
-
- M4OSA_TRACE2_0("M4WRITER_3GP_getInterfaces: returning M4NO_ERROR");
- return M4NO_ERROR;
-}
-