aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2015-03-10 13:47:33 +0100
committerMichael Niedermayer <michaelni@gmx.at>2015-03-10 13:47:49 +0100
commit0baea332cb42c254ee57a91a6c0cc36874c44621 (patch)
tree78806ca1edee34e7fe919ead7a44dfc13e8d3f8b
parent396b47d2a71797e77ad22567b5f2f1ac9874ee51 (diff)
parentded9931d165544c342795a1b66e4777b6e7daeb0 (diff)
downloadffmpeg-0baea332cb42c254ee57a91a6c0cc36874c44621.tar.gz
Merge commit 'ded9931d165544c342795a1b66e4777b6e7daeb0' into release/1.1
* commit 'ded9931d165544c342795a1b66e4777b6e7daeb0': rv10: check size of s->mb_width * s->mb_height Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavcodec/mpegvideo.h2
-rw-r--r--libavcodec/mpegvideo_enc.c7
-rw-r--r--libavcodec/rv10enc.c7
3 files changed, 12 insertions, 4 deletions
diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h
index 5b980310c4..66beb63692 100644
--- a/libavcodec/mpegvideo.h
+++ b/libavcodec/mpegvideo.h
@@ -910,7 +910,7 @@ int ff_h261_get_picture_format(int width, int height);
/* rv10.c */
-void ff_rv10_encode_picture_header(MpegEncContext *s, int picture_number);
+int ff_rv10_encode_picture_header(MpegEncContext *s, int picture_number);
int ff_rv_decode_dc(MpegEncContext *s, int n);
void ff_rv20_encode_picture_header(MpegEncContext *s, int picture_number);
diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c
index 1e4c58d9ce..90350a7a65 100644
--- a/libavcodec/mpegvideo_enc.c
+++ b/libavcodec/mpegvideo_enc.c
@@ -3447,8 +3447,11 @@ static int encode_picture(MpegEncContext *s, int picture_number)
ff_msmpeg4_encode_picture_header(s, picture_number);
else if (CONFIG_MPEG4_ENCODER && s->h263_pred)
ff_mpeg4_encode_picture_header(s, picture_number);
- else if (CONFIG_RV10_ENCODER && s->codec_id == AV_CODEC_ID_RV10)
- ff_rv10_encode_picture_header(s, picture_number);
+ else if (CONFIG_RV10_ENCODER && s->codec_id == AV_CODEC_ID_RV10) {
+ ret = ff_rv10_encode_picture_header(s, picture_number);
+ if (ret < 0)
+ return ret;
+ }
else if (CONFIG_RV20_ENCODER && s->codec_id == AV_CODEC_ID_RV20)
ff_rv20_encode_picture_header(s, picture_number);
else if (CONFIG_FLV_ENCODER && s->codec_id == AV_CODEC_ID_FLV1)
diff --git a/libavcodec/rv10enc.c b/libavcodec/rv10enc.c
index c4c5c53850..3bf44fb9b5 100644
--- a/libavcodec/rv10enc.c
+++ b/libavcodec/rv10enc.c
@@ -28,7 +28,7 @@
#include "mpegvideo.h"
#include "put_bits.h"
-void ff_rv10_encode_picture_header(MpegEncContext *s, int picture_number)
+int ff_rv10_encode_picture_header(MpegEncContext *s, int picture_number)
{
int full_frame= 0;
@@ -48,12 +48,17 @@ void ff_rv10_encode_picture_header(MpegEncContext *s, int picture_number)
/* if multiple packets per frame are sent, the position at which
to display the macroblocks is coded here */
if(!full_frame){
+ if (s->mb_width * s->mb_height >= (1U << 12)) {
+ av_log_missing_feature(s->avctx, "Encoding frames with 4096 macroblocks or more", 0);
+ return AVERROR(ENOSYS);
+ }
put_bits(&s->pb, 6, 0); /* mb_x */
put_bits(&s->pb, 6, 0); /* mb_y */
put_bits(&s->pb, 12, s->mb_width * s->mb_height);
}
put_bits(&s->pb, 3, 0); /* ignored */
+ return 0;
}
FF_MPV_GENERIC_CLASS(rv10)