summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavcodec/svq1.c24
-rw-r--r--tests/ffmpeg.regression.ref4
2 files changed, 20 insertions, 8 deletions
diff --git a/libavcodec/svq1.c b/libavcodec/svq1.c
index ae79afef90..448aa93b10 100644
--- a/libavcodec/svq1.c
+++ b/libavcodec/svq1.c
@@ -880,6 +880,8 @@ static int svq1_decode_end(AVCodecContext *avctx)
static void svq1_write_header(SVQ1Context *s, int frame_type)
{
+ int i;
+
/* frame code */
put_bits(&s->pb, 22, 0x20);
@@ -898,12 +900,22 @@ static void svq1_write_header(SVQ1Context *s, int frame_type)
/* output 5 unknown bits (2 + 2 + 1) */
put_bits(&s->pb, 5, 0);
- /* forget about matching up resolutions, just use the free-form
- * resolution code (7) for now */
- put_bits(&s->pb, 3, 7);
- put_bits(&s->pb, 12, s->frame_width);
- put_bits(&s->pb, 12, s->frame_height);
-
+ for (i = 0; i < 7; i++)
+ {
+ if ((svq1_frame_size_table[i].width == s->frame_width) &&
+ (svq1_frame_size_table[i].height == s->frame_height))
+ {
+ put_bits(&s->pb, 3, i);
+ break;
+ }
+ }
+
+ if (i == 7)
+ {
+ put_bits(&s->pb, 3, 7);
+ put_bits(&s->pb, 12, s->frame_width);
+ put_bits(&s->pb, 12, s->frame_height);
+ }
}
/* no checksum or extra data (next 2 bits get 0) */
diff --git a/tests/ffmpeg.regression.ref b/tests/ffmpeg.regression.ref
index 5b2a90b673..8c902c706d 100644
--- a/tests/ffmpeg.regression.ref
+++ b/tests/ffmpeg.regression.ref
@@ -107,8 +107,8 @@ stddev: 8.08 PSNR:29.97 bytes:7602176
2653690 ./data/a-ffv1.avi
799d3db687f6cdd7a837ec156efc171f *./data/out.yuv
stddev: 0.00 PSNR:99.99 bytes:7602176
-c672f70e2176a897b1ba816749574751 *./data/a-svq1.mov
-1384019 ./data/a-svq1.mov
+b92d6d901574ea17e43e96ea97637078 *./data/a-svq1.mov
+1383999 ./data/a-svq1.mov
ccc201054669e94717022bb4f2aea4ce *./data/out.yuv
stddev: 10.99 PSNR:27.30 bytes:7602176
21f8ff9f1daacd9133683bb4ea0f50a4 *./data/a-mp2.mp2