X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fvaapi_encode_mjpeg.c;h=3878f3eeb9a3dd7fdf10f2aaad0058319ad5bd0e;hb=6e30b35b85b81c802e52a1078ec7a3097e353c6d;hp=f0ea29209874ada7026394dc0cd211ff2a09f44d;hpb=e4e04dce1fab81bcdef82e60184d50c73d212c6a;p=ffmpeg diff --git a/libavcodec/vaapi_encode_mjpeg.c b/libavcodec/vaapi_encode_mjpeg.c index f0ea2920987..3878f3eeb9a 100644 --- a/libavcodec/vaapi_encode_mjpeg.c +++ b/libavcodec/vaapi_encode_mjpeg.c @@ -90,34 +90,34 @@ static int vaapi_encode_mjpeg_write_image_header(AVCodecContext *avctx, int err; if (priv->jfif) { - err = ff_cbs_insert_unit_content(priv->cbc, frag, -1, + err = ff_cbs_insert_unit_content(frag, -1, JPEG_MARKER_APPN + 0, &priv->jfif_header, NULL); if (err < 0) goto fail; } - err = ff_cbs_insert_unit_content(priv->cbc, frag, -1, + err = ff_cbs_insert_unit_content(frag, -1, JPEG_MARKER_DQT, &priv->quant_tables, NULL); if (err < 0) goto fail; - err = ff_cbs_insert_unit_content(priv->cbc, frag, -1, + err = ff_cbs_insert_unit_content(frag, -1, JPEG_MARKER_SOF0, &priv->frame_header, NULL); if (err < 0) goto fail; if (priv->huffman) { - err = ff_cbs_insert_unit_content(priv->cbc, frag, -1, + err = ff_cbs_insert_unit_content(frag, -1, JPEG_MARKER_DHT, &priv->huffman_tables, NULL); if (err < 0) goto fail; } - err = ff_cbs_insert_unit_content(priv->cbc, frag, -1, + err = ff_cbs_insert_unit_content(frag, -1, JPEG_MARKER_SOS, &priv->scan, NULL); if (err < 0) @@ -142,7 +142,7 @@ static int vaapi_encode_mjpeg_write_image_header(AVCodecContext *avctx, err = 0; fail: - ff_cbs_fragment_uninit(priv->cbc, frag); + ff_cbs_fragment_reset(frag); return err; } @@ -227,6 +227,8 @@ static int vaapi_encode_mjpeg_init_picture_params(AVCodecContext *avctx, JPEGRawScanHeader *sh = &priv->scan.header; VAEncPictureParameterBufferJPEG *vpic = pic->codec_picture_params; const AVPixFmtDescriptor *desc; + const uint8_t components_rgb[3] = { 'R', 'G', 'B' }; + const uint8_t components_yuv[3] = { 1, 2, 3 }; const uint8_t *components; int t, i, quant_scale, len; @@ -235,9 +237,9 @@ static int vaapi_encode_mjpeg_init_picture_params(AVCodecContext *avctx, desc = av_pix_fmt_desc_get(priv->common.input_frames->sw_format); av_assert0(desc); if (desc->flags & AV_PIX_FMT_FLAG_RGB) - components = (uint8_t[3]) { 'R', 'G', 'B' }; + components = components_rgb; else - components = (uint8_t[3]) { 1, 2, 3 }; + components = components_yuv; // Frame header. @@ -438,7 +440,7 @@ static av_cold int vaapi_encode_mjpeg_configure(AVCodecContext *avctx) VAAPIEncodeMJPEGContext *priv = avctx->priv_data; int err; - priv->quality = avctx->global_quality; + priv->quality = ctx->rc_quality; if (priv->quality < 1 || priv->quality > 100) { av_log(avctx, AV_LOG_ERROR, "Invalid quality value %d " "(must be 1-100).\n", priv->quality); @@ -483,6 +485,8 @@ static const VAAPIEncodeType vaapi_encode_type_mjpeg = { .configure = &vaapi_encode_mjpeg_configure, + .default_quality = 80, + .picture_params_size = sizeof(VAEncPictureParameterBufferJPEG), .init_picture_params = &vaapi_encode_mjpeg_init_picture_params, @@ -515,6 +519,7 @@ static av_cold int vaapi_encode_mjpeg_close(AVCodecContext *avctx) { VAAPIEncodeMJPEGContext *priv = avctx->priv_data; + ff_cbs_fragment_free(&priv->current_fragment); ff_cbs_close(&priv->cbc); return ff_vaapi_encode_close(avctx); @@ -536,7 +541,6 @@ static const AVOption vaapi_encode_mjpeg_options[] = { }; static const AVCodecDefault vaapi_encode_mjpeg_defaults[] = { - { "global_quality", "80" }, { "b", "0" }, { NULL }, }; @@ -555,16 +559,16 @@ AVCodec ff_mjpeg_vaapi_encoder = { .id = AV_CODEC_ID_MJPEG, .priv_data_size = sizeof(VAAPIEncodeMJPEGContext), .init = &vaapi_encode_mjpeg_init, - .send_frame = &ff_vaapi_encode_send_frame, .receive_packet = &ff_vaapi_encode_receive_packet, .close = &vaapi_encode_mjpeg_close, .priv_class = &vaapi_encode_mjpeg_class, - .capabilities = AV_CODEC_CAP_HARDWARE | - AV_CODEC_CAP_INTRA_ONLY, + .capabilities = AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_DR1, + .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .defaults = vaapi_encode_mjpeg_defaults, .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_VAAPI, AV_PIX_FMT_NONE, }, + .hw_configs = ff_vaapi_encode_hw_configs, .wrapper_name = "vaapi", };