Hello,

The comment for AVCodecContext::time_base seems to indicate this variable can 
be interpreted two ways, depending if the content is fixed-fps or not. However, 
I don't see in the code how this is accounted for, for example, in 
mpegtssenc.c, where it wants to determine the pcr_packet_period, it appears to 
rely on this value being set to the 1/fps, but it does not do any explicit 
checks if the content is fixed-fps or not. Should this value really just be 
1/fps always? A previously developer  set time_base to 1/1000 in our 
application to indicate milliseconds, but this caused the mpeg2-ts output to 
have a PCR value every 100 packets which didn't meet the once every 100ms 
MPEG2-TS specification. Changing the time_base to 1/fps, which was 1/25 in this 
case, allowed a PCR at least once every 100ms. I'm worried about the 
side-effects this may cause and want to understand the true meaning for 
AVCodecContext::time_base. It there a way to tell if a codec is fixed-fps?

Thank you,
Will


avcodec.h:

typedef struct AVCodecContext {
...

    /**
     * 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.
     * - encoding: MUST be set by user.
     * - decoding: Set by libavcodec.
     */
    AVRational time_base;
...

mpegtsenc.c:
..
        } else {
            // max delta PCR 0.1s
            service->pcr_packet_period =
                pcr_st->codec->time_base.den/(10*pcr_st->codec->time_base.num);
        }
...


_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user

Reply via email to