On May 18, 2013, at 1:11 PM, Brad O'Hearne <[email protected]> wrote:
> I have the following audio use-case:
>
> audio capture -> resample captured audio to destination format for encoding
> -> encode audio -> stream audio
>
> I have developed an app which has worked decently well for fairly common
> sample rates (44100, 48000). However, I came across a sample rate of 16000
> which is breaking the app. The problem stems from the calculation of the
> number of audio samples in the destination data exceeding the codec context's
> frame size.
>
> In the resampling_audio.c example, there it shows the following means to
> calculate the destination number of samples:
>
> dst_nb_samples = av_rescale_rnd(swr_get_delay(swr_ctx, src_rate) +
> src_nb_samples, dst_rate, src_rate,
> AV_ROUND_UP);
>
> Here are the values for these variables:
>
> src_rate = 16000
> src_nb_samples = 512
> dst_rate = 44100
>
> and the calculated value:
>
> dst_nb_samples = 1412
>
> However, the codec context's frame size is set (by the encoder, as per the
> documentation) at 1152, smaller than the calculated value. If I continue with
> the resampling and followed by encoding with these values, I see this in the
> console:
>
> [libmp3lame @ 0x10380a200] more samples than frame size
> (avcodec_encode_audio2)
>
> followed by receiving a -22 return code from avcodec_encode_audio2. I tracked
> this into the FFmpeg source, and the console output is coming from
> libavcodec's utils.c line 1208 as the result of this check in the preceding
> line failing:
>
> if (frame->nb_samples > avctx->frame_size) {
>
> Fair enough, it doesn't want more samples than the codec specifies for its
> expected frame size. Just to see what would happen, I assigned dst_nb_samples
> the codec context's frame size value, and the audio seems mostly fine, but
> the associated video timing is out of sync and askew (which probably makes
> sense, as the timings should be wrong given using a wrong number of samples).
>
> So my question is how should I handle this scenario? What should the app do
> to accommodate the calculation for the number of samples which exceeds the
> frame size specified by the codec context, so that the timing isn't thrown
> out of whack?
I take it by sound of crickets (no response) to my question above that either
I've done a bad job communicating the issue, or it is indeed a real stumper. In
the event that it is the former, I'm going to take another stab at this by
distilling it all down to a very simple question:
How does one encode decompressed audio received where source data sample
buffers have 512 samples each and a sample rate of 16000, and encode it to a
sample rate of 44100?
Thanks for your help.
Brad
_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user