* Add code to allow the img reader to read files at the nominal frame rate.
authorPhilip Gladstone <philipjsg@users.sourceforge.net>
Wed, 11 Dec 2002 03:18:47 +0000 (03:18 +0000)
committerPhilip Gladstone <philipjsg@users.sourceforge.net>
Wed, 11 Dec 2002 03:18:47 +0000 (03:18 +0000)
  This (will) allow testing of ffserver in an automated way. The code is nasty
  in that it uses a global.......

Originally committed as revision 1331 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/img.c

index 305cbb08f2c100aec94f5d4ed532c54e086037ed..5f93450368ef9979fa2509c666ae1298ecb85a13 100644 (file)
@@ -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 <unistd.h>
 #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