X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Frv10enc.c;h=765c57d16a7699865e1dc81d6a3660a515fb1e79;hb=83678dbbae64ad8c501e0c732c1117e642c25dae;hp=a6127f62fe32a8a6222d3e7b25b9f4b3e05cbad2;hpb=00c3b67b8ac6bfdc5a01535173dc537824a53d6e;p=ffmpeg diff --git a/libavcodec/rv10enc.c b/libavcodec/rv10enc.c index a6127f62fe3..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,25 +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; } -FF_MPV_GENERIC_CLASS(rv10) +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, };