omxvideodectest.c File Reference

#include "omxvideodectest.h"

Go to the source code of this file.

Defines

#define MPEG4_TYPE_SEL   1
#define AVC_TYPE_SEL   2
#define COMPONENT_NAME_BASE   "OMX.st.video_decoder"
#define BASE_ROLE   "video_decoder.avc"
#define COMPONENT_NAME_BASE_LEN   20

Functions

int setPortParameters ()
int find_resolution (char *searchname)
void display_help ()
OMX_ERRORTYPE test_OMX_ComponentNameEnum ()
OMX_ERRORTYPE test_OMX_RoleEnum (OMX_STRING component_name)
OMX_ERRORTYPE test_OMX_ComponentEnumByRole (OMX_STRING role_name)
OMX_ERRORTYPE test_OpenClose (OMX_STRING component_name)
int main (int argc, char **argv)
OMX_ERRORTYPE fb_sinkEventHandler (OMX_OUT OMX_HANDLETYPE hComponent, OMX_OUT OMX_PTR pAppData, OMX_OUT OMX_EVENTTYPE eEvent, OMX_OUT OMX_U32 Data1, OMX_OUT OMX_U32 Data2, OMX_OUT OMX_PTR pEventData)
OMX_ERRORTYPE fb_sinkEmptyBufferDone (OMX_OUT OMX_HANDLETYPE hComponent, OMX_OUT OMX_PTR pAppData, OMX_OUT OMX_BUFFERHEADERTYPE *pBuffer)
OMX_ERRORTYPE colorconvEventHandler (OMX_OUT OMX_HANDLETYPE hComponent, OMX_OUT OMX_PTR pAppData, OMX_OUT OMX_EVENTTYPE eEvent, OMX_OUT OMX_U32 Data1, OMX_OUT OMX_U32 Data2, OMX_OUT OMX_PTR pEventData)
OMX_ERRORTYPE colorconvEmptyBufferDone (OMX_OUT OMX_HANDLETYPE hComponent, OMX_OUT OMX_PTR pAppData, OMX_OUT OMX_BUFFERHEADERTYPE *pBuffer)
OMX_ERRORTYPE colorconvFillBufferDone (OMX_OUT OMX_HANDLETYPE hComponent, OMX_OUT OMX_PTR pAppData, OMX_OUT OMX_BUFFERHEADERTYPE *pBuffer)
OMX_ERRORTYPE videodecEventHandler (OMX_OUT OMX_HANDLETYPE hComponent, OMX_OUT OMX_PTR pAppData, OMX_OUT OMX_EVENTTYPE eEvent, OMX_OUT OMX_U32 Data1, OMX_OUT OMX_U32 Data2, OMX_OUT OMX_PTR pEventData)
OMX_ERRORTYPE videodecEmptyBufferDone (OMX_OUT OMX_HANDLETYPE hComponent, OMX_OUT OMX_PTR pAppData, OMX_OUT OMX_BUFFERHEADERTYPE *pBuffer)
OMX_ERRORTYPE videodecFillBufferDone (OMX_OUT OMX_HANDLETYPE hComponent, OMX_OUT OMX_PTR pAppData, OMX_OUT OMX_BUFFERHEADERTYPE *pBuffer)

Variables

OMX_COLOR_FORMATTYPE COLOR_CONV_OUT_RGB_FORMAT = OMX_COLOR_Format24bitRGB888
appPrivateTypeappPriv
OMX_BUFFERHEADERTYPEpInBuffer1
OMX_BUFFERHEADERTYPEpInBuffer2
OMX_BUFFERHEADERTYPEpOutBuffer1
OMX_BUFFERHEADERTYPEpOutBuffer2
OMX_BUFFERHEADERTYPEpInBufferColorConv1
OMX_BUFFERHEADERTYPEpInBufferColorConv2
OMX_BUFFERHEADERTYPEpOutBufferColorConv1
OMX_BUFFERHEADERTYPEpOutBufferColorConv2
OMX_BUFFERHEADERTYPEpInBufferSink1
OMX_BUFFERHEADERTYPEpInBufferSink2
int buffer_in_size = 2*8192
OMX_U32 buffer_out_size
OMX_U32 outbuf_colorconv_size
OMX_PARAM_PORTDEFINITIONTYPE paramPort
OMX_PARAM_PORTDEFINITIONTYPE omx_colorconvPortDefinition
OMX_PARAM_COMPONENTROLETYPE paramRole
OMX_VIDEO_PARAM_PORTFORMATTYPE omxVideoParam
OMX_CALLBACKTYPE videodeccallbacks
OMX_CALLBACKTYPE colorconv_callbacks
OMX_CALLBACKTYPE fbdev_sink_callbacks
OMX_U32 out_width = 0
OMX_U32 new_out_width = 0
OMX_U32 out_height = 0
OMX_U32 new_out_height = 0
FILE * fd
FILE * outfile
char * input_file
char * output_file
int selectedType = 0
int flagIsOutputEspected
int flagDecodedOutputReceived
int flagInputReceived
int flagIsColorConvRequested
int flagIsSinkRequested
int flagIsFormatRequested
int flagSetupTunnel


