X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Frv10enc.c;h=765c57d16a7699865e1dc81d6a3660a515fb1e79;hb=549d0bdca53af7a6e0c612ab4b03baecf3a5878f;hp=47fb2225e4aa34755a737b15b92ba0bac67b8281;hpb=445a7d48b13c8c6607b69156233fc8d5fed3b396;p=ffmpeg diff --git a/libavcodec/rv10enc.c b/libavcodec/rv10enc.c index 47fb2225e4a..765c57d16a7 100644 --- a/libavcodec/rv10enc.c +++ b/libavcodec/rv10enc.c @@ -27,8 +27,9 @@ #include "mpegvideo.h" #include "put_bits.h" +#include "rv10.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; @@ -38,7 +39,7 @@ void ff_rv10_encode_picture_header(MpegEncContext *s, int picture_number) put_bits(&s->pb, 1, (s->pict_type == AV_PICTURE_TYPE_P)); - put_bits(&s->pb, 1, 0); /* not PB frame */ + put_bits(&s->pb, 1, 0); /* not PB-mframe */ put_bits(&s->pb, 5, s->qscale); @@ -48,22 +49,36 @@ 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)) { + avpriv_report_missing_feature(s->avctx, "Encoding frames with %d (>= 4096) macroblocks", + s->mb_width * s->mb_height); + 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; } +static const AVClass rv10_class = { + .class_name = "rv10 encoder", + .item_name = av_default_item_name, + .option = ff_mpv_generic_options, + .version = LIBAVUTIL_VERSION_INT, +}; + AVCodec ff_rv10_encoder = { .name = "rv10", + .long_name = NULL_IF_CONFIG_SMALL("RealVideo 1.0"), .type = AVMEDIA_TYPE_VIDEO, - .id = CODEC_ID_RV10, + .id = AV_CODEC_ID_RV10, .priv_data_size = sizeof(MpegEncContext), - .init = ff_MPV_encode_init, - .encode2 = ff_MPV_encode_picture, - .close = ff_MPV_encode_end, - .pix_fmts= (const enum PixelFormat[]){PIX_FMT_YUV420P, PIX_FMT_NONE}, - .long_name= NULL_IF_CONFIG_SMALL("RealVideo 1.0"), + .init = ff_mpv_encode_init, + .encode2 = ff_mpv_encode_picture, + .close = ff_mpv_encode_end, + .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, + .priv_class = &rv10_class, };