OMX_ERRORTYPE UniaDecoder::ResetParameterWhenOutputChange()
{
    UniAcodecOutputPCMFormat outputValue;
    OMX_S32 value = 0;

    if(ACODEC_SUCCESS == IDecoder->GetParameter(uniaHandle,UNIA_OUTPUT_PCM_FORMAT,(UniACodecParameter*)&outputValue)){
        if(outputValue.samplerate == 0 || outputValue.channels == 0 || outputValue.depth == 0){
            LOG_ERROR("ResetParameterWhenOutputChange HAS 0");
            return OMX_ErrorBadParameter;
        }

        PcmMode.nSamplingRate = outputValue.samplerate;
        PcmMode.nChannels = outputValue.channels;
        PcmMode.nBitPerSample = outputValue.depth;
        PcmMode.bInterleaved = (OMX_BOOL)outputValue.interleave;

        #ifndef OMX_STEREO_OUTPUT
        if(PcmMode.nChannels > 2){
            MapOutputLayoutChannel(&outputValue);
        }
        #endif

        LOG_DEBUG("OUTPUT CHANGED channel=%d,layout=%d,%d,%d,%d,%d,%d",PcmMode.nChannels,
            PcmMode.eChannelMapping[0],PcmMode.eChannelMapping[1],PcmMode.eChannelMapping[2],
            PcmMode.eChannelMapping[3],PcmMode.eChannelMapping[4],PcmMode.eChannelMapping[5]);
    }

    value = 0;
    if(ACODEC_SUCCESS == IDecoder->GetParameter(uniaHandle,UNIA_SAMPLERATE,(UniACodecParameter*)&value)){
        UniaDecoderSetParameter(UNIA_SAMPLERATE,value);
    }

    value = 0;
    if(ACODEC_SUCCESS == IDecoder->GetParameter(uniaHandle,UNIA_CHANNEL,(UniACodecParameter*)&value)){
        UniaDecoderSetParameter(UNIA_CHANNEL,value);
    }

    value = 0;
    if(ACODEC_SUCCESS == IDecoder->GetParameter(uniaHandle,UNIA_BITRATE,(UniACodecParameter*)&value)){
        UniaDecoderSetParameter(UNIA_BITRATE,value);
    }

    value = 0;
    if(ACODEC_SUCCESS == IDecoder->GetParameter(uniaHandle,UNIA_DEPTH,(UniACodecParameter*)&value)){
        UniaDecoderSetParameter(UNIA_DEPTH,value);
    }
    LOG_DEBUG("ResetParameterWhenOutputChange nSamplingRate=%d,nChannels=%d",PcmMode.nSamplingRate,PcmMode.nChannels);

    return OMX_ErrorNone;
}
Пример #2
0
OMX_ERRORTYPE UniaDecoder::ResetParameterWhenOutputChange()
{
    UniAcodecOutputPCMFormat outputValue;
    OMX_S32 value = 0;

    if(ACODEC_SUCCESS == IDecoder->GetParameter(uniaHandle,UNIA_OUTPUT_PCM_FORMAT,(UniACodecParameter*)&outputValue)){
        if(outputValue.samplerate == 0 || outputValue.channels == 0 || outputValue.depth == 0){
            LOG_ERROR("ResetParameterWhenOutputChange HAS 0 sample rate=%d,channel=%d,depth=%d",
                outputValue.samplerate,outputValue.channels,outputValue.depth);
            return OMX_ErrorBadParameter;
        }

        if(PcmMode.nSamplingRate != outputValue.samplerate || PcmMode.nChannels != outputValue.channels){
            bSendEvent = OMX_TRUE;
            LOG_DEBUG("bSendEvent 1");
        }else if(!bSendFirstPortSettingChanged){
            bSendFirstPortSettingChanged = OMX_TRUE;
            bSendEvent = OMX_FALSE;
            LOG_DEBUG("do not send event");
        }else{
            LOG_DEBUG("bSendEvent 2");
            bSendEvent = OMX_TRUE;
        }

        PcmMode.nSamplingRate = outputValue.samplerate;
        PcmMode.nChannels = outputValue.channels;
        nOutputBitPerSample = PcmMode.nBitPerSample = outputValue.depth;
        PcmMode.bInterleaved = (OMX_BOOL)outputValue.interleave;

        #ifndef OMX_STEREO_OUTPUT
        if(PcmMode.nChannels > 2){
            MapOutputLayoutChannel(&outputValue);
        }
        #endif

        LOG_DEBUG("OUTPUT CHANGED channel=%d,layout=%d,%d,%d,%d,%d,%d,%d,%d",PcmMode.nChannels,
            PcmMode.eChannelMapping[0],PcmMode.eChannelMapping[1],PcmMode.eChannelMapping[2],
            PcmMode.eChannelMapping[3],PcmMode.eChannelMapping[4],PcmMode.eChannelMapping[5],
            PcmMode.eChannelMapping[6],PcmMode.eChannelMapping[7]);
    }

    value = 0;
    if(ACODEC_SUCCESS == IDecoder->GetParameter(uniaHandle,UNIA_SAMPLERATE,(UniACodecParameter*)&value)){
        UniaDecoderSetParameter(UNIA_SAMPLERATE,value);
    }

    value = 0;
    if(ACODEC_SUCCESS == IDecoder->GetParameter(uniaHandle,UNIA_CHANNEL,(UniACodecParameter*)&value)){
        UniaDecoderSetParameter(UNIA_CHANNEL,value);
    }

    value = 0;
    if(ACODEC_SUCCESS == IDecoder->GetParameter(uniaHandle,UNIA_BITRATE,(UniACodecParameter*)&value)){
        UniaDecoderSetParameter(UNIA_BITRATE,value);
    }

    value = 0;
    if(ACODEC_SUCCESS == IDecoder->GetParameter(uniaHandle,UNIA_DEPTH,(UniACodecParameter*)&value)){
        if(value > 0)
            UniaDecoderSetParameter(UNIA_DEPTH,value);
    }
    LOG_DEBUG("ResetParameterWhenOutputChange nSamplingRate=%d,nChannels=%d",PcmMode.nSamplingRate,PcmMode.nChannels);

    return OMX_ErrorNone;
}