huffyuv encoding fixed
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 8 Mar 2003 11:21:33 +0000 (11:21 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 8 Mar 2003 11:21:33 +0000 (11:21 +0000)
Originally committed as revision 1647 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/avidec.c
libavformat/avienc.c

index cfbcc3791197bb3185e7e33d23d7078e561a23f9..956191a985e120cf44563cb1171831a91db4d844 100644 (file)
@@ -174,6 +174,9 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap)
                     st->codec.extradata_size= size - 10*4;
                     st->codec.extradata= av_malloc(st->codec.extradata_size); //FIXME where should we free this?
                     get_buffer(pb, st->codec.extradata, st->codec.extradata_size);
+                    
+                    if(st->codec.extradata_size & 1) //FIXME check if the encoder really did this correctly
+                        get_byte(pb);
 
 #ifdef DEBUG
                     print_tag("video", tag1, 0);
index 04bc9e69647959839d3614eaea6cf42791e299c7..19e336bead77074868d5f232f1395a58ada50b24 100644 (file)
@@ -129,11 +129,12 @@ unsigned int codec_get_bmp_tag(int id)
 /* BITMAPINFOHEADER header */
 void put_bmp_header(ByteIOContext *pb, AVCodecContext *enc, const CodecTag *tags, int for_asf)
 {
-    put_le32(pb, 40); /* size */
+    put_le32(pb, 40 + enc->extradata_size); /* size */
     put_le32(pb, enc->width);
     put_le32(pb, enc->height);
     put_le16(pb, 1); /* planes */
-    put_le16(pb, 24); /* depth */
+    
+    put_le16(pb, enc->bits_per_sample ? enc->bits_per_sample : 24); /* depth */
     /* compression type */
     put_le32(pb, for_asf ? codec_get_asf_tag(tags, enc->codec_id) : codec_get_tag(tags, enc->codec_id));
     put_le32(pb, enc->width * enc->height * 3);
@@ -141,6 +142,11 @@ void put_bmp_header(ByteIOContext *pb, AVCodecContext *enc, const CodecTag *tags
     put_le32(pb, 0);
     put_le32(pb, 0);
     put_le32(pb, 0);
+    
+    put_buffer(pb, enc->extradata, enc->extradata_size);
+
+    if (enc->extradata_size & 1)
+        put_byte(pb, 0);
 }
 
 static void parse_specific_params(AVCodecContext *stream, int *au_byterate, int *au_ssize, int *au_scale)