OSDN Git Service

jv demuxer: calculate palette_size for each frame in read_header
authorPeter Ross <pross@xvid.org>
Sat, 12 Mar 2011 02:31:26 +0000 (13:31 +1100)
committerRonald S. Bultje <rsbultje@gmail.com>
Mon, 14 Mar 2011 12:05:34 +0000 (08:05 -0400)
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
libavformat/jvdec.c

index 90b6899..98fa6e7 100644 (file)
@@ -31,7 +31,7 @@
 typedef struct {
     int audio_size;    /** audio packet size (bytes) */
     int video_size;    /** video packet size (bytes) */
-    int palette;       /** frame contains palette change */
+    int palette_size;  /** palette size (bytes) */
     int video_type;    /** per-frame video compression type */
 } JVFrame;
 
@@ -113,7 +113,7 @@ static int read_header(AVFormatContext *s,
 
         jvf->audio_size = avio_rl32(pb);
         jvf->video_size = avio_rl32(pb);
-        jvf->palette    = avio_r8(pb);
+        jvf->palette_size = avio_r8(pb) ? 768 : 0;
         if (avio_r8(pb))
              av_log(s, AV_LOG_WARNING, "unsupported audio codec\n");
         jvf->video_type = avio_r8(pb);
@@ -152,8 +152,8 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt)
             }
         case JV_VIDEO:
             jv->state++;
-            if (jvf->video_size || jvf->palette) {
-                int size = jvf->video_size + (jvf->palette ? 768 : 0);
+            if (jvf->video_size || jvf->palette_size) {
+                int size = jvf->video_size + jvf->palette_size;
                 if (av_new_packet(pkt, size + 5))
                     return AVERROR(ENOMEM);
 
@@ -171,7 +171,7 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt)
             }
         case JV_PADDING:
             avio_skip(pb, FFMAX(e->size - jvf->audio_size - jvf->video_size
-                                        - (jvf->palette ? 768 : 0), 0));
+                                        - jvf->palette_size, 0));
             jv->state = JV_AUDIO;
             jv->pts++;
         }