- decChannelLayout =
- (mFrame->channel_layout && av_frame_get_channels(mFrame) == av_get_channel_layout_nb_channels(mFrame->channel_layout)) ?
- mFrame->channel_layout : av_get_default_channel_layout(av_frame_get_channels(mFrame));
-
- if (mFrame->format != mAudioSrcFmt
- || decChannelLayout != mAudioSrcChannelLayout
- || mFrame->sample_rate != mAudioSrcFreq) {
- if (mSwrCtx)
- swr_free(&mSwrCtx);
- mSwrCtx = swr_alloc_set_opts(NULL,
- mAudioTgtChannelLayout, mAudioTgtFmt, mAudioTgtFreq,
- decChannelLayout, (enum AVSampleFormat)mFrame->format, mFrame->sample_rate,
- 0, NULL);
- if (!mSwrCtx || swr_init(mSwrCtx) < 0) {
- ALOGE("Cannot create sample rate converter for conversion "
- "of %d Hz %s %d channels to %d Hz %s %d channels!",
- mFrame->sample_rate,
- av_get_sample_fmt_name((enum AVSampleFormat)mFrame->format),
- av_frame_get_channels(mFrame),
- mAudioTgtFreq,
- av_get_sample_fmt_name(mAudioTgtFmt),
- mAudioTgtChannels);
- notify(OMX_EventError, OMX_ErrorUndefined, 0, NULL);
- mSignalledError = true;
- return;
- }
-
- char src_layout_name[1024] = {0};
- char tgt_layout_name[1024] = {0};
- av_get_channel_layout_string(src_layout_name, sizeof(src_layout_name),
- mCtx->channels, decChannelLayout);
- av_get_channel_layout_string(tgt_layout_name, sizeof(tgt_layout_name),
- mAudioTgtChannels, mAudioTgtChannelLayout);
- ALOGI("Create sample rate converter for conversion "
- "of %d Hz %s %d channels(%s) "
- "to %d Hz %s %d channels(%s)!",
- mFrame->sample_rate,
- av_get_sample_fmt_name((enum AVSampleFormat)mFrame->format),
- av_frame_get_channels(mFrame),
- src_layout_name,
- mAudioTgtFreq,
- av_get_sample_fmt_name(mAudioTgtFmt),
- mAudioTgtChannels,
- tgt_layout_name);
-
- mAudioSrcChannelLayout = decChannelLayout;
- mAudioSrcChannels = av_frame_get_channels(mFrame);
- mAudioSrcFreq = mFrame->sample_rate;
- mAudioSrcFmt = (enum AVSampleFormat)mFrame->format;
- }