Detailed Description

Test application that uses a OpenMAX component, a generic video decoder. The application receives an video stream (.m4v or .264) decoded by a multiple format decoder component. The decoded output is seen by a yuv viewer.

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 omxvideodectest.c.


Define Documentation

#define AVC_TYPE_SEL   2

Definition at line 35 of file omxvideodectest.c.

#define BASE_ROLE   "video_decoder.avc"

Definition at line 37 of file omxvideodectest.c.

#define COMPONENT_NAME_BASE   "OMX.st.video_decoder"

Definition at line 36 of file omxvideodectest.c.

#define COMPONENT_NAME_BASE_LEN   20

Definition at line 38 of file omxvideodectest.c.

#define MPEG4_TYPE_SEL   1

defining global declarations

Definition at line 34 of file omxvideodectest.c.


Function Documentation

OMX_ERRORTYPE colorconvEmptyBufferDone ( OMX_OUT OMX_HANDLETYPE  hComponent,
OMX_OUT OMX_PTR  pAppData,
OMX_OUT OMX_BUFFERHEADERTYPE pBuffer 
)

OMX_ERRORTYPE colorconvEventHandler ( OMX_OUT OMX_HANDLETYPE  hComponent,
OMX_OUT OMX_PTR  pAppData,
OMX_OUT OMX_EVENTTYPE  eEvent,
OMX_OUT OMX_U32  Data1,
OMX_OUT OMX_U32  Data2,
OMX_OUT OMX_PTR  pEventData 
)

OMX_ERRORTYPE colorconvFillBufferDone ( OMX_OUT OMX_HANDLETYPE  hComponent,
OMX_OUT OMX_PTR  pAppData,
OMX_OUT OMX_BUFFERHEADERTYPE pBuffer 
)

if there is no sink component then write buffer content in output file, in non tunneled case else in non tunneled case, call the sink comp handle to process this buffer as its input buffer

Definition at line 1114 of file omxvideodectest.c.

References DEB_LEV_ERR, DEB_LEV_FUNCTION_NAME, DEB_LEV_SIMPLE_SEQ, DEBUG, err, appPrivateType::fbdev_sink_handle, flagIsSinkRequested, flagSetupTunnel, OMX_BUFFERHEADERTYPE::nFilledLen, OMX_BUFFERFLAG_EOS, OMX_EmptyThisBuffer, OMX_ErrorNone, OMX_FillThisBuffer, OMX_TRUE, outfile, and OMX_BUFFERHEADERTYPE::pBuffer.

void display_help (  ) 

help display

Definition at line 230 of file omxvideodectest.c.

OMX_ERRORTYPE fb_sinkEmptyBufferDone ( OMX_OUT OMX_HANDLETYPE  hComponent,
OMX_OUT OMX_PTR  pAppData,
OMX_OUT OMX_BUFFERHEADERTYPE pBuffer 
)

OMX_ERRORTYPE fb_sinkEventHandler ( OMX_OUT OMX_HANDLETYPE  hComponent,
OMX_OUT OMX_PTR  pAppData,
OMX_OUT OMX_EVENTTYPE  eEvent,
OMX_OUT OMX_U32  Data1,
OMX_OUT OMX_U32  Data2,
OMX_OUT OMX_PTR  pEventData 
)

int find_resolution ( char *  searchname  ) 

Try to determine resolution based on filename

Definition at line 200 of file omxvideodectest.c.

