]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/vaapi_encode_mjpeg.c
avcodec: Constify AVCodecs
[ffmpeg] / libavcodec / vaapi_encode_mjpeg.c
index f0ea29209874ada7026394dc0cd211ff2a09f44d..d35f416ad7d236a982b93df61620b99c35a472ad 100644 (file)
@@ -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 },
 };
@@ -548,23 +552,23 @@ static const AVClass vaapi_encode_mjpeg_class = {
     .version    = LIBAVUTIL_VERSION_INT,
 };
 
-AVCodec ff_mjpeg_vaapi_encoder = {
+const AVCodec ff_mjpeg_vaapi_encoder = {
     .name           = "mjpeg_vaapi",
     .long_name      = NULL_IF_CONFIG_SMALL("MJPEG (VAAPI)"),
     .type           = AVMEDIA_TYPE_VIDEO,
     .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",
 };