17994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu/* 27994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu* Copyright (c) 2009-2011 Intel Corporation. All rights reserved. 37994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu* 47994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu* Licensed under the Apache License, Version 2.0 (the "License"); 57994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu* you may not use this file except in compliance with the License. 67994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu* You may obtain a copy of the License at 77994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu* 87994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu* http://www.apache.org/licenses/LICENSE-2.0 97994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu* 107994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu* Unless required by applicable law or agreed to in writing, software 117994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu* distributed under the License is distributed on an "AS IS" BASIS, 127994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu* See the License for the specific language governing permissions and 147994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu* limitations under the License. 157994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu*/ 167994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 177994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 187994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu//#define LOG_NDEBUG 0 19bcabe3079546f97c7e2dc72886e55fabaff51848Andy Qiu#define LOG_TAG "OMXVideoDecoder" 2026a110c2a29667599733db5173a751e670b366a5Thierry Strudel#include <wrs_omxil_core/log.h> 217994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu#include "OMXVideoDecoderPAVC.h" 227994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 237994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu// Be sure to have an equal string in VideoDecoderHost.cpp (libmix) 247994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiustatic const char* PAVC_MIME_TYPE = "video/PAVC"; 257994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu#define INVALID_PTS (OMX_S64)-1 267994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 277994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 287994731eb9593e1f2a7d1dade54845753e2a8688Andy QiuOMXVideoDecoderPAVC::OMXVideoDecoderPAVC() { 297994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu LOGV("OMXVideoDecoderPAVC is constructed."); 307994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu mVideoDecoder = createVideoDecoder(PAVC_MIME_TYPE); 317994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu if (!mVideoDecoder) { 327994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu LOGE("createVideoDecoder failed for \"%s\"", PAVC_MIME_TYPE); 337994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu } 347994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 357994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu BuildHandlerList(); 367994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu} 377994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 387994731eb9593e1f2a7d1dade54845753e2a8688Andy QiuOMXVideoDecoderPAVC::~OMXVideoDecoderPAVC() { 397994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu LOGV("OMXVideoDecoderPAVC is destructed."); 407994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu} 417994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 427994731eb9593e1f2a7d1dade54845753e2a8688Andy QiuOMX_ERRORTYPE OMXVideoDecoderPAVC::InitInputPortFormatSpecific(OMX_PARAM_PORTDEFINITIONTYPE *paramPortDefinitionInput) { 437994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu // OMX_PARAM_PORTDEFINITIONTYPE 447994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu paramPortDefinitionInput->nBufferCountActual = INPORT_ACTUAL_BUFFER_COUNT; 457994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu paramPortDefinitionInput->nBufferCountMin = INPORT_MIN_BUFFER_COUNT; 467994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu paramPortDefinitionInput->nBufferSize = INPORT_BUFFER_SIZE; 477994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu paramPortDefinitionInput->format.video.cMIMEType = (OMX_STRING)PAVC_MIME_TYPE; 487994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu paramPortDefinitionInput->format.video.eCompressionFormat = OMX_VIDEO_CodingAVC; 497994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 507994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu // OMX_VIDEO_PARAM_AVCTYPE 517994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu memset(&mParamAvc, 0, sizeof(mParamAvc)); 527994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu SetTypeHeader(&mParamAvc, sizeof(mParamAvc)); 537994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu mParamAvc.nPortIndex = INPORT_INDEX; 547994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu // TODO: check eProfile/eLevel 551bc54a746704bde863a7487b0b50ac675d6eb579xiao mParamAvc.eProfile = OMX_VIDEO_AVCProfileMain; //OMX_VIDEO_AVCProfileBaseline; 567994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu mParamAvc.eLevel = OMX_VIDEO_AVCLevel41; //OMX_VIDEO_AVCLevel1; 577994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 587994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu mCurrentProfile = mParamAvc.eProfile; 597994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu mCurrentLevel = mParamAvc.eLevel; 607994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 617994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu return OMX_ErrorNone; 627994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu} 637994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 647994731eb9593e1f2a7d1dade54845753e2a8688Andy QiuOMX_ERRORTYPE OMXVideoDecoderPAVC::ProcessorInit(void) { 657994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu return OMXVideoDecoderBase::ProcessorInit(); 667994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu} 677994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 687994731eb9593e1f2a7d1dade54845753e2a8688Andy QiuOMX_ERRORTYPE OMXVideoDecoderPAVC::ProcessorDeinit(void) { 697994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu return OMXVideoDecoderBase::ProcessorDeinit(); 707994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu} 717994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 727994731eb9593e1f2a7d1dade54845753e2a8688Andy QiuOMX_ERRORTYPE OMXVideoDecoderPAVC::ProcessorFlush(OMX_U32 portIndex) { 737994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu return OMXVideoDecoderBase::ProcessorFlush(portIndex); 747994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu} 757994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 767994731eb9593e1f2a7d1dade54845753e2a8688Andy QiuOMX_ERRORTYPE OMXVideoDecoderPAVC::ProcessorProcess( 77b2257cdcf3ffd7a4a7dedbe4842185689bcf7fb7xiao OMX_BUFFERHEADERTYPE ***pBuffers, 787994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu buffer_retain_t *retains, 797994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu OMX_U32 numberBuffers) { 807994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 81b2257cdcf3ffd7a4a7dedbe4842185689bcf7fb7xiao return OMXVideoDecoderBase::ProcessorProcess(pBuffers, retains, numberBuffers); 827994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu} 837994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 847994731eb9593e1f2a7d1dade54845753e2a8688Andy QiuOMX_ERRORTYPE OMXVideoDecoderPAVC::PrepareConfigBuffer(VideoConfigBuffer *p) { 857994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu OMX_ERRORTYPE ret; 867994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu ret = OMXVideoDecoderBase::PrepareConfigBuffer(p); 877994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu CHECK_RETURN_VALUE("OMXVideoDecoderBase::PrepareConfigBuffer"); 881bc54a746704bde863a7487b0b50ac675d6eb579xiao p->width = 1920; 891bc54a746704bde863a7487b0b50ac675d6eb579xiao p->height = 1088; 901bc54a746704bde863a7487b0b50ac675d6eb579xiao p->surfaceNumber = 16; 911bc54a746704bde863a7487b0b50ac675d6eb579xiao p->profile = VAProfileH264High; 921bc54a746704bde863a7487b0b50ac675d6eb579xiao p->flag = WANT_SURFACE_PROTECTION | HAS_VA_PROFILE | HAS_SURFACE_NUMBER; 937994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu return OMX_ErrorNone; 947994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu} 957994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 967994731eb9593e1f2a7d1dade54845753e2a8688Andy QiuOMX_ERRORTYPE OMXVideoDecoderPAVC::PrepareDecodeBuffer(OMX_BUFFERHEADERTYPE *buffer, buffer_retain_t *retain, VideoDecodeBuffer *p) { 977994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu OMX_ERRORTYPE ret; 987994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu ret = OMXVideoDecoderBase::PrepareDecodeBuffer(buffer, retain, p); 997994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu CHECK_RETURN_VALUE("OMXVideoDecoderBase::PrepareDecodeBuffer"); 1007994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 1017994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu // OMX_BUFFERFLAG_CODECCONFIG is an optional flag 1027994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu // if flag is set, buffer will only contain codec data. 1037994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu if (buffer->nFlags & OMX_BUFFERFLAG_CODECCONFIG) { 1047994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu LOGV("Received codec data for Protected AVC."); 1057994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu return ret; 1067994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu } 1077994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 1087994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu if (buffer->nFlags & OMX_BUFFERFLAG_EXTRADATA) { 1097994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu p->flag |= HAS_EXTRADATA; 1107994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu } else { 1117994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu LOGW("No extra data found."); 1127994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu } 1137994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu return ret; 1147994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu} 1157994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 1167994731eb9593e1f2a7d1dade54845753e2a8688Andy QiuOMX_ERRORTYPE OMXVideoDecoderPAVC::BuildHandlerList(void) { 1177994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu OMXVideoDecoderBase::BuildHandlerList(); 1187994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu AddHandler(OMX_IndexParamVideoAvc, GetParamVideoAvc, SetParamVideoAvc); 1197994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu AddHandler(OMX_IndexParamVideoProfileLevelQuerySupported, GetVideoProfileLevelQuerySupported, SetVideoProfileLevelQuerySupported); 1207994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu AddHandler(OMX_IndexParamVideoProfileLevelCurrent, GetVideoProfileLevelCurrent, SetVideoProfileLevelCurrent); 1217994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu return OMX_ErrorNone; 1227994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu} 1237994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 1247994731eb9593e1f2a7d1dade54845753e2a8688Andy QiuOMX_ERRORTYPE OMXVideoDecoderPAVC::GetParamVideoAvc(OMX_PTR pStructure) { 1257994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu OMX_ERRORTYPE ret; 1267994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu OMX_VIDEO_PARAM_AVCTYPE *p = (OMX_VIDEO_PARAM_AVCTYPE *)pStructure; 1277994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu CHECK_TYPE_HEADER(p); 1287994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu CHECK_PORT_INDEX(p, INPORT_INDEX); 1297994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 1307994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu memcpy(p, &mParamAvc, sizeof(*p)); 1317994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu return OMX_ErrorNone; 1327994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu} 1337994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 1347994731eb9593e1f2a7d1dade54845753e2a8688Andy QiuOMX_ERRORTYPE OMXVideoDecoderPAVC::SetParamVideoAvc(OMX_PTR pStructure) { 1357994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu OMX_ERRORTYPE ret; 1367994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu OMX_VIDEO_PARAM_AVCTYPE *p = (OMX_VIDEO_PARAM_AVCTYPE *)pStructure; 1377994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu CHECK_TYPE_HEADER(p); 1387994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu CHECK_PORT_INDEX(p, INPORT_INDEX); 1397994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu CHECK_SET_PARAM_STATE(); 1407994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 1417994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu // TODO: do we need to check if port is enabled? 1427994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu // TODO: see SetPortAvcParam implementation - Can we make simple copy???? 1437994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu memcpy(&mParamAvc, p, sizeof(mParamAvc)); 1447994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu return OMX_ErrorNone; 1457994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu} 1467994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 1477994731eb9593e1f2a7d1dade54845753e2a8688Andy QiuOMX_ERRORTYPE OMXVideoDecoderPAVC::GetVideoProfileLevelQuerySupported(OMX_PTR pStructure) { 1487994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu OMX_ERRORTYPE ret; 1497994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu OMX_VIDEO_PARAM_PROFILELEVELTYPE *p = (OMX_VIDEO_PARAM_PROFILELEVELTYPE *)pStructure; 1507994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 1517994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu CHECK_TYPE_HEADER(p); 1527994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu CHECK_PORT_INDEX_RANGE(p); 1537994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 1547994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu if (p->nProfileIndex != 0) { 1557994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu LOGE("No more profile index for GetVideoProfileLevelQuerySupported."); 1567994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu return OMX_ErrorNoMore; 1577994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu } 1587994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu p->eProfile = mParamAvc.eProfile; 1597994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu p->eLevel = mParamAvc.eLevel; 1607994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 1617994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu return OMX_ErrorNone; 1627994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu} 1637994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 1640541f11be2f78b558476772f1f877e140f9d844bywanOMX_ERRORTYPE OMXVideoDecoderPAVC::SetVideoProfileLevelQuerySupported(OMX_PTR) { 1657994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu LOGE("SetVideoProfileLevelQuerySupported is not supported."); 1667994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu return OMX_ErrorUnsupportedSetting; 1677994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu} 1687994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 1697994731eb9593e1f2a7d1dade54845753e2a8688Andy QiuOMX_ERRORTYPE OMXVideoDecoderPAVC::GetVideoProfileLevelCurrent(OMX_PTR pStructure) { 1707994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu OMX_ERRORTYPE ret; 1717994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu OMX_VIDEO_PARAM_PROFILELEVELTYPE *p = (OMX_VIDEO_PARAM_PROFILELEVELTYPE *)pStructure; 1727994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 1737994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu CHECK_TYPE_HEADER(p); 1747994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu CHECK_PORT_INDEX_RANGE(p); 1757994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 1767994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu if (p->nProfileIndex != 0) { 1777994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu LOGE("No more profile index for GetVideoProfileLevelCurrent."); 1787994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu return OMX_ErrorNoMore; 1797994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu } 1807994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 1817994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu p->eProfile = mCurrentProfile; 1827994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu p->eLevel = mCurrentLevel; 1837994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 1847994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu return OMX_ErrorNone; 1857994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu} 1867994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 1877994731eb9593e1f2a7d1dade54845753e2a8688Andy QiuOMX_ERRORTYPE OMXVideoDecoderPAVC::SetVideoProfileLevelCurrent(OMX_PTR pStructure) { 1887994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu OMX_ERRORTYPE ret; 1897994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu OMX_VIDEO_PARAM_PROFILELEVELTYPE *p = (OMX_VIDEO_PARAM_PROFILELEVELTYPE *)pStructure; 1907994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 1917994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu CHECK_TYPE_HEADER(p); 1927994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu CHECK_PORT_INDEX_RANGE(p); 1937994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 1947994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu if (p->nProfileIndex != 0) { 1957994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu LOGE("Invalid profile index for SetVideoProfileLevelCurrent."); 1967994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu return OMX_ErrorBadParameter; 1977994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu } 1987994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 1997994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu mCurrentProfile = (OMX_VIDEO_AVCPROFILETYPE) p->eProfile; 2007994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu mCurrentLevel = (OMX_VIDEO_AVCLEVELTYPE) p->eLevel; 2017994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 2027994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu return OMX_ErrorNone; 2037994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu} 2047994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 2057994731eb9593e1f2a7d1dade54845753e2a8688Andy QiuDECLARE_OMX_COMPONENT("OMX.Intel.VideoDecoder.PAVC", "video_decoder.pavc", OMXVideoDecoderPAVC); 2067994731eb9593e1f2a7d1dade54845753e2a8688Andy Qiu 207