aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/msmpeg4.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2002-02-22 19:19:01 +0000
committerMichael Niedermayer <michaelni@gmx.at>2002-02-22 19:19:01 +0000
commit2b9ab1d54a35f7d689b2396cfc59f9dbdcae391f (patch)
tree0aeb308d9f489761f21ccfd90a136274763d8d2a /libavcodec/msmpeg4.c
parent81b7c056ee991c66add092a47a6a6a169d8d69d8 (diff)
downloadffmpeg-2b9ab1d54a35f7d689b2396cfc59f9dbdcae391f.tar.gz
fixing msmpeg4 decoding if fps < 16 (i thought it was a indicator for the ext header, its the fps indeed)
Originally committed as revision 313 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/msmpeg4.c')
-rw-r--r--libavcodec/msmpeg4.c46
1 files changed, 14 insertions, 32 deletions
diff --git a/libavcodec/msmpeg4.c b/libavcodec/msmpeg4.c
index 7845261069..8fa9aefaa8 100644
--- a/libavcodec/msmpeg4.c
+++ b/libavcodec/msmpeg4.c
@@ -21,6 +21,7 @@
#include "common.h"
#include "dsputil.h"
#include "mpegvideo.h"
+#include "avcodec.h"
/*
* You can also call this codec : MPEG4 with a twist !
@@ -212,23 +213,14 @@ void msmpeg4_encode_picture_header(MpegEncContext * s, int picture_number)
void msmpeg4_encode_ext_header(MpegEncContext * s)
{
- if(s->pict_type == P_TYPE)
- {
- return; // P-Frames dont seem to have them and not even a 0 bit
- }
- else
- {
s->flipflop_rounding=1;
- s->bitrate= 910;
-
- put_bits(&s->pb, 1, 1); // ext header indicator
+ s->bitrate= 910; // FIXME
- put_bits(&s->pb, 4, 7); // ?
+ put_bits(&s->pb, 5, s->frame_rate / FRAME_RATE_BASE); //yes 29.97 -> 29
put_bits(&s->pb, 11, s->bitrate);
put_bits(&s->pb, 1, s->flipflop_rounding);
- }
}
/* predict coded block */
@@ -748,33 +740,23 @@ int msmpeg4_decode_picture_header(MpegEncContext * s)
int msmpeg4_decode_ext_header(MpegEncContext * s, int buf_size)
{
- int firstBit=0;
-
/* the alt_bitstream reader could read over the end so we need to check it */
- if(get_bits_count(&s->gb) < buf_size*8) firstBit= get_bits1(&s->gb);
-
- if(s->pict_type == P_TYPE)
+ if(get_bits_count(&s->gb) + 16 < buf_size*8)
{
- if(firstBit) return -1; // havnt seen ext headers in P-Frames yet ;)
+ int fps;
+
+ fps= get_bits(&s->gb, 5);
+ s->bitrate= get_bits(&s->gb, 11);
+ s->flipflop_rounding= get_bits1(&s->gb);
+
+// printf("fps:%2d bps:%2d roundingType:%1d\n", fps, s->bitrate, s->flipflop_rounding);
}
else
{
- int unk;
- if(!firstBit) // no header found
- {
- s->flipflop_rounding= 0;
- s->bitrate= 0;
- return 0;
- }
-
- unk= get_bits(&s->gb, 4);
- s->bitrate= get_bits(&s->gb, 11);
-
-// printf("%2d %4d ;; %1X\n", unk,s->bitrate, unk);
-
- s->flipflop_rounding= get_bits1(&s->gb);
+ s->flipflop_rounding= 0;
+ s->bitrate= 0;
}
-
+
return 0;
}