我正在编写一个简单的程序,使用libav将任何输入音频文件解码为pcm16 / mono / wav文件。或者,我认为这很简单。
经过艰苦的努力,阅读了很多示例代码(比如avconv / avplay),我设法编写了应该有用的代码。
然而,它不起作用。解复用/解码部分似乎工作正常,但编码部分失败,出现以下消息:
mathematics.c:61: av_rescale_rnd: Assertion `c > 0' failed.
以下是代码提取:
printf("Fill Frame\n");
avcodec_fill_audio_frame(oframe, _oCodecCtx->channels, _oCodecCtx->sample_fmt, frame->data[0], frame->linesize[0], 0);
printf("Frame filled\n");
ret = avcodec_encode_audio2(_oCodecCtx, &opkt, oframe, &got_packet);
if (ret < 0) {
printf("Error encoding audio frame\n");
return 1;
}
“填充帧”和“填充帧”在错误出现之前显示。所以,我认为它是由avcodec_encode_audio2
抛出的。但是,此函数不会在其源代码中调用av_rescale_rnd
。
所以问题是:有没有办法知道谁调用了这个函数,而没有修改/重新编译libav源代码?