#include <OMX_Types.h>
#include <OMX_Component.h>
#include <OMX_Core.h>
#include <pthread.h>
#include <stdlib.h>
#include <string.h>
#include <omx_base_filter.h>
#include <mad.h>
Go to the source code of this file.
Copyright (C) 2007 STMicroelectronics Copyright (C) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
$Date$ Revision $Rev$ Author $Author$
Definition in file omx_maddec_component.h.
#define AUDIO_DEC_BASE_NAME "OMX.st.audio_decoder" |
Definition at line 45 of file omx_maddec_component.h.
#define AUDIO_DEC_MP3_NAME "OMX.st.audio_decoder.mp3.mad" |
Definition at line 46 of file omx_maddec_component.h.
#define AUDIO_DEC_MP3_ROLE "mad_decoder.mp3" |
Definition at line 47 of file omx_maddec_component.h.
#define omx_maddec_component_PrivateType_FIELDS |
Mp3Dec mad component private structure.
Definition at line 52 of file omx_maddec_component.h.
OMX_ERRORTYPE omx_mad_decoder_MessageHandler | ( | OMX_COMPONENTTYPE * | openmaxStandComp, | |
internalRequestMessageType * | message | |||
) |
message handling of mad decoder
Execute the base message handling
Definition at line 729 of file omx_maddec_component.c.
References DEB_LEV_ERR, DEB_LEV_FULL_SEQ, DEB_LEV_SIMPLE_SEQ, DEBUG, err, internalRequestMessageType::messageParam, internalRequestMessageType::messageType, omx_base_component_MessageHandler(), OMX_CommandStateSet, OMX_ErrorNone, OMX_ErrorNotReady, OMX_FALSE, omx_maddec_component_Deinit(), omx_maddec_component_Init(), omx_maddec_component_madLibDeInit(), omx_maddec_component_madLibInit(), OMX_StateExecuting, OMX_StateIdle, OMX_StateLoaded, OMX_TRUE, and OMX_COMPONENTTYPE::pComponentPrivate.
Referenced by omx_maddec_component_Constructor().
void omx_maddec_component_BufferMgmtCallback | ( | OMX_COMPONENTTYPE * | openmaxStandComp, | |
OMX_BUFFERHEADERTYPE * | inputbuffer, | |||
OMX_BUFFERHEADERTYPE * | outputbuffer | |||
) |
This function is the buffer management callback function for MP3 decoding is used to process the input buffer and provide one output buffer
inputbuffer | is the input buffer containing the input MP3 content | |
outputbuffer | is the output buffer on which the output pcm content will be written |
first copy TEMP_BUF_COPY_SPACE bytes of new input buffer to add with temporary buffer content
this flag setting disables the CRC check
if consumed is already set, it's from the resync higher up, so we need to use that value instead. Otherwise, recalculate from mad's consumption
if consumed is already set, it's from the resync higher up, so we need to use that value instead. Otherwise, recalculate from mad's consumption
if consumed is already set, it's from the resync higher up, so we need to use that value instead. Otherwise, recalculate from mad's consumption
Definition at line 360 of file omx_maddec_component.c.
References DEB_LEV_ERR, DEB_LEV_FULL_SEQ, DEB_LEV_SIMPLE_SEQ, DEBUG, MIN, OMX_BUFFERHEADERTYPE::nFilledLen, OMX_BUFFERHEADERTYPE::nOffset, OMX_AUDIO_CodingMP3, OMX_EventPortSettingsChanged, OMX_BUFFERHEADERTYPE::pBuffer, and OMX_COMPONENTTYPE::pComponentPrivate.
Referenced by omx_maddec_component_Constructor().
OMX_ERRORTYPE omx_maddec_component_Constructor | ( | OMX_COMPONENTTYPE * | openmaxStandComp, | |
OMX_STRING | cComponentName | |||
) |
The Constructor
cComponentName | name of the component to be constructed |
we could create our own port structures here fixme maybe the base class could use a "port factory" function pointer?
Domain specific section for the ports.
first we set the parameter common to both formats parameters related to input port which does not depend upon input audio format
Allocate Ports and call port constructor.
parameters related to input port
parameters related to output port
settings of output port audio format - pcm
now it's time to know the audio coding type of the component
initialise the semaphore to be used for mad decoder access synchronization
general configuration irrespective of any audio formats setting values of other fields of omx_maddec_component_Private structure
initialising mad structures
Definition at line 75 of file omx_maddec_component.c.
References OMX_PARAM_PORTDEFINITIONTYPE::audio, AUDIO_DEC_BASE_NAME, AUDIO_DEC_MP3_NAME, base_audio_port_Constructor(), OMX_AUDIO_PORTDEFINITIONTYPE::cMIMEType, DEB_LEV_FUNCTION_NAME, DEB_LEV_SIMPLE_SEQ, DEBUG, DEFAULT_IN_BUFFER_SIZE, DEFAULT_OUT_BUFFER_SIZE, OMX_AUDIO_PARAM_PORTFORMATTYPE::eEncoding, OMX_AUDIO_PORTDEFINITIONTYPE::eEncoding, err, OMX_PARAM_PORTDEFINITIONTYPE::format, OMX_COMPONENTTYPE::GetParameter, MAX_COMPONENT_MADDEC, OMX_PARAM_PORTDEFINITIONTYPE::nBufferSize, OMX_AUDIO_ChannelLF, OMX_AUDIO_ChannelModeStereo, OMX_AUDIO_ChannelRF, OMX_AUDIO_CodingMP3, OMX_AUDIO_CodingPCM, OMX_AUDIO_CodingUnused, OMX_AUDIO_MP3StreamFormatMP1Layer3, OMX_AUDIO_PCMModeLinear, omx_base_filter_Constructor(), OMX_BASE_FILTER_INPUTPORT_INDEX, OMX_BASE_FILTER_OUTPUTPORT_INDEX, OMX_EndianLittle, OMX_ErrorInsufficientResources, OMX_ErrorInvalidComponentName, OMX_ErrorNone, OMX_FALSE, omx_mad_decoder_MessageHandler(), omx_maddec_component_BufferMgmtCallback(), omx_maddec_component_Destructor(), omx_maddec_component_GetParameter(), omx_maddec_component_SetParameter(), OMX_NumericalDataSigned, OMX_TRUE, OMX_COMPONENTTYPE::pComponentPrivate, omx_base_audio_PortType::sAudioParam, setHeader(), OMX_COMPONENTTYPE::SetParameter, omx_base_audio_PortType::sPortParam, and tsem_init().
Referenced by omx_component_library_Setup().
OMX_ERRORTYPE omx_maddec_component_Deinit | ( | OMX_COMPONENTTYPE * | openmaxStandComp | ) |
The Deinitialization function
Definition at line 302 of file omx_maddec_component.c.
References DEB_LEV_SIMPLE_SEQ, DEBUG, err, OMX_ErrorNone, OMX_FALSE, omx_maddec_component_madLibDeInit(), and OMX_COMPONENTTYPE::pComponentPrivate.
Referenced by omx_mad_decoder_MessageHandler().
OMX_ERRORTYPE omx_maddec_component_Destructor | ( | OMX_COMPONENTTYPE * | openmaxStandComp | ) |
The destructor
freeing mad decoder structures
Definition at line 235 of file omx_maddec_component.c.
References DEB_LEV_FUNCTION_NAME, DEBUG, omx_base_filter_Destructor(), OMX_ErrorNone, OMX_COMPONENTTYPE::pComponentPrivate, and tsem_deinit().
Referenced by omx_maddec_component_Constructor().
OMX_ERRORTYPE omx_maddec_component_GetParameter | ( | OMX_IN OMX_HANDLETYPE | hComponent, | |
OMX_IN OMX_INDEXTYPE | nParamIndex, | |||
OMX_INOUT OMX_PTR | ComponentParameterStructure | |||
) |
this function gets the parameters regarding audio formats and index
Definition at line 648 of file omx_maddec_component.c.
References AUDIO_DEC_MP3_ROLE, checkHeader(), OMX_PARAM_COMPONENTROLETYPE::cRole, DEB_LEV_SIMPLE_SEQ, DEBUG, err, OMX_AUDIO_PARAM_MP3TYPE::nPortIndex, OMX_AUDIO_PARAM_PCMMODETYPE::nPortIndex, OMX_AUDIO_PARAM_PORTFORMATTYPE::nPortIndex, OMX_AUDIO_CodingMP3, omx_base_component_GetParameter(), OMX_ErrorBadParameter, OMX_ErrorBadPortIndex, OMX_ErrorNone, OMX_IndexParamAudioInit, OMX_IndexParamAudioMp3, OMX_IndexParamAudioPcm, OMX_IndexParamAudioPortFormat, OMX_IndexParamStandardComponentRole, OMX_COMPONENTTYPE::pComponentPrivate, and omx_base_audio_PortType::sAudioParam.
Referenced by omx_maddec_component_Constructor().
OMX_ERRORTYPE omx_maddec_component_Init | ( | OMX_COMPONENTTYPE * | openmaxStandComp | ) |
The Initialization function
initializing omx_maddec_component_Private->temporary_buffer with 2k memory space
Definition at line 281 of file omx_maddec_component.c.
References DEFAULT_IN_BUFFER_SIZE, err, OMX_ErrorNone, and OMX_COMPONENTTYPE::pComponentPrivate.
Referenced by omx_mad_decoder_MessageHandler().
void omx_maddec_component_SetInternalParameters | ( | OMX_COMPONENTTYPE * | openmaxStandComp | ) |
this function sets some inetrnal parameters to the input port depending upon the input audio format
setting port & private fields according to MP3 audio format values
Definition at line 205 of file omx_maddec_component.c.
References OMX_AUDIO_PARAM_PORTFORMATTYPE::eEncoding, OMX_AUDIO_PARAM_PORTFORMATTYPE::nIndex, OMX_AUDIO_PARAM_PORTFORMATTYPE::nPortIndex, OMX_AUDIO_ChannelModeStereo, OMX_AUDIO_CodingMP3, OMX_AUDIO_MP3StreamFormatMP1Layer3, OMX_BASE_FILTER_INPUTPORT_INDEX, OMX_COMPONENTTYPE::pComponentPrivate, omx_base_audio_PortType::sAudioParam, and setHeader().
Referenced by omx_maddec_component_SetParameter().
OMX_ERRORTYPE omx_maddec_component_SetParameter | ( | OMX_IN OMX_HANDLETYPE | hComponent, | |
OMX_IN OMX_INDEXTYPE | nParamIndex, | |||
OMX_IN OMX_PTR | ComponentParameterStructure | |||
) |
this function sets the parameter values regarding audio format & index
Definition at line 564 of file omx_maddec_component.c.
References AUDIO_DEC_MP3_ROLE, OMX_PARAM_COMPONENTROLETYPE::cRole, DEB_LEV_ERR, DEB_LEV_SIMPLE_SEQ, DEBUG, err, OMX_AUDIO_PARAM_MP3TYPE::nPortIndex, OMX_AUDIO_PARAM_PCMMODETYPE::nPortIndex, OMX_AUDIO_PARAM_PORTFORMATTYPE::nPortIndex, OMX_AUDIO_CodingMP3, omx_base_component_ParameterSanityCheck(), omx_base_component_SetParameter(), OMX_ErrorBadParameter, OMX_ErrorBadPortIndex, OMX_ErrorNone, OMX_IndexParamAudioMp3, OMX_IndexParamAudioPcm, OMX_IndexParamAudioPortFormat, OMX_IndexParamStandardComponentRole, omx_maddec_component_SetInternalParameters(), OMX_COMPONENTTYPE::pComponentPrivate, and omx_base_audio_PortType::sAudioParam.
Referenced by omx_maddec_component_Constructor().