| /* |
| * 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 M4PTO3GPP_InternalTypes.h |
| * @brief Picture to 3gpp Service internal definitions |
| * @note This file contains all enum and types not visible to the external world. |
| ****************************************************************************** |
| */ |
| |
| |
| #ifndef __M4PTO3GPP_INTERNALTYPES_H__ |
| #define __M4PTO3GPP_INTERNALTYPES_H__ |
| |
| #define M4PTO3GPP_VERSION_MAJOR 3 |
| #define M4PTO3GPP_VERSION_MINOR 0 |
| #define M4PTO3GPP_VERSION_REVISION 6 |
| |
| /** |
| * M4PTO3GPP public API and types */ |
| #include "M4PTO3GPP_API.h" |
| #include "M4_Utils.h" |
| |
| /** |
| * Internally used modules */ |
| |
| #include "M4WRITER_common.h" /* Write 3GPP file */ |
| #include "M4READER_Common.h" /* Read AMR file */ |
| #include "M4ENCODER_common.h" |
| |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /** |
| ****************************************************************************** |
| * enum M4PTO3GPP_States |
| * @brief Main state machine of the M4PTO3GPP. |
| ****************************************************************************** |
| */ |
| typedef enum |
| { |
| M4PTO3GPP_kState_CREATED = 0, /**< M4PTO3GPP_Init has been called */ |
| M4PTO3GPP_kState_OPENED = 1, /**< M4PTO3GPP_Open has been called */ |
| M4PTO3GPP_kState_READY = 2, /**< Step can be called */ |
| M4PTO3GPP_kState_FINISHED = 3, /**< Transcoding is finished */ |
| M4PTO3GPP_kState_CLOSED = 4 /**< Output file has been created */ |
| } |
| M4PTO3GPP_States; |
| |
| /** |
| ****************************************************************************** |
| * enum M4PTO3GPP_StreamState |
| * @brief State of a media stream encoding (audio or video). |
| ****************************************************************************** |
| */ |
| typedef enum |
| { |
| M4PTO3GPP_kStreamState_NOSTREAM = 0, /**< No stream present */ |
| M4PTO3GPP_kStreamState_STARTED = 1, /**< The stream encoding is in progress */ |
| M4PTO3GPP_kStreamState_FINISHED = 2 /**< The stream has finished encoding */ |
| } |
| M4PTO3GPP_StreamState; |
| |
| /* |
| * Definition of max AU size */ |
| #define M4PTO3GPP_VIDEO_MIN_COMPRESSION_RATIO 0.8F /**< Max AU size will be 0.8 times the |
| YUV4:2:0 frame size */ |
| #define M4PTO3GPP_VIDEO_AU_SIZE_TO_CHUNCK_SIZE_RATIO 1.2F /**< Max chunk size will be 1.2 times |
| the max AU size */ |
| #define M4PTO3GPP_AUDIO_MAX_AU_SIZE 1000 /**< AAC max AU size seems to be |
| about 850 bytes */ |
| #define M4PTO3GPP_AUDIO_MAX_CHUNK_SIZE 5000 |
| |
| /** |
| ****************************************************************************** |
| * enum anonymous enum |
| * @brief enum to keep track of the encoder state |
| ****************************************************************************** |
| */ |
| enum |
| { |
| M4PTO3GPP_kNoEncoder, |
| M4PTO3GPP_kEncoderClosed, |
| M4PTO3GPP_kEncoderStopped, |
| M4PTO3GPP_kEncoderRunning |
| }; |
| |
| /** |
| ****************************************************************************** |
| * structure M4PTO3GPP_InternalContext |
| * @brief This structure defines the M4PTO3GPP context (private) |
| * @note This structure is used for all M4PTO3GPP calls to store the context |
| ****************************************************************************** |
| */ |
| typedef struct |
| { |
| /** |
| * M4PTO3GPP main variables */ |
| M4PTO3GPP_States m_State; /**< M4PTO3GPP internal state */ |
| M4PTO3GPP_Params m_Params; /**< M4PTO3GPP parameters, set by the user */ |
| M4PTO3GPP_StreamState m_VideoState; /**< State of the video encoding */ |
| M4PTO3GPP_StreamState m_AudioState; /**< State of the audio encoding */ |
| |
| /** |
| * OSAL file read/write functions */ |
| M4OSA_FileReadPointer* pOsalFileRead; /**< OSAL file read functions, |
| to be provided by user */ |
| M4OSA_FileWriterPointer* pOsalFileWrite; /**< OSAL file write functions, |
| to be provided by user */ |
| |
| /** |
| * Reader stuff */ |
| M4_AccessUnit* m_pReaderAudioAU; /**< Read audio access unit */ |
| M4_AudioStreamHandler* m_pReaderAudioStream;/**< Description of the read audio stream */ |
| |
| /** |
| * Writer stuff */ |
| M4SYS_AccessUnit m_WriterVideoAU; /**< Written video access unit */ |
| M4SYS_AccessUnit m_WriterAudioAU; /**< Written audio access unit */ |
| M4ENCODER_Header* m_pEncoderHeader; /**< Sequence header returned by the |
| encoder at encoder create (if any) */ |
| M4SYS_StreamDescription* m_pWriterVideoStream; /**< Description of the written |
| video stream */ |
| M4SYS_StreamDescription* m_pWriterAudioStream; /**< Description of the written |
| audio stream */ |
| M4WRITER_StreamVideoInfos* m_pWriterVideoStreamInfo; /**< Video properties of the written |
| video stream */ |
| M4WRITER_StreamAudioInfos* m_pWriterAudioStreamInfo; /**< Audio properties of the written |
| audio stream */ |
| |
| /** |
| * Contexts of the used modules */ |
| M4OSA_Void* m_pAudioReaderContext; /**< Context of the audio reader module*/ |
| M4OSA_Void* m_p3gpWriterContext; /**< Context of the 3GP writer module */ |
| M4OSA_Void* m_pMp4EncoderContext; /**< Mp4 encoder context */ |
| M4OSA_UInt32 m_eEncoderState; |
| |
| /** |
| * Reader Interfaces */ |
| M4READER_GlobalInterface* m_pReaderGlobInt; /**< Reader common interface, global part */ |
| M4READER_DataInterface* m_pReaderDataInt; /**< Reader common interface, data part */ |
| |
| /** |
| * Writer Interfaces */ |
| M4WRITER_GlobalInterface* m_pWriterGlobInt; /**< Writer common interface, global part */ |
| M4WRITER_DataInterface* m_pWriterDataInt; /**< Writer common interface, data part */ |
| |
| /** |
| * Encoder Interfaces */ |
| M4ENCODER_GlobalInterface* m_pEncoderInt; /**< Encoder common interface */ |
| M4OSA_Void* m_pEncoderExternalAPI; |
| M4OSA_Void* m_pEncoderUserData; |
| |
| /** |
| * */ |
| M4VIFI_ImagePlane* pSavedPlane; |
| M4OSA_UInt32 uiSavedDuration; |
| |
| /** |
| * Video rate control stuff */ |
| M4_MediaTime m_dLastVideoRegulCts; /**< Last time (CTS) the video bitrate |
| regulation has been called */ |
| M4_MediaTime m_mtCts; /**< Current video cts */ |
| M4_MediaTime m_mtNextCts; /**< Next video CTS to transcode */ |
| M4_MediaTime m_mtAudioCts; /**< Current audio cts */ |
| M4_MediaTime m_AudioOffSet; /**< Audio Offset to add to the cts in loop mode*/ |
| M4_MediaTime m_PrevAudioCts; /**< Previous audio cts for AAC looping */ |
| M4_MediaTime m_DeltaAudioCts; /**< Delta audio cts for AAC looping */ |
| M4OSA_UInt32 m_CurrentFileSize; /**< Current Output file size */ |
| M4OSA_UInt32 m_MaxFileSize; /**< Max Output file size */ |
| M4OSA_Bool m_IsLastPicture; /**< A boolean that signals to the encoder that |
| this is the last frame to be encoded*/ |
| M4OSA_Bool m_bLastInternalCallBack; |
| M4OSA_UInt32 m_NbCurrentFrame; /**< Index of the current YUV frame encoded */ |
| |
| /** |
| * Audio padding mode */ |
| M4OSA_Bool m_bAudioPaddingSilence; /**< A boolean that signals that audio |
| AU will be padded by silence */ |
| } M4PTO3GPP_InternalContext; |
| |
| |
| |
| /** |
| ****************************************************************************** |
| * M4OSA_ERR M4PTO3GPP_applyVPP(M4VPP_Context pContext, M4VIFI_ImagePlane* pPlaneIn, |
| * M4VIFI_ImagePlane* pPlaneOut) |
| * @brief Call an external callback to get the picture to encode |
| * @note It is called by the video encoder |
| * @param pContext (IN) VPP context, which actually is the M4PTO3GPP |
| * internal context in our case |
| * @param pPlaneIn (IN) Contains the image |
| * @param pPlaneOut (IN/OUT) Pointer to an array of 3 planes that will contain the |
| * output YUV420 image read with the m_pPictureCallbackFct |
| * @return M4NO_ERROR: No error |
| * @return Any error returned by an underlaying module |
| ****************************************************************************** |
| */ |
| M4OSA_ERR M4PTO3GPP_applyVPP(M4VPP_Context pContext, M4VIFI_ImagePlane* pPlaneIn, |
| M4VIFI_ImagePlane* pPlaneOut); |
| |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* __M4PTO3GPP_INTERNALTYPES_H__ */ |
| |