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; }
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; }