예제 #1
0
OMX_ERRORTYPE LibavAudioDec::AudioFilterGetParameter(
        OMX_INDEXTYPE nParamIndex,
        OMX_PTR pComponentParameterStructure)
{
    OMX_ERRORTYPE ret = OMX_ErrorNone;

    switch ((OMX_U32)nParamIndex) {
        case OMX_IndexParamStandardComponentRole:
            fsl_osal_strcpy((OMX_STRING)((OMX_PARAM_COMPONENTROLETYPE*) \
                        pComponentParameterStructure)->cRole,(OMX_STRING)cRole);
            break;
        case OMX_IndexParamAudioAdpcm:
        {
	        OMX_AUDIO_PARAM_ADPCMMODETYPE *pAdpcmMode;
            pAdpcmMode = (OMX_AUDIO_PARAM_ADPCMMODETYPE*)pComponentParameterStructure;
            OMX_CHECK_STRUCT(pAdpcmMode, OMX_AUDIO_PARAM_ADPCMMODETYPE, ret);

            if(ret != OMX_ErrorNone)
                break;

            fsl_osal_memcpy(pAdpcmMode, &(InputMode.AdpcmMode), sizeof(OMX_AUDIO_PARAM_ADPCMMODETYPE));
            CodingType = OMX_AUDIO_CodingADPCM;
            fsl_osal_strcpy((fsl_osal_char*)name, LIBAV_COMP_NAME_ADPCMDEC);
        }
            break;
        case OMX_IndexParamAudioOpus:
        {
            OMX_AUDIO_PARAM_OPUSTYPE *pOpusMode;
            pOpusMode = (OMX_AUDIO_PARAM_OPUSTYPE*)pComponentParameterStructure;
            OMX_CHECK_STRUCT(pOpusMode, OMX_AUDIO_PARAM_OPUSTYPE, ret);
            if(ret != OMX_ErrorNone)
                break;
            fsl_osal_memcpy(pOpusMode, &(InputMode.OpusMode), sizeof(OMX_AUDIO_PARAM_OPUSTYPE));
            CodingType = (OMX_AUDIO_CODINGTYPE)OMX_AUDIO_CodingOPUS;
            fsl_osal_strcpy((fsl_osal_char*)name, LIBAV_COMP_NAME_OPUSDEC);
        }
            break;
        case OMX_IndexParamAudioApe:
        {
            OMX_AUDIO_PARAM_APETYPE *pApeMode;
            pApeMode = (OMX_AUDIO_PARAM_APETYPE*)pComponentParameterStructure;
            OMX_CHECK_STRUCT(pApeMode, OMX_AUDIO_PARAM_APETYPE, ret);
            if(ret != OMX_ErrorNone)
                break;
            fsl_osal_memcpy(pApeMode, &(InputMode.ApeMode), sizeof(OMX_AUDIO_PARAM_APETYPE));
            CodingType = (OMX_AUDIO_CODINGTYPE)OMX_AUDIO_CodingAPE;
            fsl_osal_strcpy((fsl_osal_char*)name, LIBAV_COMP_NAME_APEDEC);
        }
            break;
        default:
            ret = OMX_ErrorUnsupportedIndex;
            break;
    }

    return ret;
}
예제 #2
0
OMX_ERRORTYPE  LibavAudioDec::SetRoleFormat(OMX_STRING role)
{
    OMX_ERRORTYPE ret = OMX_ErrorNone;

    if(fsl_osal_strcmp(role, "audio_decoder.adpcm") == 0) {
        CodingType = OMX_AUDIO_CodingADPCM;
        fsl_osal_strcpy((fsl_osal_char*)name, LIBAV_COMP_NAME_ADPCMDEC);
        OMX_INIT_STRUCT(&(InputMode.PcmMode), OMX_AUDIO_PARAM_PCMMODETYPE);
    }
	else if(fsl_osal_strcmp(role, "audio_decoder.g711") == 0) {
        CodingType = OMX_AUDIO_CodingG711;
        fsl_osal_strcpy((fsl_osal_char*)name, LIBAV_COMP_NAME_G711DEC);
        OMX_INIT_STRUCT(&(InputMode.AdpcmMode), OMX_AUDIO_PARAM_ADPCMMODETYPE)
    }
예제 #3
0
파일: AC3ToIEC937.cpp 프로젝트: FreeSrk/omx
AC3ToIEC937::AC3ToIEC937()
{
    fsl_osal_strcpy((fsl_osal_char*)name, "OMX.Freescale.std.audio_processor.ac3toiec937.sw-based");
    ComponentVersion.s.nVersionMajor = 0x0;
    ComponentVersion.s.nVersionMinor = 0x1;
    ComponentVersion.s.nRevision = 0x0;
    ComponentVersion.s.nStep = 0x0;
    role_cnt = 1;
    role[0] = (OMX_STRING)"audio_processor.ac3toiec937";
    bInContext = OMX_FALSE;
    nInBufferSize = IN_BUFFER_SIZE;
    nOutBufferSize = OUT_BUFFER_SIZE;
    eInCodingType = (OMX_AUDIO_CODINGTYPE)OMX_AUDIO_CodingAC3;
    OMX_INIT_STRUCT(&Ac3Type, OMX_AUDIO_PARAM_AC3TYPE);
    Ac3Type.nPortIndex = AUDIO_FILTER_INPUT_PORT;
    Ac3Type.nChannels = 2;
    Ac3Type.nSampleRate = 48000;
    Ac3Type.nBitRate = 128*1024;
    bFirstFrame = OMX_TRUE;
    bSwitchWord = OMX_FALSE;

    OMX_INIT_STRUCT(&PcmMode, OMX_AUDIO_PARAM_PCMMODETYPE);
    PcmMode.nPortIndex = AUDIO_FILTER_OUTPUT_PORT;
    PcmMode.nChannels = 2;
    PcmMode.nSamplingRate = 48000;
    PcmMode.nBitPerSample = 16;
    PcmMode.bInterleaved = OMX_TRUE;
    PcmMode.eNumData = OMX_NumericalDataSigned;
    PcmMode.ePCMMode = OMX_AUDIO_PCMModeLinear;
    PcmMode.eEndian = OMX_EndianLittle;
    PcmMode.eChannelMapping[0] = OMX_AUDIO_ChannelNone;
}
예제 #4
0
파일: AacDec.cpp 프로젝트: FreeSrk/omx
AacDec::AacDec()
{
    fsl_osal_strcpy((fsl_osal_char*)name, "OMX.Freescale.std.audio_decoder.aac.sw-based");
    ComponentVersion.s.nVersionMajor = 0x0;
    ComponentVersion.s.nVersionMinor = 0x1;
    ComponentVersion.s.nRevision = 0x0;
    ComponentVersion.s.nStep = 0x0;
    role_cnt = 1;
    role[0] = (OMX_STRING)"audio_decoder.aac";
    codingType = OMX_AUDIO_CodingAAC;
    nPushModeInputLen = AAC_PUSH_MODE_LEN;
    outputPortBufferSize = 6*AACD_FRAME_SIZE*2*4;
    decoderLibName = "lib_aacd_wrap_arm12_elinux_android.so";
    optionaDecoderlLibName = "lib_aacplusd_wrap_arm12_elinux_android.so";

    OMX_INIT_STRUCT(&AacType, OMX_AUDIO_PARAM_AACPROFILETYPE);
    AacType.nPortIndex = AUDIO_FILTER_INPUT_PORT;
    AacType.nChannels = 2;
    AacType.nSampleRate = 44100;
    AacType.nAudioBandWidth = 0;
    AacType.nAACERtools = OMX_AUDIO_AACERNone;
    AacType.eAACProfile = OMX_AUDIO_AACObjectLC;
    AacType.eChannelMode = OMX_AUDIO_ChannelModeStereo;
    AacType.eAACStreamFormat = OMX_AUDIO_AACStreamFormatMax;
    LOG_DEBUG("Unia -> AAC");
    bFrameCheck = OMX_FALSE;
}
예제 #5
0
파일: WmaDec.cpp 프로젝트: FreeSrk/omx
WmaDec::WmaDec()
{
    fsl_osal_strcpy((fsl_osal_char*)name, "OMX.Freescale.std.audio_decoder.wma.sw-based");
    ComponentVersion.s.nVersionMajor = 0x0;
    ComponentVersion.s.nVersionMinor = 0x1;
    ComponentVersion.s.nRevision = 0x0;
    ComponentVersion.s.nStep = 0x0;
    role_cnt = 1;
    role[0] = (OMX_STRING)"audio_decoder.wma";
    codingType = OMX_AUDIO_CodingWMA;
    outputPortBufferSize = WMA_OUTPUT_PORT_SIZE;
    decoderLibName = "lib_wma10d_wrap_arm12_elinux_android.so";

    OMX_INIT_STRUCT(&WmaType, OMX_AUDIO_PARAM_WMATYPE);
    OMX_INIT_STRUCT(&WmaTypeExt, OMX_AUDIO_PARAM_WMATYPE_EXT);

    WmaType.nPortIndex = AUDIO_FILTER_INPUT_PORT;
    WmaType.nChannels = 2;
    WmaType.nSamplingRate = 44100;
    WmaType.nBitRate = 64000;
    WmaType.eFormat = OMX_AUDIO_WMAFormat9;

    WmaTypeExt.nPortIndex = AUDIO_FILTER_INPUT_PORT;
    WmaTypeExt.nBitsPerSample = 16;

    LOG_DEBUG("Unia -> WMA");

}
fsl_osal_ptr ShareLibarayMgr::load(fsl_osal_char *lib_name) 
{
	LIB_INFO *pLibInfo;

	if (lib_name == NULL)
	{
		LOG_ERROR("Library name is NULL.\n");
		return NULL;
	}

	/** Check if the library already loaded */
	for (fsl_osal_s32 i = 0; ; i ++)
	{
		pLibInfo = lib_info.GetNode(i);
		if(pLibInfo == NULL)
		{
			break;
		}

		if (!fsl_osal_strcmp(pLibInfo->lib_name, lib_name))
		{
			pLibInfo->refCount ++;
			LOG_DEBUG("The reference times of the lib: %s is: %d\n", pLibInfo->lib_name, \
					pLibInfo->refCount);
			return pLibInfo->hlib;
		}
	}

    const fsl_osal_char *cError;

	fsl_osal_ptr pLibHandle = dlopen(lib_name, RTLD_NOW);
	if (pLibHandle == NULL)
	{
		LOG_WARNING("Can't open library: %s\n", lib_name);
		printf("Can't open library: %s\n", lib_name);
        cError = dlerror();
        LOG_WARNING("%s\n", cError);
        printf("%s\n", cError);
		return NULL;
	}

	pLibInfo = FSL_NEW(LIB_INFO, ());
	if (pLibInfo == NULL)
	{
		LOG_ERROR("New LIB_INFO fail.\n");
		return NULL;
	}
	
	fsl_osal_strcpy(pLibInfo->lib_name, lib_name);
	pLibInfo->hlib = pLibHandle;
	pLibInfo->refCount = 1;

	lib_info.Add(pLibInfo);

	return pLibHandle;
}
Mp3Parser::Mp3Parser()
{
	fsl_osal_strcpy((fsl_osal_char*)name, "OMX.Freescale.std.parser.mp3.sw-based");
	ComponentVersion.s.nVersionMajor = 0x1;
	ComponentVersion.s.nVersionMinor = 0x1;
	ComponentVersion.s.nRevision = 0x2;
	ComponentVersion.s.nStep = 0x0;
	role_cnt = 1;
	role[0] = (OMX_STRING)"parser.mp3";
	bInContext = OMX_FALSE;
	bNeedSendCodecConfig = OMX_FALSE;
}
FileWrite::FileWrite()
{
    fsl_osal_strcpy((fsl_osal_char*)name, "OMX.Freescale.std.component.file_write.sw-based");
    ComponentVersion.s.nVersionMajor = 0x0;
    ComponentVersion.s.nVersionMinor = 0x1;
    ComponentVersion.s.nRevision = 0x0;
    ComponentVersion.s.nStep = 0x0;
    role_cnt = 1;
    role[0] = "component.file_write";
    bInContext = OMX_FALSE;
    nPorts = 2;
    pAudioBufferHdr = pVideoBufferHdr = NULL; 
}
예제 #9
0
Clock::Clock()
{
    fsl_osal_strcpy((fsl_osal_char*)name, "OMX.Freescale.std.clocksrc.sw-based");
    ComponentVersion.s.nVersionMajor = 0x0;
    ComponentVersion.s.nVersionMinor = 0x1;
    ComponentVersion.s.nRevision = 0x0;
    ComponentVersion.s.nStep = 0x0;
    role_cnt = 1;
    role[0] = (OMX_STRING)"clocksrc";
    bInContext = OMX_FALSE;
    nPorts = PORT_NUM;
    Scale = 1*Q16_SHIFT;
}
예제 #10
0
파일: WmvDecoder.cpp 프로젝트: FreeSrk/omx
WmvDecoder::WmvDecoder()
{
    fsl_osal_strcpy((fsl_osal_char*)name, "OMX.Freescale.std.video_decoder.wmv.sw-based");
    ComponentVersion.s.nVersionMajor = 0x0;
    ComponentVersion.s.nVersionMinor = 0x1;
    ComponentVersion.s.nRevision = 0x0;
    ComponentVersion.s.nStep = 0x0;
    role_cnt = 1;
    role[0] = (OMX_STRING)"video_decoder.wmv";

    fsl_osal_memset(&sInFmt, 0, sizeof(OMX_VIDEO_PORTDEFINITIONTYPE));
    sInFmt.nFrameWidth = 320;
    sInFmt.nFrameHeight = 240;
    sInFmt.xFramerate = 30 * Q16_SHIFT;
    sInFmt.eColorFormat = OMX_COLOR_FormatUnused;
    sInFmt.eCompressionFormat = OMX_VIDEO_CodingWMV;

	nInPortFormatCnt = 0;
	nOutPortFormatCnt = 1;
	eOutPortPormat[0] = OMX_COLOR_FormatYUV420Planar;

    sOutFmt.nFrameWidth = 320;
    sOutFmt.nFrameHeight = 240;
    sOutFmt.eColorFormat = OMX_COLOR_FormatYUV420Planar;
    sOutFmt.eCompressionFormat = OMX_VIDEO_CodingUnused;

    bFilterSupportPartilInput = OMX_FALSE;
    nInBufferCnt = 1;
    nInBufferSize = 128*1024;
    nOutBufferCnt = 1;
    nOutBufferSize = sOutFmt.nFrameWidth * sOutFmt.nFrameHeight * pxlfmt2bpp(sOutFmt.eColorFormat) / 8;

    pInBuffer = pOutBuffer = NULL;
    nInputSize = nInputOffset = 0;
    bInEos = OMX_FALSE;
    nFrameSize = 0;;
    pFrameBuffer = NULL;

    OMX_INIT_STRUCT(&sOutCrop, OMX_CONFIG_RECTTYPE);
    sOutCrop.nPortIndex = OUT_PORT;
    sOutCrop.nLeft = sOutCrop.nTop = 0;
    sOutCrop.nWidth = sInFmt.nFrameWidth;
    sOutCrop.nHeight = sInFmt.nFrameHeight;

    fsl_osal_memset(&sDecObj, 0, sizeof(sWmv9DecObjectType));
    eFormat = E_WMV9D_COMP_FMT_UNSUPPORTED;
    eWmvDecState = WMVDEC_LOADED;
    hLib = NULL;
    libMgr  = NULL;
    nTop = nLeft = 0;
}
예제 #11
0
AacEnc::AacEnc()
{
	fsl_osal_strcpy((fsl_osal_char*)name, "OMX.Freescale.std.audio_encoder.aac.sw-based");
	ComponentVersion.s.nVersionMajor = 0x1;
	ComponentVersion.s.nVersionMinor = 0x1;
	ComponentVersion.s.nRevision = 0x2;
	ComponentVersion.s.nStep = 0x0;
	role_cnt = 1;
	role[0] = (OMX_STRING)"audio_encoder.aac";
	bInContext = OMX_FALSE;
	nPorts = AUDIO_FILTER_PORT_NUMBER;
	nPushModeInputLen = AACE_INPUT_BUFFER_SIZE * 4;
	nRingBufferScale = RING_BUFFER_SCALE;
}
예제 #12
0
WmaDec::WmaDec()
{
    fsl_osal_strcpy((fsl_osal_char*)name, "OMX.Freescale.std.audio_decoder.wma.sw-based");
    ComponentVersion.s.nVersionMajor = 0x1;
    ComponentVersion.s.nVersionMinor = 0x1;
    ComponentVersion.s.nRevision = 0x2;
    ComponentVersion.s.nStep = 0x0;
    role_cnt = 1;
    role[0] = (OMX_STRING)"audio_decoder.wma";
    bInContext = OMX_FALSE;
    nPorts = AUDIO_FILTER_PORT_NUMBER;
	nPushModeInputLen = WMA10D_MAXDATAREQUESTED;
	nRingBufferScale = RING_BUFFER_SCALE;
}
OMX_ERRORTYPE Mp3Parser::SetSource(OMX_PARAM_CONTENTURITYPE *Content, OMX_PARAM_CONTENTPIPETYPE *Pipe)
{
	OMX_ERRORTYPE ret = OMX_ErrorNone;

	hPipe =(CP_PIPETYPE* ) (((OMX_PARAM_CONTENTPIPETYPE *)Pipe)->hPipe);

	OMX_PARAM_CONTENTURITYPE * pContentURI = (OMX_PARAM_CONTENTURITYPE *)Content;
	nMediaNameLen = fsl_osal_strlen((const char *)&(pContentURI->contentURI)) + 1;

	pMediaName = (OMX_S8 *)FSL_MALLOC(nMediaNameLen);
	if (!pMediaName)
	{
		return OMX_ErrorInsufficientResources;
	}
	fsl_osal_strcpy((char *)pMediaName, (const char *)&(pContentURI->contentURI));
	if(fsl_osal_strncmp((fsl_osal_char*)pMediaName, "http://", 7) == 0
	        || fsl_osal_strncmp((fsl_osal_char*)pMediaName, "rtsp://", 7) == 0)
		isStreamingSource = OMX_TRUE;

	bGetMetadata = OMX_TRUE;
	fsl_osal_strcpy((fsl_osal_char*)sCompRole.cRole, role[0]);

	return ret;
}
예제 #14
0
OMX_ERRORTYPE State::DoGetComponentVersion(
        OMX_STRING pComponentName, 
        OMX_VERSIONTYPE* pComponentVersion, 
        OMX_VERSIONTYPE* pSpecVersion, 
        OMX_UUIDTYPE* pComponentUUID) 
{
    if(pComponentName == NULL || pComponentVersion == NULL
            || pSpecVersion == NULL || pComponentUUID == NULL)
        return OMX_ErrorBadParameter;

    fsl_osal_strcpy(pComponentName, (OMX_STRING)(base->name));
    fsl_osal_memcpy(pComponentVersion, &(base->ComponentVersion), sizeof(OMX_VERSIONTYPE));
    fsl_osal_memcpy(pSpecVersion, &(base->SpecVersion), sizeof(OMX_VERSIONTYPE));

    return OMX_ErrorNone;
}
VideoProcessorComponent::VideoProcessorComponent()
{
    fsl_osal_strcpy((fsl_osal_char*)name, VP_NAME);
    ComponentVersion.s.nVersionMajor = 0x1;
    ComponentVersion.s.nVersionMinor = 0x1;
    ComponentVersion.s.nRevision = 0x2;
    ComponentVersion.s.nStep = 0x0;
    bInContext = OMX_FALSE;
    nPorts = 2;

    bStarted = OMX_FALSE;
    bReset = OMX_FALSE;
    bFlush = OMX_FALSE;
    bUseEGLImage = OMX_FALSE;
    fsl_osal_memset(&ipu_handle,0,sizeof(ipu_lib_handle_t));
    fsl_osal_memset(&sInParam,0,sizeof(ipu_lib_input_param_t));
    fsl_osal_memset(&sOutParam,0,sizeof(ipu_lib_output_param_t));
}
IpulibRender::IpulibRender()
{
	OMX_U32 i;

	fsl_osal_strcpy((fsl_osal_char*)name, "OMX.Freescale.std.video_render.ipulib.sw-based");
	ComponentVersion.s.nVersionMajor = 0x0;
	ComponentVersion.s.nVersionMinor = 0x1;
	ComponentVersion.s.nRevision = 0x0;
	ComponentVersion.s.nStep = 0x0;
	role_cnt = 1;
	role[0] = (OMX_STRING)"video_render.ipulib";

	nFrameBufferMin = 2;
	nFrameBufferActual = 2;
	TunneledSupplierType = OMX_BufferSupplyInput;
	fsl_osal_memset(&sVideoFmt, 0, sizeof(OMX_VIDEO_PORTDEFINITIONTYPE));
	sVideoFmt.nFrameWidth = 320;
	sVideoFmt.nFrameHeight = 240;
	sVideoFmt.eColorFormat = OMX_COLOR_FormatYUV420Planar;
	sVideoFmt.eCompressionFormat = OMX_VIDEO_CodingUnused;

	eRotation = ROTATE_NONE;
	OMX_INIT_STRUCT(&sRectIn, OMX_CONFIG_RECTTYPE);
	sRectIn.nWidth = sVideoFmt.nFrameWidth;
	sRectIn.nHeight = sVideoFmt.nFrameHeight;
	sRectIn.nTop = 0;
	sRectIn.nLeft = 0;
	OMX_INIT_STRUCT(&sRectOut, OMX_CONFIG_RECTTYPE);
	sRectOut.nWidth = DISP_WIDTH;
	sRectOut.nHeight = DISP_HEIGHT;
	sRectOut.nTop = 0;
	sRectOut.nLeft = 0;

	bInitDev = OMX_FALSE;
	lock = NULL;
	pShowFrame = NULL;
	nFrameLen = 0;
	bSuspend = OMX_FALSE;
	fsl_osal_memset(&ipu_handle, 0, sizeof(ipu_lib_handle_t));

	OMX_INIT_STRUCT(&sCapture, OMX_CONFIG_CAPTUREFRAME);
	sCapture.eType = CAP_NONE;
}
예제 #17
0
파일: Ac3Dec.cpp 프로젝트: FreeSrk/omx
Ac3Dec::Ac3Dec()
{
    fsl_osal_strcpy((fsl_osal_char*)name, "OMX.Freescale.std.audio_decoder.ac3.sw-based");
    ComponentVersion.s.nVersionMajor = 0x0;
    ComponentVersion.s.nVersionMinor = 0x1;
    ComponentVersion.s.nRevision = 0x0;
    ComponentVersion.s.nStep = 0x0;
    role_cnt = 1;
    role[0] = (OMX_STRING)"audio_decoder.ac3";
    codingType = OMX_AUDIO_CodingAC3;
    nPushModeInputLen = AC3_PUSH_MODE_LEN;
    outputPortBufferSize = 256*6*6*sizeof(int32);
    decoderLibName = "lib_ac3d_wrap_arm11_elinux_android.so";
    OMX_INIT_STRUCT(&Ac3Type, OMX_AUDIO_PARAM_AC3TYPE);
    Ac3Type.nPortIndex = AUDIO_FILTER_INPUT_PORT;
    Ac3Type.nChannels = 2;
    Ac3Type.nSampleRate = 44100;
    LOG_DEBUG("Unia -> AC3");
}
예제 #18
0
Mp3Dec::Mp3Dec()
{
    fsl_osal_strcpy((fsl_osal_char*)name, "OMX.Freescale.std.audio_decoder.mp3.sw-based");
    ComponentVersion.s.nVersionMajor = 0x0;
    ComponentVersion.s.nVersionMinor = 0x1;
    ComponentVersion.s.nRevision = 0x0;
    ComponentVersion.s.nStep = 0x0;
    role_cnt = 1;
    role[0] = (OMX_STRING)"audio_decoder.mp3";
    codingType = OMX_AUDIO_CodingMP3;
    nPushModeInputLen = MP3_PUSH_MODE_LEN;
    outputPortBufferSize = MP3D_FRAME_SIZE* 2*2;

    decoderLibName = "lib_mp3d_wrap_arm12_elinux_android.so";
    OMX_INIT_STRUCT(&Mp3Type, OMX_AUDIO_PARAM_MP3TYPE);
    Mp3Type.nPortIndex = AUDIO_FILTER_INPUT_PORT;
    Mp3Type.nChannels = 2;
    Mp3Type.nSampleRate = 44100;
    Mp3Type.eChannelMode = OMX_AUDIO_ChannelModeStereo;
    Mp3Type.eFormat = OMX_AUDIO_MP3StreamFormatMP1Layer3;
    LOG_DEBUG("Unia -> MP3");

}
V4lRender::V4lRender()
{
	OMX_U32 i;

	fsl_osal_strcpy((fsl_osal_char*)name, "OMX.Freescale.std.video_render.v4l.sw-based");
	ComponentVersion.s.nVersionMajor = 0x0;
	ComponentVersion.s.nVersionMinor = 0x1;
	ComponentVersion.s.nRevision = 0x0;
	ComponentVersion.s.nStep = 0x0;
	role_cnt = 1;
	role[0] = "video_render.v4l";

	nFrameBufferMin = 1;
	nFrameBufferActual = 1;
	nFrameBuffer = nFrameBufferActual;
	TunneledSupplierType = OMX_BufferSupplyInput;
	fsl_osal_memset(&sVideoFmt, 0, sizeof(OMX_VIDEO_PORTDEFINITIONTYPE));
	sVideoFmt.nFrameWidth = 320;
	sVideoFmt.nFrameHeight = 240;
	sVideoFmt.eColorFormat = OMX_COLOR_FormatYUV420Planar;
	sVideoFmt.eCompressionFormat = OMX_VIDEO_CodingUnused;

	eRotation = ROTATE_NONE;
	OMX_INIT_STRUCT(&sRectIn, OMX_CONFIG_RECTTYPE);
	sRectIn.nWidth = sVideoFmt.nFrameWidth;
	sRectIn.nHeight = sVideoFmt.nFrameHeight;
	sRectIn.nTop = 0;
	sRectIn.nLeft = 0;
	OMX_INIT_STRUCT(&sRectOut, OMX_CONFIG_RECTTYPE);
	sRectOut.nWidth = DISP_WIDTH;
	sRectOut.nHeight = DISP_HEIGHT;
	sRectOut.nTop = 0;
	sRectOut.nLeft = 0;

	for(i=0; i<MAX_PORT_BUFFER; i++)
		fsl_osal_memset(&fb_data[i], 0, sizeof(FB_DATA));
	for(i=0; i<MAX_V4L_BUFFER; i++)
	{
		fsl_osal_memset(&v4lbufs[i], 0, sizeof(struct v4l2_buffer));
		BufferHdrs[i] = NULL;
	}

	device = 0;
	bStreamOn = OMX_FALSE;
	bFrameBufferInit = OMX_FALSE;
	nAllocating = 0;
	nQueuedBuffer = 0;
	nRenderFrames = 0;
	lock = NULL;

	OMX_INIT_STRUCT(&sCapture, OMX_CONFIG_CAPTUREFRAME);
	sCapture.eType = CAP_NONE;
	EnqueueBufferIdx = -1;

	OMX_INIT_STRUCT(&sOutputMode, OMX_CONFIG_OUTPUTMODE);
	sOutputMode.bTv = OMX_FALSE;
	sOutputMode.eFbLayer = LAYER_NONE;
	sOutputMode.eTvMode = MODE_NONE;
	bInTransitState = OMX_FALSE;
	bV4lNewApi	=v4l_new_version();
#ifdef USING_DUMMY_WORKAROUND
	bDummyValid=OMX_FALSE;
	bFlushState	=OMX_FALSE;//OMX_TRUE;
#endif
}
List<REG_ENTRY> *RegistryAnalyser::GetNextEntry()
{
	fsl_osal_char symbol;
	efsl_osal_bool bSkip = E_FSL_OSAL_FALSE;
	fsl_osal_char symbolBuffer[ITEM_VALUE_LEN] = {0}, *pStrSeg;
	efsl_osal_bool EntryFounded = E_FSL_OSAL_FALSE;
	fsl_osal_s32 symbolCnt = 0;
	efsl_osal_return_type_t ret;
	REG_ENTRY *pRegEntry;

	if (pfile == NULL)
	{
		LOG_ERROR("No file to read.\n");
		return &RegList;
	}


	/** Remove previous entry */
	RemoveEntry();
	
	while (BufferDataLen - UseOffset > 0 || FileReadEnd == E_FSL_OSAL_FALSE)
	{
		if (BufferDataLen - UseOffset == 0)
		{
			ret = fsl_osal_fread(readBuffer, FILE_READ_SIZE, pfile, &BufferDataLen);
			if (ret != E_FSL_OSAL_SUCCESS && ret != E_FSL_OSAL_EOF)
			{
				LOG_ERROR("file read error.");
				return &RegList;
			}

			if (BufferDataLen < FILE_READ_SIZE)
			{
				FileReadEnd = E_FSL_OSAL_TRUE;
			}

			UseOffset = 0;
		}
		
		symbol = readBuffer[UseOffset];
		UseOffset ++;

		if (bSkip == E_FSL_OSAL_TRUE)
		{
			if (symbol == '\n')
			{
				bSkip = E_FSL_OSAL_FALSE;
			}
		}
		else
		{
			if (symbol == '#')
			{
				bSkip = E_FSL_OSAL_TRUE;
			}
			else if (symbol == '\t'
					|| symbol == ' '
					|| symbol == '\n'
					|| symbol == '\r')
			{
			}
			else if (symbol == '@')
			{
				EntryFounded = E_FSL_OSAL_TRUE;
			}
			else if (symbol == '$')
			{
				break;
			}
			else if (symbol == ';')
			{
				fsl_osal_char *pLast = NULL;
				if (symbolCnt != 0 && ((pStrSeg = fsl_osal_strtok_r(symbolBuffer, "=", &pLast)) != NULL))
				{
					pRegEntry = FSL_NEW(REG_ENTRY, ());
					fsl_osal_memset(pRegEntry, 0, sizeof(REG_ENTRY));
					fsl_osal_strcpy(pRegEntry->name, pStrSeg);
					pStrSeg = fsl_osal_strtok_r(NULL, "=", &pLast);
					fsl_osal_strcpy(pRegEntry->value, pStrSeg);
					fsl_osal_memset(symbolBuffer, 0, ITEM_VALUE_LEN);
					symbolCnt = 0;
					RegList.Add(pRegEntry);
				}
			}
			else
			{
				if (EntryFounded == E_FSL_OSAL_TRUE)