References out_height, and out_width.

int main ( int  argc,
char **  argv 
)

input file name check

output file name check

if color converter component is not selected then sink component will not work, even if specified

determine the input file format in case of decoding or color converting

setting input picture width to a default value (vga format) for allocation of video decoder buffers

getting video decoder handle

getting color converter component handle, if specified

getting sink component handle - if reqd'

output buffer size calculation based on input dimension speculation

if tunneling option is given then set up the tunnel between the components

sending command to video decoder component to go to idle state

in tunnel case, change the color conv and sink comp state to idle

if tunneling option is not given then allocate buffers on video decoder output port

sending command to video decoder component to go to executing state

in non tunneled case use the 2nd input buffer for input read and procesing in tunneled case, it will be used afterwards

in tunneled case, disable the video components ports and then set parameters after that, ebnable those ports

this is the signal from port settings change event - wait for the dummy up signal from port settings change event of the video decoder the signal is called in every execution

disable the ports

wait for port disable events to be finished

now set the port characteristics

enable the previously disabled ports

wait for port disable events to be finished

send command to change color onv and sink comp in executing state

activate 2nd input buffer now

state change of all components from executing to idle

sending command to all components to go to loaded state

freeing buffers of color conv and sink component

freeing buffers of video decoder input ports

closing the output file

closing the input file

Definition at line 393 of file omxvideodectest.c.

References AVC_TYPE_SEL, BASE_ROLE, buffer_in_size, buffer_out_size, COLOR_CONV_OUT_RGB_FORMAT, appPrivateType::colorconv_handle, appPrivateType::colorconvEventSem, COMPONENT_NAME_BASE, COMPONENT_NAME_BASE_LEN, OMX_PARAM_COMPONENTROLETYPE::cRole, DEB_LEV_ERR, DEB_LEV_PARAMS, DEB_LEV_SIMPLE_SEQ, DEBUG, appPrivateType::decoderEventSem, DEFAULT_MESSAGES, display_help(), appPrivateType::eofSem, err, appPrivateType::fbdev_sink_handle, appPrivateType::fbdevSinkEventSem, fd, flagDecodedOutputReceived, flagInputReceived, flagIsColorConvRequested, flagIsFormatRequested, flagIsOutputEspected, flagIsSinkRequested, flagSetupTunnel, input_file, MPEG4_TYPE_SEL, OMX_BUFFERHEADERTYPE::nFilledLen, OMX_BUFFERHEADERTYPE::nOffset, OMX_ALL, OMX_AllocateBuffer, OMX_COLOR_Format16bitARGB1555, OMX_COLOR_Format16bitBGR565, OMX_COLOR_Format16bitRGB565, OMX_COLOR_Format24bitBGR888, OMX_COLOR_Format24bitRGB888, OMX_COLOR_Format32bitARGB8888, OMX_COLOR_Format32bitBGRA8888, OMX_CommandPortDisable, OMX_CommandPortEnable, OMX_CommandStateSet, OMX_Deinit(), OMX_EmptyThisBuffer, OMX_ErrorNone, OMX_FillThisBuffer, OMX_FreeBuffer, OMX_FreeHandle(), OMX_GetHandle(), OMX_GetParameter, OMX_IndexParamStandardComponentRole, OMX_Init(), OMX_MAX_STRINGNAME_SIZE, OMX_SendCommand, OMX_SetupTunnel(), OMX_StateExecuting, OMX_StateIdle, OMX_StateLoaded, out_height, out_width, outfile, output_file, OMX_BUFFERHEADERTYPE::pBuffer, selectedType, setHeader(), setPortParameters(), test_OMX_ComponentEnumByRole(), test_OMX_ComponentNameEnum(), test_OMX_RoleEnum(), test_OpenClose(), tsem_down(), tsem_init(), and appPrivateType::videodechandle.

int setPortParameters (  ) 

this function sets the color converter and video sink port characteristics based on the video decoder output port settings

setting the color converter and sink component chararacteristics, if selected - both in tunneled as well as non tunneled case

setting the color conv input port width, height it will be same as the video decoder output port width, height

setting the color converter output width height it will be same as input dimensions

setting the input color format of color converter component it will be same as output yuv color format of the decoder component

setting output RGB color format of the color converter component

