X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fnuv.c;h=84935b6ad4ded0d49f19ba4f5bb3617f4914ddc3;hb=5d9ad5425f1fae4876e30c2c4500bfd0950e0d88;hp=0c5e42fe78e3d5e34ecb7ea61013c39ad95bb81c;hpb=975a1447f76e8d30fc01e6ea5466c84faf3d76e4;p=ffmpeg diff --git a/libavcodec/nuv.c b/libavcodec/nuv.c index 0c5e42fe78e..84935b6ad4d 100644 --- a/libavcodec/nuv.c +++ b/libavcodec/nuv.c @@ -63,11 +63,11 @@ static const uint8_t fallback_cquant[] = { }; /** - * \brief copy frame data from buffer to AVFrame, handling stride. - * \param f destination AVFrame - * \param src source buffer, does not use any line-stride - * \param width width of the video frame - * \param height height of the video frame + * @brief copy frame data from buffer to AVFrame, handling stride. + * @param f destination AVFrame + * @param src source buffer, does not use any line-stride + * @param width width of the video frame + * @param height height of the video frame */ static void copy_frame(AVFrame *f, const uint8_t *src, int width, int height) { @@ -77,7 +77,7 @@ static void copy_frame(AVFrame *f, const uint8_t *src, } /** - * \brief extract quantization tables from codec data into our context + * @brief extract quantization tables from codec data into our context */ static int get_quant(AVCodecContext *avctx, NuvContext *c, const uint8_t *buf, int size) { @@ -94,7 +94,7 @@ static int get_quant(AVCodecContext *avctx, NuvContext *c, } /** - * \brief set quantization tables from a quality value + * @brief set quantization tables from a quality value */ static void get_quant_quality(NuvContext *c, int quality) { int i; @@ -107,8 +107,8 @@ static void get_quant_quality(NuvContext *c, int quality) { static int codec_reinit(AVCodecContext *avctx, int width, int height, int quality) { NuvContext *c = avctx->priv_data; - width = (width + 1) & ~1; - height = (height + 1) & ~1; + width = FFALIGN(width, 2); + height = FFALIGN(height, 2); if (quality >= 0) get_quant_quality(c, quality); if (width != c->width || height != c->height) { @@ -121,9 +121,9 @@ static int codec_reinit(AVCodecContext *avctx, int width, int height, int qualit av_log(avctx, AV_LOG_ERROR, "Can't allocate decompression buffer.\n"); return 0; } - rtjpeg_decode_init(&c->rtj, &c->dsp, c->width, c->height, c->lq, c->cq); + ff_rtjpeg_decode_init(&c->rtj, &c->dsp, c->width, c->height, c->lq, c->cq); } else if (quality != c->quality) - rtjpeg_decode_init(&c->rtj, &c->dsp, c->width, c->height, c->lq, c->cq); + ff_rtjpeg_decode_init(&c->rtj, &c->dsp, c->width, c->height, c->lq, c->cq); return 1; } @@ -154,7 +154,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, ret = get_quant(avctx, c, buf, buf_size); if (ret < 0) return ret; - rtjpeg_decode_init(&c->rtj, &c->dsp, c->width, c->height, c->lq, c->cq); + ff_rtjpeg_decode_init(&c->rtj, &c->dsp, c->width, c->height, c->lq, c->cq); return orig_size; } @@ -184,9 +184,9 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, } if (c->codec_frameheader) { int w, h, q; - if (buf_size < 12) { - av_log(avctx, AV_LOG_ERROR, "invalid nuv video frame\n"); - return -1; + if (buf[0] != 'V' || buf_size < 12) { + av_log(avctx, AV_LOG_ERROR, "invalid nuv video frame (wrong codec_tag?)\n"); + return AVERROR_INVALIDDATA; } w = AV_RL16(&buf[6]); h = AV_RL16(&buf[8]); @@ -224,7 +224,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, } case NUV_RTJPEG_IN_LZO: case NUV_RTJPEG: { - rtjpeg_decode_frame_yuv420(&c->rtj, &c->pic, buf, buf_size); + ff_rtjpeg_decode_frame_yuv420(&c->rtj, &c->pic, buf, buf_size); break; } case NUV_BLACK: { @@ -258,7 +258,7 @@ static av_cold int decode_init(AVCodecContext *avctx) { c->codec_frameheader = avctx->codec_tag == MKTAG('R', 'J', 'P', 'G'); if (avctx->extradata_size) get_quant(avctx, c, avctx->extradata, avctx->extradata_size); - dsputil_init(&c->dsp, avctx); + ff_dsputil_init(&c->dsp, avctx); if (!codec_reinit(avctx, avctx->width, avctx->height, -1)) return 1; return 0; @@ -273,15 +273,13 @@ static av_cold int decode_end(AVCodecContext *avctx) { } AVCodec ff_nuv_decoder = { - "nuv", - AVMEDIA_TYPE_VIDEO, - CODEC_ID_NUV, - sizeof(NuvContext), - decode_init, - NULL, - decode_end, - decode_frame, - CODEC_CAP_DR1, + .name = "nuv", + .type = AVMEDIA_TYPE_VIDEO, + .id = CODEC_ID_NUV, + .priv_data_size = sizeof(NuvContext), + .init = decode_init, + .close = decode_end, + .decode = decode_frame, + .capabilities = CODEC_CAP_DR1, .long_name = NULL_IF_CONFIG_SMALL("NuppelVideo/RTJPEG"), }; -