diff --git a/libavformat/img.c b/libavformat/img.c index 305cbb08f2c100aec94f5d4ed532c54e086037ed..5f93450368ef9979fa2509c666ae1298ecb85a13 100644 --- a/libavformat/img.c +++ b/libavformat/img.c @@ -16,6 +16,7 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include #include "avformat.h" extern AVInputFormat pgm_iformat; @@ -55,6 +56,8 @@ typedef struct { char path[1024]; } VideoData; +int emulate_frame_rate; + static inline int pnm_space(int c) { return (c==' ' || c=='\n' || c=='\r' || c=='\t'); @@ -190,6 +193,23 @@ static int img_read_packet(AVFormatContext *s1, AVPacket *pkt) char filename[1024]; int ret; ByteIOContext f1, *f; + static INT64 first_frame; + + if (emulate_frame_rate) { + if (!first_frame) { + first_frame = av_gettime(); + } else { + INT64 pts; + INT64 nowus; + + nowus = av_gettime() - first_frame; + + pts = ((INT64)s->img_number * FRAME_RATE_BASE * 1000000) / (s1->streams[0]->codec.frame_rate); + + if (pts > nowus) + usleep(pts - nowus); + } + } /* This if-statement destroys pipes - I do not see why it is necessary