| /* |
| * 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 M4WRITER_common.h |
| * @brief VES writers shell interface. |
| * @note This file defines the types internally used by the VES to abstract writers |
| ****************************************************************************** |
| */ |
| #ifndef __M4WRITER_COMMON_H__ |
| #define __M4WRITER_COMMON_H__ |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif /* __cplusplus */ |
| |
| #include "M4OSA_Types.h" |
| #include "M4OSA_FileWriter.h" /* for M4OSA_FileWriterPointer */ |
| #include "M4OSA_FileReader.h" /* for M4OSA_FileWriterPointer */ |
| #include "M4OSA_OptionID.h" /* for M4OSA_OPTION_ID_CREATE() */ |
| #include "M4OSA_CoreID.h" /* for M4WRITER_COMMON */ |
| |
| #include "M4SYS_Stream.h" /* for M4SYS_StreamID */ |
| #include "M4SYS_AccessUnit.h" /* for M4SYS_AccessUnit */ |
| |
| /** |
| ****************************************************************************** |
| * MP4W Errors & Warnings definition |
| ****************************************************************************** |
| */ |
| #define M4WAR_WRITER_STOP_REQ M4OSA_ERR_CREATE(M4_WAR, M4WRITER_COMMON ,0x000001) |
| |
| /** |
| ****************************************************************************** |
| * enum M4WRITER_OutputFileType |
| * @brief This enum defines the avalaible output file format. |
| ****************************************************************************** |
| */ |
| typedef enum |
| { |
| M4WRITER_kUnknown=-1, |
| M4WRITER_k3GPP=0, /**< 3GPP compliant file */ |
| M4WRITER_kAVI=1, /**< AVI file */ |
| M4WRITER_kAMR=2, /**< AMR file */ |
| M4WRITER_kNETWORK3GPP=3, /**< 3GPP via TCP */ |
| M4WRITER_kPCM=4, /**< PCM file */ |
| M4WRITER_kJPEG=5, /**< JPEG EXIF writer */ |
| M4WRITER_kMP3=6, /**< MP3 writer */ |
| |
| M4WRITER_kType_NB /* number of writers, keep it as last enum entry */ |
| |
| } M4WRITER_OutputFileType; |
| |
| /** |
| ****************************************************************************** |
| * enum M4WRITER_OptionID |
| * @brief This enums defines all avalaible options. All the reuturned values are in |
| * M4OSA_UInt32 type. |
| ****************************************************************************** |
| */ |
| typedef enum { |
| M4WRITER_kMaxAUSize = M4OSA_OPTION_ID_CREATE (M4_READ|M4_WRITE, M4WRITER_COMMON, 0x01), |
| M4WRITER_kMaxChunckSize = M4OSA_OPTION_ID_CREATE (M4_READ|M4_WRITE, M4WRITER_COMMON, 0x02), |
| M4WRITER_kFileSize = M4OSA_OPTION_ID_CREATE (M4_READ , \ |
| M4WRITER_COMMON, 0x03), /**< File size if the process was ended when we call the method */ |
| M4WRITER_kFileSizeAudioEstimated= M4OSA_OPTION_ID_CREATE (M4_READ ,\ |
| M4WRITER_COMMON, 0x04), /**< File size if the process was ended when we call the |
| method, estimated size for audio */ |
| M4WRITER_kEmbeddedString = M4OSA_OPTION_ID_CREATE (M4_WRITE ,\ |
| M4WRITER_COMMON, 0x05), /**< String embedded at the end of the file(SW - VES) */ |
| M4WRITER_kEmbeddedVersion = M4OSA_OPTION_ID_CREATE (M4_WRITE ,\ |
| M4WRITER_COMMON, 0x06), /**< Version embedded at the end of the file */ |
| M4WRITER_kIntegrationTag = M4OSA_OPTION_ID_CREATE (M4_WRITE ,\ |
| M4WRITER_COMMON, 0x07), /**< String embedded at the end of the file (char[60] |
| for integration purpose) */ |
| M4WRITER_kMaxFileSize = M4OSA_OPTION_ID_CREATE (M4_WRITE , \ |
| M4WRITER_COMMON, 0x08), /**< Maximum file size limitation */ |
| M4WRITER_kMaxFileDuration = M4OSA_OPTION_ID_CREATE (M4_WRITE ,\ |
| M4WRITER_COMMON, 0x09), /**< Maximum file duration limitation */ |
| M4WRITER_kSetFtypBox = M4OSA_OPTION_ID_CREATE (M4_WRITE ,\ |
| M4WRITER_COMMON, 0x0A), /**< Set 'ftyp' atom */ |
| M4WRITER_kMetaData = M4OSA_OPTION_ID_CREATE (M4_WRITE ,\ |
| M4WRITER_COMMON, 0x0B), /**< Additionnal information to set in the file */ |
| M4WRITER_kDSI = M4OSA_OPTION_ID_CREATE (M4_WRITE , \ |
| M4WRITER_COMMON, 0x0C), /**< To set DSI of the file (Decoder specifc info) */ |
| M4WRITER_kJpegReserveFPData = M4OSA_OPTION_ID_CREATE (M4_WRITE ,\ |
| M4WRITER_COMMON, 0x0D), /**< Reserve some space in the file for JPEG fast |
| processing data */ |
| M4WRITER_kJpegSetFPData = M4OSA_OPTION_ID_CREATE (M4_WRITE , \ |
| M4WRITER_COMMON, 0x0E), /**< Write Fast Processing Data in the file*/ |
| /* + CRLV6775 -H.264 trimming */ |
| M4WRITER_kMUL_PPS_SPS = M4OSA_OPTION_ID_CREATE (M4_WRITE , M4WRITER_COMMON, 0x0F) |
| /* - CRLV6775 -H.264 trimming */ |
| } M4WRITER_OptionID; |
| |
| |
| /** |
| ****************************************************************************** |
| * struct M4WRITER_Header |
| * @brief This structure defines the buffer where an header is put. |
| ****************************************************************************** |
| */ |
| typedef struct |
| { |
| M4OSA_MemAddr8 pBuf; /**< Buffer for the header */ |
| M4OSA_UInt32 Size; /**< Size of the data */ |
| } M4WRITER_Header; |
| |
| |
| /** |
| ****************************************************************************** |
| * struct M4WRITER_StreamVideoInfos |
| * @brief This structure defines the specific video stream infos, extension to |
| * M4SYS_StreamDescription. |
| ****************************************************************************** |
| */ |
| typedef struct { |
| M4OSA_UInt32 height; /**< Frame height */ |
| M4OSA_UInt32 width; /**< Frame Width */ |
| M4OSA_Double fps; /**< Targetted framerate of the video */ |
| M4WRITER_Header Header; /**< Sequence header of the video stream, |
| member set to NULL if no header present */ |
| } M4WRITER_StreamVideoInfos; |
| |
| |
| /** |
| ****************************************************************************** |
| * struct M4WRITER_StreamAudioInfos |
| * @brief This structure defines the specific audio stream infos, extension to |
| M4SYS_StreamDescription. |
| ****************************************************************************** |
| */ |
| typedef struct { |
| M4OSA_UInt32 nbSamplesPerSec; /**< Number of Samples per second */ |
| M4OSA_UInt16 nbBitsPerSample; /**< Number of Bits in 1 sample */ |
| M4OSA_UInt16 nbChannels; /**< Number of channels */ |
| M4WRITER_Header Header; /**< Decoder Specific Info of the audiostream, |
| member set to NULL if no DSI present */ |
| } M4WRITER_StreamAudioInfos; |
| |
| |
| /** |
| ****************************************************************************** |
| * enum M4WRITER_Orientation |
| * @brief This enum defines the possible orientation of a frame as described |
| * in the EXIF standard. |
| ****************************************************************************** |
| */ |
| typedef enum |
| { |
| M4WRITER_OrientationUnknown = 0, |
| M4WRITER_OrientationTopLeft, |
| M4WRITER_OrientationTopRight, |
| M4WRITER_OrientationBottomRight, |
| M4WRITER_OrientationBottomLeft, |
| M4WRITER_OrientationLeftTop, |
| M4WRITER_OrientationRightTop, |
| M4WRITER_OrientationRightBottom, |
| M4WRITER_OrientationLeftBottom |
| }M4WRITER_Orientation ; |
| |
| /** |
| ****************************************************************************** |
| * struct M4WRITER_MetaData |
| * @brief This structure defines all the meta data to store in the encoded file. |
| ****************************************************************************** |
| */ |
| typedef struct |
| { |
| M4OSA_Char* Description ; |
| M4OSA_Char* PhoneManufacturer ; |
| M4OSA_Char* PhoneModel ; |
| M4OSA_Char* Artist ; |
| M4OSA_Char* Copyright ; |
| M4OSA_Char* Software ; |
| M4OSA_Char* CreationDate; |
| M4WRITER_Orientation Orientation ; |
| |
| M4OSA_UInt32 Width ; |
| M4OSA_UInt32 Height ; |
| |
| M4OSA_UInt32 ThumbnailWidth ; |
| M4OSA_UInt32 ThumbnailHeight ; |
| M4OSA_Bool ThumbnailPresence ; |
| }M4WRITER_MetaData; |
| |
| |
| typedef void* M4WRITER_Context; |
| |
| typedef M4OSA_ERR (M4WRITER_openWrite) (M4WRITER_Context* hContext,\ |
| void* outputFileDescriptor,\ |
| M4OSA_FileWriterPointer* pFileWriterPointer,\ |
| void* tempFileDescriptor, \ |
| M4OSA_FileReadPointer* pFileReaderPointer); |
| typedef M4OSA_ERR (M4WRITER_addStream) (M4WRITER_Context pContext,\ |
| M4SYS_StreamDescription*streamDescription); |
| typedef M4OSA_ERR (M4WRITER_startWriting) (M4WRITER_Context pContext); |
| typedef M4OSA_ERR (M4WRITER_closeWrite) (M4WRITER_Context pContext); |
| typedef M4OSA_ERR (M4WRITER_setOption) (M4WRITER_Context pContext, \ |
| M4OSA_UInt32 optionID, \ |
| M4OSA_DataOption optionValue); |
| typedef M4OSA_ERR (M4WRITER_getOption) (M4WRITER_Context pContext, \ |
| M4OSA_UInt32 optionID, \ |
| M4OSA_DataOption optionValue); |
| |
| |
| /** |
| ****************************************************************************** |
| * struct M4WRITER_GlobalInterface |
| * @brief Defines all the functions required for a writer shell. |
| ****************************************************************************** |
| */ |
| typedef struct _M4WRITER_GlobalInterface |
| { |
| M4WRITER_openWrite* pFctOpen; |
| M4WRITER_addStream* pFctAddStream; |
| M4WRITER_startWriting* pFctStartWriting; |
| M4WRITER_closeWrite* pFctCloseWrite; |
| M4WRITER_setOption* pFctSetOption; |
| M4WRITER_getOption* pFctGetOption; |
| } M4WRITER_GlobalInterface; |
| |
| typedef M4OSA_ERR M4WRITER_startAU(M4WRITER_Context pContext, M4SYS_StreamID streamID,\ |
| M4SYS_AccessUnit* pAU); |
| typedef M4OSA_ERR M4WRITER_processAU(M4WRITER_Context pContext, M4SYS_StreamID streamID,\ |
| M4SYS_AccessUnit* pAU); |
| |
| /** |
| ****************************************************************************** |
| * struct M4WRITER_DataInterface |
| * @brief Defines all the functions required to write data with a writer shell. |
| ****************************************************************************** |
| */ |
| typedef struct _M4WRITER_DataInterface |
| { |
| M4WRITER_startAU* pStartAU; |
| M4WRITER_processAU* pProcessAU; |
| |
| M4WRITER_Context pWriterContext; |
| |
| } M4WRITER_DataInterface; |
| |
| #ifdef __cplusplus |
| } |
| #endif /* __cplusplus */ |
| |
| #endif /*__M4WRITER_COMMON_H__*/ |
| |