/* * 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_Writer.h * @brief Core MP4 writer interface * @note This file declares the MP4 writer interface functions. * The MP4 writer specific types are defined in file M4MP4W_Types.h ****************************************************************************** */ #ifndef M4MP4W_WRITER_H #define M4MP4W_WRITER_H #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "NXPSW_CompilerSwitches.h" #ifndef _M4MP4W_USE_CST_MEMORY_WRITER /* includes */ #include "M4OSA_Types.h" #include "M4OSA_Error.h" #include "M4OSA_FileWriter.h" #include "M4OSA_FileReader.h" #include "M4SYS_AccessUnit.h" #include "M4MP4W_Types.h" /** ****************************************************************************** * MP4W Errors & Warnings definition ****************************************************************************** */ #define M4WAR_MP4W_OVERSIZE M4OSA_ERR_CREATE(M4_WAR, M4MP4_WRITER ,0x000001) #define M4WAR_MP4W_NOT_EVALUABLE M4OSA_ERR_CREATE(M4_WAR, M4MP4_WRITER ,0x000002) /** ****************************************************************************** * @brief Get MP4W version * @param major (OUT) Pointer to the 'major' version number. * @param minor (OUT) Pointer to the 'minor' version number. * @param revision (OUT) Pointer to the 'revision' number. * @return M4NO_ERROR: No error * @return M4ERR_PARAMETER: At least one parameter is null ****************************************************************************** */ M4OSA_ERR M4MP4W_getVersion(M4OSA_UInt8* major, M4OSA_UInt8* minor, M4OSA_UInt8* revision); /** ****************************************************************************** * @brief Initiation of the MP4 file creation * @param contextPtr (OUT) Pointer to the MP4 writer context to create. * @param outputFileDescriptor (IN) Descriptor of the output file to open. * @param fileWriterFunction (IN) Pointer to structure containing the set of * OSAL file write functions. * @param tempFileDescriptor (IN) Descriptor of the temporary file to open. * @param fileReaderFunction (IN) Pointer to structure containing the set of * OSAL file read functions. * @return M4NO_ERROR: No error * @return M4ERR_PARAMETER: At least one parameter is null or incorrect * @return M4ERR_ALLOC: Memory allocation failed ****************************************************************************** */ M4OSA_ERR M4MP4W_openWrite( M4OSA_Context* contextPtr, void* outputFileDescriptor, M4OSA_FileWriterPointer* fileWriterFunction, void* tempFileDescriptor, M4OSA_FileReadPointer* fileReaderFunction ); /** ****************************************************************************** * @brief Add a new track * @param context (IN/OUT) MP4 writer context. * @param streamDescPtr (IN) Pointer to the structure containing the parameters for the new track. * @return M4NO_ERROR: No error * @return M4ERR_PARAMETER: At least one parameter is null or incorrect * @return M4ERR_ALLOC: Memory allocation failed * @return M4ERR_STATE: Invalid state * @return M4ERR_BAD_CONTEXT: An audio (resp.video) stream has already been added * to this context while attempting to add another one, * which is forbidden. ****************************************************************************** */ M4OSA_ERR M4MP4W_addStream( M4OSA_Context context, M4SYS_StreamDescription* streamDescPtr); /** ****************************************************************************** * @brief Signal to the core MP4 writer that there is no more tracks to add * @param context (IN/OUT) MP4 writer context. * @return M4NO_ERROR: No error * @return M4ERR_PARAMETER: At least one parameter is null or incorrect * @return M4ERR_ALLOC: Memory allocation failed * @return M4ERR_STATE: Invalid state * @return M4ERR_BAD_CONTEXT: Audio size estimation is required but not two streams * have been added. ****************************************************************************** */ M4OSA_ERR M4MP4W_startWriting( M4OSA_Context context); /** ****************************************************************************** * @brief Asks the core MP4 writer to initiate the access unit creation in * the streamID track * @param context (IN/OUT) MP4 writer context. * @param streamID (IN) Stream ID of the track. * @param auPtr (IN/OUT) Access unit. * @return M4NO_ERROR: No error * @return M4ERR_PARAMETER: At least one parameter is null or incorrect * @return M4ERR_BAD_STREAM_ID:Unknown stream ID * @return M4ERR_ALLOC: Memory allocation failed * @return M4ERR_STATE: Invalid state ****************************************************************************** */ M4OSA_ERR M4MP4W_startAU( M4OSA_Context context, M4SYS_StreamID streamID, M4SYS_AccessUnit* auPtr); /** ****************************************************************************** * @brief Ask the core MP4 writer to write the access unit in the streamID track * @note If M4MP4W_WAR_OVERSIZE is returned, M4MP4W_startAU must not be called anymore, * but directly M4MP4W_closeWrite(). * @param context (IN/OUT) MP4 writer context. * @param streamID (IN) Stream ID of the track. * @param auPtr (IN/OUT) Access unit. * @return M4NO_ERROR: No error * @return M4ERR_PARAMETER: At least one parameter is null or incorrect * @return M4ERR_BAD_STREAM_ID: Unknown stream ID * @return M4ERR_ALLOC: Memory allocation failed * @return M4ERR_STATE: Invalid state * @return M4WAR_MP4W_NOT_EVALUABLE: It is not possible to evaluate audio size if audio * samples don't have a constant size. * @return M4WAR_MP4W_OVERSIZE: Max file size was reached ****************************************************************************** */ M4OSA_ERR M4MP4W_processAU( M4OSA_Context context, M4SYS_StreamID streamID, M4SYS_AccessUnit* auPtr); /** ****************************************************************************** * @brief Close the MP4 file * @note In previous versions of the MP4 writer, the M4MP4W_freeContext method * was in the interface, which is not the case anymore. * The context is now always deallocated in the M4MP4W_closeWrite function. * @param context (IN/OUT) MP4 writer context. * @return M4NO_ERROR: No error * @return M4ERR_PARAMETER: At least one parameter is null or incorrect ****************************************************************************** */ M4OSA_ERR M4MP4W_closeWrite( M4OSA_Context context); /** ****************************************************************************** * @brief Ask the core MP4 writer to return the value associated with the optionID * @param context (IN) MP4 writer context. * @param option (IN) Option ID. * @param valuePtr (OUT) Pointer to the option value. * @return M4NO_ERROR: No error * @return M4ERR_PARAMETER: At least one parameter is null or incorrect * @return M4ERR_NOT_IMPLEMENTED: Not implemented in the current version * @return M4ERR_BAD_OPTION_ID: Unknown optionID * @return M4ERR_BAD_STREAM_ID: Bad stream ID in the option value ****************************************************************************** */ M4OSA_ERR M4MP4W_getOption( M4OSA_Context context, M4OSA_OptionID option, M4OSA_DataOption *valuePtr); /** ****************************************************************************** * @brief Ask the core MP4 writer to set the value associated with the optionID. * @param context (IN/OUT) MP4 writer context. * @param option (IN) Option ID. * @param value (IN) Option value. * @return M4NO_ERROR: No error * @return M4ERR_PARAMETER: At least one parameter is null or incorrect * @return M4ERR_NOT_IMPLEMENTED: Not implemented in the current version * @return M4ERR_BAD_OPTION_ID: Unknown optionID * @return M4ERR_BAD_STREAM_ID: Bad stream ID in the option value * @return M4ERR_ALLOC: A memory allocation failed ****************************************************************************** */ M4OSA_ERR M4MP4W_setOption( M4OSA_Context context, M4OSA_OptionID option, M4OSA_DataOption value); /** ****************************************************************************** * @brief Ask the core MP4 writer to return its state. * @note By selecting a specific streamID (not null), the caller can obtain * the state of a specific stream. By using 0 as streamID the returned * state is not stream specific. * @param context (IN/OUT) MP4 writer context. * @param context (IN) Pointer to the state enumeration. * @param context (IN/OUT) streamID of the stream to retrieve the * micro-state (0 for global state). * @return M4NO_ERROR: No error * @return M4ERR_BAD_STREAM_ID: Unknown stream ID * @return M4ERR_PARAMETER: At least one parameter is null or incorrect ****************************************************************************** */ M4OSA_ERR M4MP4W_getState( M4OSA_Context context, M4MP4W_State* statePtr, M4SYS_StreamID streamID); /** ****************************************************************************** * @brief Get the currently expected file size * @param context (IN/OUT) MP4 writer context. * @return M4NO_ERROR: No error * @return M4ERR_PARAMETER: At least one parameter is null ****************************************************************************** */ M4OSA_ERR M4MP4W_getCurrentFileSize( M4OSA_Context context, M4OSA_UInt32* currentFileSize); #endif /* _M4MP4W_USE_CST_MEMORY_WRITER */ #ifdef __cplusplus } #endif /* __cplusplus */ #endif /*M4MP4W_WRITER_H*/