if video sink component is selected then set its input port settings accroding to the output port settings of the color converter component

Definition at line 110 of file omxvideodectest.c.

References COLOR_CONV_OUT_RGB_FORMAT, appPrivateType::colorconv_handle, DEB_LEV_ERR, DEB_LEV_SIMPLE_SEQ, DEBUG, OMX_VIDEO_PORTDEFINITIONTYPE::eColorFormat, OMX_VIDEO_PARAM_PORTFORMATTYPE::eColorFormat, err, appPrivateType::fbdev_sink_handle, flagIsColorConvRequested, flagIsSinkRequested, OMX_PARAM_PORTDEFINITIONTYPE::format, new_out_height, new_out_width, OMX_VIDEO_PORTDEFINITIONTYPE::nFrameHeight, OMX_VIDEO_PORTDEFINITIONTYPE::nFrameWidth, OMX_VIDEO_PARAM_PORTFORMATTYPE::nPortIndex, OMX_PARAM_PORTDEFINITIONTYPE::nPortIndex, OMX_ErrorBadParameter, OMX_ErrorNone, OMX_GetParameter, OMX_IndexParamPortDefinition, OMX_IndexParamVideoPortFormat, OMX_SetParameter, setHeader(), OMX_PARAM_PORTDEFINITIONTYPE::video, and appPrivateType::videodechandle.

OMX_ERRORTYPE test_OMX_ComponentEnumByRole ( OMX_STRING  role_name  ) 

OMX_ERRORTYPE test_OMX_ComponentNameEnum (  ) 

OMX_ERRORTYPE test_OMX_RoleEnum ( OMX_STRING  component_name  ) 

OMX_ERRORTYPE test_OpenClose ( OMX_STRING  component_name  ) 

OMX_ERRORTYPE videodecEmptyBufferDone ( OMX_OUT OMX_HANDLETYPE  hComponent,
OMX_OUT OMX_PTR  pAppData,
OMX_OUT OMX_BUFFERHEADERTYPE pBuffer 
)

OMX_ERRORTYPE videodecEventHandler ( OMX_OUT OMX_HANDLETYPE  hComponent,
OMX_OUT OMX_PTR  pAppData,
OMX_OUT OMX_EVENTTYPE  eEvent,
OMX_OUT OMX_U32  Data1,
OMX_OUT OMX_U32  Data2,
OMX_OUT OMX_PTR  pEventData 
)

Callbacks implementation of the video decoder component

before setting port parameters , first check if tunneled case if so, then disable the output port of video decoder and generate dummy up signal, so that in main thread the color conv and sink comp ports are disabled and port parameter settings changes are done properly

in non tunneled case, if color converter and sink component are selected then set their port parameters according to input tream characteristics and send command to them to go to idle state and executing state

in non tunneled case, using buffers in color conv input port, allocated by video dec component output port

allocating buffers in the color converter compoennt output port

Definition at line 1157 of file omxvideodectest.c.

References buffer_out_size, appPrivateType::colorconv_handle, appPrivateType::colorconvEventSem, DEB_LEV_ERR, DEB_LEV_SIMPLE_SEQ, DEBUG, appPrivateType::decoderEventSem, appPrivateType::eofSem, err, appPrivateType::fbdev_sink_handle, appPrivateType::fbdevSinkEventSem, flagIsColorConvRequested, flagIsSinkRequested, flagSetupTunnel, OMX_PARAM_PORTDEFINITIONTYPE::nBufferSize, OMX_PARAM_PORTDEFINITIONTYPE::nPortIndex, OMX_AllocateBuffer, OMX_BUFFERFLAG_EOS, OMX_CommandPortDisable, OMX_CommandPortEnable, OMX_CommandStateSet, OMX_ErrorNone, OMX_EventBufferFlag, OMX_EventCmdComplete, OMX_EventPortSettingsChanged, OMX_FillThisBuffer, OMX_GetParameter, OMX_IndexParamPortDefinition, OMX_SendCommand, OMX_StateExecuting, OMX_StateIdle, OMX_StateInvalid, OMX_StateLoaded, OMX_StatePause, OMX_StateWaitForResources, OMX_UseBuffer, outbuf_colorconv_size, OMX_BUFFERHEADERTYPE::pBuffer, setHeader(), setPortParameters(), tsem_down(), tsem_up(), appPrivateType::videodechandle, and appPrivateType::videoDecoderEventSem.

