[FFmpeg-devel] [RFC] Eliminate -re and make -rate_emu set by AVOption
Luca Abeni
lucabe72
Wed Jul 16 21:35:47 CEST 2008
Hi Stefano,
sorry for the late reply, but I wanted to triple-think about this issue
before writing something...
Stefano Sabatini wrote:
[...]
> My solution is to make -rate_emu settable through AVOption options
> using rate_emu, then remove the -re option.
>
> This alone doesn't fix the problems for audio-only multimedia streams
> streaming, there are still timestamp issues to be addressed.
If I understand your patch correctly, it allows to set the rate_emu
field in the audio codec context, but it does not provide support for
"audio frame rate emulation". In fact, I believe that the following code
can only work for the video streams:
> /* frame rate emulation */
> if (ist->st->codec->rate_emu) {
> int64_t pts = av_rescale((int64_t) ist->frame * ist->st->codec->time_base.num, 1000000, ist->st->codec->time_base.den);
> int64_t now = av_gettime() - ist->start;
> if (pts > now)
> usleep(pts - now);
>
> ist->frame++;
> }
(I do not believe that an audio pts can be computed as frame number *
time base).
So, I suspect that setting rate_emu for audio codecs is quite pointless...
(In other words: if we really want to go this path, I believe we should
first fix audio frame rate emulation, and then enable it in a second time)
Moreover, why does the rate emulation code cited above compute a pts in
that way? Cannot ist->next_pts (or something similar) be used?
I also have a second (bigger) doubt: in my opinion, rate_emu should not
be a field in AVCodecContext. In fact, nothing else than ffmpeg.c uses
it (unless I misread some code). So, I would be tempted to remove this
field from AVCodecContext, and to use the global rate_emu variable in
the "if()" quoted above (so, I would change "if
(ist->st->codec->rate_emu) {" in "if (rate_emu) {").
I believe this should not break anything, but I am not completely sure
(comments welcome).
Thanks,
Luca
More information about the ffmpeg-devel
mailing list