[FFmpeg-cvslog] r13683 - in trunk: libavformat/ffm.h libavformat/ffmdec.c libavformat/ffmenc.c tests/libav.regression.ref

bcoudurier subversion
Sat Jun 7 02:49:04 CEST 2008


Author: bcoudurier
Date: Sat Jun  7 02:49:03 2008
New Revision: 13683

Log:
fix pts handling in ffm

Modified:
   trunk/libavformat/ffm.h
   trunk/libavformat/ffmdec.c
   trunk/libavformat/ffmenc.c
   trunk/tests/libav.regression.ref

Modified: trunk/libavformat/ffm.h
==============================================================================
--- trunk/libavformat/ffm.h	(original)
+++ trunk/libavformat/ffm.h	Sat Jun  7 02:49:03 2008
@@ -32,10 +32,6 @@
 #define FRAME_HEADER_SIZE    8
 #define FLAG_KEY_FRAME       0x01
 
-typedef struct FFMStream {
-    int64_t pts;
-} FFMStream;
-
 enum {
     READ_HEADER,
     READ_DATA,
@@ -55,6 +51,7 @@ typedef struct FFMContext {
     int64_t pts;
     uint8_t *packet_ptr, *packet_end;
     uint8_t packet[FFM_PACKET_SIZE];
+    int64_t start_time;
 } FFMContext;
 
 #endif /* FFMPEG_FFM_H */

Modified: trunk/libavformat/ffmdec.c
==============================================================================
--- trunk/libavformat/ffmdec.c	(original)
+++ trunk/libavformat/ffmdec.c	Sat Jun  7 02:49:03 2008
@@ -232,7 +232,6 @@ static int ffm_read_header(AVFormatConte
 {
     FFMContext *ffm = s->priv_data;
     AVStream *st;
-    FFMStream *fst;
     ByteIOContext *pb = s->pb;
     AVCodecContext *codec;
     int i, nb_streams;
@@ -263,15 +262,10 @@ static int ffm_read_header(AVFormatConte
         st = av_new_stream(s, 0);
         if (!st)
             goto fail;
-        fst = av_mallocz(sizeof(FFMStream));
-        if (!fst)
-            goto fail;
         s->streams[i] = st;
 
         av_set_pts_info(st, 64, 1, 1000000);
 
-        st->priv_data = fst;
-
         codec = st->codec;
         /* generic info */
         codec->codec_id = get_be32(pb);

Modified: trunk/libavformat/ffmenc.c
==============================================================================
--- trunk/libavformat/ffmenc.c	(original)
+++ trunk/libavformat/ffmenc.c	Sat Jun  7 02:49:03 2008
@@ -92,7 +92,6 @@ static int ffm_write_header(AVFormatCont
 {
     FFMContext *ffm = s->priv_data;
     AVStream *st;
-    FFMStream *fst;
     ByteIOContext *pb = s->pb;
     AVCodecContext *codec;
     int bit_rate, i;
@@ -116,11 +115,7 @@ static int ffm_write_header(AVFormatCont
     /* list of streams */
     for(i=0;i<s->nb_streams;i++) {
         st = s->streams[i];
-        fst = av_mallocz(sizeof(FFMStream));
-        if (!fst)
-            goto fail;
         av_set_pts_info(st, 64, 1, 1000000);
-        st->priv_data = fst;
 
         codec = st->codec;
         /* generic info */
@@ -176,13 +171,14 @@ static int ffm_write_header(AVFormatCont
         default:
             return -1;
         }
-        /* hack to have real time */
-        if (ffm_nopts)
-            fst->pts = 0;
-        else
-            fst->pts = av_gettime();
     }
 
+    /* hack to have real time */
+    if (ffm_nopts)
+        ffm->start_time = 0;
+    else
+        ffm->start_time = av_gettime();
+
     /* flush until end of block reached */
     while ((url_ftell(pb) % ffm->packet_size) != 0)
         put_byte(pb, 0);
@@ -198,22 +194,16 @@ static int ffm_write_header(AVFormatCont
     ffm->first_packet = 1;
 
     return 0;
- fail:
-    for(i=0;i<s->nb_streams;i++) {
-        st = s->streams[i];
-        av_freep(&st->priv_data);
-    }
-    return -1;
 }
 
 static int ffm_write_packet(AVFormatContext *s, AVPacket *pkt)
 {
+    FFMContext *ffm = s->priv_data;
     AVStream *st = s->streams[pkt->stream_index];
-    FFMStream *fst = st->priv_data;
     int64_t pts;
     uint8_t header[FRAME_HEADER_SIZE];
 
-    pts = fst->pts;
+    pts = ffm->start_time + pkt->pts;
     /* packet size & key_frame */
     header[0] = pkt->stream_index;
     header[1] = 0;
@@ -224,7 +214,6 @@ static int ffm_write_packet(AVFormatCont
     ffm_write_data(s, header, FRAME_HEADER_SIZE, pts, 1);
     ffm_write_data(s, pkt->data, pkt->size, pts, 0);
 
-    fst->pts += pkt->duration;
     return 0;
 }
 

Modified: trunk/tests/libav.regression.ref
==============================================================================
--- trunk/tests/libav.regression.ref	(original)
+++ trunk/tests/libav.regression.ref	Sat Jun  7 02:49:03 2008
@@ -15,7 +15,7 @@ bdb7484c68db722f66ba1630cf79844c *./test
 d6fdeb9f7083cc827f9510c6c4517dc0 *./tests/data/b-libav.swf
 335771 ./tests/data/b-libav.swf
 ./tests/data/b-libav.swf CRC=0xe14e8847
-745e811e246f3727dc80a7504a18b129 *./tests/data/b-libav.ffm
+bf28235fdc3bdd77faf251a239b6bc58 *./tests/data/b-libav.ffm
 380928 ./tests/data/b-libav.ffm
 ./tests/data/b-libav.ffm CRC=0xca8f6870
 f8ad5bd78f4d012a8ce9570aa395ac54 *./tests/data/b-libav.flv




More information about the ffmpeg-cvslog mailing list