Hi, I recently changed code that uses libavcodec for encoding to use timebases with a higher granularity because there were cases where certain conversions resulted in timestamp clashes which I could fix that way.
Now I realized that this totally screwed up rate control, e.g. for mpeg2video. Bitrate is down by a large factor and I get lots of messages like these rc buffer underflow max bitrate possibly too small or try trellis with large lmax or increase qmax when everything I changed was merely the time_base of the encoder. All other settings, which have worked fine for ages, identical. I doublechecked if all timestamps and durations we pass the encoder are correct and they seem consistent, e.g. in a case where earlier we would pass an AVFrame with a PTS of 1 and a duration of 1 for a codec timebase of 1/25 we were now passing 1000 and a duration of 1000 for a timebase of 1/25000. Is rate control somehow assuming that timebase is anything but just the maximum granularity of timestamps, which my understanding was before? Looking at the code in ratecontrol.c I see for example this: static double get_fps(AVCodecContext *avctx) { return 1.0 / av_q2d(avctx->time_base) / FFMAX(avctx->ticks_per_frame, 1); } Which at least seems like there are assumptions regarding time_base and its relationship with fps. I know the documentation says this for AVCodecContext.time_base: "This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented. For fixed-fps content, timebase should be 1/framerate and timestamp increments should be identically 1. " But in usual spec language "should" does not mean must. My question is really, does it have to be set this way or otherwise rate control is broken? I was assuming the encoder could work with anything provided the timestamps and durations I pass in are correct. Thanks in advance for any insights in this, Robert _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel