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