OMX_ERRORTYPE videodecFillBufferDone ( OMX_OUT OMX_HANDLETYPE  hComponent,
OMX_OUT OMX_PTR  pAppData,
OMX_OUT OMX_BUFFERHEADERTYPE pBuffer 
)

if there is color conv component in processing state then send this buffer, in non tunneled case else in non tunneled case, write the output buffer contents in the specified output file

Definition at line 1332 of file omxvideodectest.c.

References appPrivateType::colorconv_handle, DEB_LEV_ERR, DEB_LEV_FUNCTION_NAME, DEBUG, err, flagDecodedOutputReceived, flagIsColorConvRequested, flagIsDisplayRequested, flagSetupTunnel, OMX_BUFFERHEADERTYPE::nFilledLen, OMX_BUFFERFLAG_EOS, OMX_EmptyThisBuffer, OMX_ErrorNone, OMX_FillThisBuffer, OMX_GetState, OMX_StateExecuting, OMX_StatePause, OMX_TRUE, outfile, outfileVideo, and OMX_BUFFERHEADERTYPE::pBuffer.


Variable Documentation

Definition at line 43 of file omxvideodectest.c.

int buffer_in_size = 2*8192

Definition at line 51 of file omxvideodectest.c.

Definition at line 52 of file omxvideodectest.c.

OMX_COLOR_FORMATTYPE COLOR_CONV_OUT_RGB_FORMAT = OMX_COLOR_Format24bitRGB888

global variables

Definition at line 41 of file omxvideodectest.c.

Initial value:

 {
    .EventHandler = colorconvEventHandler,
    .EmptyBufferDone = colorconvEmptyBufferDone,
    .FillBufferDone = colorconvFillBufferDone
  }

Definition at line 66 of file omxvideodectest.c.

Initial value:

 {
    .EventHandler = fb_sinkEventHandler,
    .EmptyBufferDone = fb_sinkEmptyBufferDone,
    .FillBufferDone = NULL
  }

Definition at line 72 of file omxvideodectest.c.

FILE* fd

Definition at line 82 of file omxvideodectest.c.

Definition at line 87 of file omxvideodectest.c.

Definition at line 88 of file omxvideodectest.c.

Definition at line 89 of file omxvideodectest.c.

Definition at line 91 of file omxvideodectest.c.

Definition at line 86 of file omxvideodectest.c.

Referenced by main().

Definition at line 90 of file omxvideodectest.c.

Definition at line 92 of file omxvideodectest.c.

char* input_file

Definition at line 83 of file omxvideodectest.c.

Definition at line 80 of file omxvideodectest.c.

Definition at line 79 of file omxvideodectest.c.

Definition at line 56 of file omxvideodectest.c.

Definition at line 58 of file omxvideodectest.c.

Definition at line 80 of file omxvideodectest.c.

Definition at line 79 of file omxvideodectest.c.

Definition at line 53 of file omxvideodectest.c.

FILE * outfile

Definition at line 82 of file omxvideodectest.c.

char * output_file

Definition at line 83 of file omxvideodectest.c.

Definition at line 55 of file omxvideodectest.c.

Definition at line 57 of file omxvideodectest.c.

used with video decoder

Definition at line 46 of file omxvideodectest.c.

Definition at line 46 of file omxvideodectest.c.

used with color converter if selected

Definition at line 48 of file omxvideodectest.c.

Definition at line 48 of file omxvideodectest.c.

Definition at line 49 of file omxvideodectest.c.

Definition at line 49 of file omxvideodectest.c.

Definition at line 46 of file omxvideodectest.c.

Definition at line 46 of file omxvideodectest.c.

Definition at line 48 of file omxvideodectest.c.

Definition at line 48 of file omxvideodectest.c.

int selectedType = 0

Definition at line 84 of file omxvideodectest.c.

Initial value:

 { 
    .EventHandler = videodecEventHandler,
    .EmptyBufferDone = videodecEmptyBufferDone,
    .FillBufferDone = videodecFillBufferDone
  }

Definition at line 60 of file omxvideodectest.c.


Generated for OpenMAX Bellagio rel. 0.3.5-svn by  doxygen 1.5.1
SourceForge.net Logo