From 846c276e26a071c4f1fccb7b0949d4de30a27fb6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=ADctor=20Manuel=20J=C3=A1quez=20Leal?= Date: Mon, 5 Jun 2017 20:30:07 +0200 Subject: [PATCH] libs: encoder: vp8,h264,h265,mpeg2: set misc param once Instead of recalculating the miscellaneous buffer parameters for every buffer, it is only done once, when the encoder is configured. And for every buffer, the same structures are just copied. https://bugzilla.gnome.org/show_bug.cgi?id=783449 --- gst-libs/gst/vaapi/gstvaapiencoder_h264.c | 10 ++++------ gst-libs/gst/vaapi/gstvaapiencoder_h265.c | 10 ++++------ gst-libs/gst/vaapi/gstvaapiencoder_mpeg2.c | 8 ++++---- gst-libs/gst/vaapi/gstvaapiencoder_vp8.c | 8 ++++---- 4 files changed, 16 insertions(+), 20 deletions(-) diff --git a/gst-libs/gst/vaapi/gstvaapiencoder_h264.c b/gst-libs/gst/vaapi/gstvaapiencoder_h264.c index 14bb076207..6ffbd96623 100644 --- a/gst-libs/gst/vaapi/gstvaapiencoder_h264.c +++ b/gst-libs/gst/vaapi/gstvaapiencoder_h264.c @@ -2154,11 +2154,8 @@ error_create_packed_seq_hdr: } static gboolean -ensure_control_rate_params (GstVaapiEncoderH264 * encoder, - GstVaapiEncPicture * picture) +ensure_control_rate_params (GstVaapiEncoderH264 * encoder) { - GstVaapiEncoder *const base_encoder = GST_VAAPI_ENCODER_CAST (encoder); - if (GST_VAAPI_ENCODER_RATE_CONTROL (encoder) == GST_VAAPI_RATECONTROL_CQP) return TRUE; @@ -2176,7 +2173,7 @@ ensure_control_rate_params (GstVaapiEncoderH264 * encoder, fill_hrd_params (encoder, &GST_VAAPI_ENCODER_VA_HRD (encoder)); /* *INDENT-ON* */ - return gst_vaapi_encoder_ensure_param_control_rate (base_encoder, picture); + return TRUE; } /* Generates additional control parameters */ @@ -2187,7 +2184,7 @@ ensure_misc_params (GstVaapiEncoderH264 * encoder, GstVaapiEncPicture * picture) GstVaapiEncMiscParam *misc; guint num_roi; - if (!ensure_control_rate_params (encoder, picture)) + if (!gst_vaapi_encoder_ensure_param_control_rate (base_encoder, picture)) return FALSE; if (GST_VAAPI_ENCODER_RATE_CONTROL (encoder) == GST_VAAPI_RATECONTROL_CBR || @@ -2848,6 +2845,7 @@ gst_vaapi_encoder_h264_reconfigure (GstVaapiEncoder * base_encoder) return status; reset_properties (encoder); + ensure_control_rate_params (encoder); return set_context_info (base_encoder); } diff --git a/gst-libs/gst/vaapi/gstvaapiencoder_h265.c b/gst-libs/gst/vaapi/gstvaapiencoder_h265.c index 9513f5c874..e8bc289d99 100644 --- a/gst-libs/gst/vaapi/gstvaapiencoder_h265.c +++ b/gst-libs/gst/vaapi/gstvaapiencoder_h265.c @@ -1766,18 +1766,15 @@ error_create_packed_seq_hdr: } static gboolean -ensure_control_rate_params (GstVaapiEncoderH265 * encoder, - GstVaapiEncPicture * picture) +ensure_control_rate_params (GstVaapiEncoderH265 * encoder) { - GstVaapiEncoder *const base_encoder = GST_VAAPI_ENCODER_CAST (encoder); - if (GST_VAAPI_ENCODER_RATE_CONTROL (encoder) == GST_VAAPI_RATECONTROL_CQP) return TRUE; /* HRD params */ fill_hrd_params (encoder, &GST_VAAPI_ENCODER_VA_HRD (encoder)); - return gst_vaapi_encoder_ensure_param_control_rate (base_encoder, picture); + return TRUE; } static gboolean @@ -1785,7 +1782,7 @@ ensure_misc_params (GstVaapiEncoderH265 * encoder, GstVaapiEncPicture * picture) { GstVaapiEncoder *const base_encoder = GST_VAAPI_ENCODER_CAST (encoder); - if (!ensure_control_rate_params (encoder, picture)) + if (!gst_vaapi_encoder_ensure_param_control_rate (base_encoder, picture)) return FALSE; if (!gst_vaapi_encoder_ensure_param_quality_level (base_encoder, picture)) return FALSE; @@ -2413,6 +2410,7 @@ gst_vaapi_encoder_h265_reconfigure (GstVaapiEncoder * base_encoder) return status; reset_properties (encoder); + ensure_control_rate_params (encoder); return set_context_info (base_encoder); } diff --git a/gst-libs/gst/vaapi/gstvaapiencoder_mpeg2.c b/gst-libs/gst/vaapi/gstvaapiencoder_mpeg2.c index e80443a7fd..2c284ee4b5 100644 --- a/gst-libs/gst/vaapi/gstvaapiencoder_mpeg2.c +++ b/gst-libs/gst/vaapi/gstvaapiencoder_mpeg2.c @@ -452,8 +452,7 @@ ensure_picture (GstVaapiEncoderMpeg2 * encoder, GstVaapiEncPicture * picture, } static gboolean -ensure_control_rate_params (GstVaapiEncoderMpeg2 * encoder, - GstVaapiEncPicture * picture) +ensure_control_rate_params (GstVaapiEncoderMpeg2 * encoder) { GstVaapiEncoder *const base_encoder = GST_VAAPI_ENCODER_CAST (encoder); @@ -476,7 +475,7 @@ ensure_control_rate_params (GstVaapiEncoderMpeg2 * encoder, }; /* *INDENT-ON* */ - return gst_vaapi_encoder_ensure_param_control_rate (base_encoder, picture); + return TRUE; } static gboolean @@ -485,7 +484,7 @@ set_misc_parameters (GstVaapiEncoderMpeg2 * encoder, { GstVaapiEncoder *const base_encoder = GST_VAAPI_ENCODER_CAST (encoder); - if (!ensure_control_rate_params (encoder, picture)) + if (!gst_vaapi_encoder_ensure_param_control_rate (base_encoder, picture)) return FALSE; if (!gst_vaapi_encoder_ensure_param_quality_level (base_encoder, picture)) return FALSE; @@ -713,6 +712,7 @@ gst_vaapi_encoder_mpeg2_reconfigure (GstVaapiEncoder * base_encoder) if (!ensure_bitrate (encoder)) goto error; + ensure_control_rate_params (encoder); return set_context_info (base_encoder); /* ERRORS */ diff --git a/gst-libs/gst/vaapi/gstvaapiencoder_vp8.c b/gst-libs/gst/vaapi/gstvaapiencoder_vp8.c index 11f6449212..3aa46e7a31 100644 --- a/gst-libs/gst/vaapi/gstvaapiencoder_vp8.c +++ b/gst-libs/gst/vaapi/gstvaapiencoder_vp8.c @@ -258,8 +258,7 @@ error: } static gboolean -ensure_control_rate_params (GstVaapiEncoderVP8 * encoder, - GstVaapiEncPicture * picture) +ensure_control_rate_params (GstVaapiEncoderVP8 * encoder) { GstVaapiEncoder *const base_encoder = GST_VAAPI_ENCODER_CAST (encoder); @@ -291,7 +290,7 @@ ensure_control_rate_params (GstVaapiEncoderVP8 * encoder, }; /* *INDENT-ON* */ - return gst_vaapi_encoder_ensure_param_control_rate (base_encoder, picture); + return TRUE; } static gboolean @@ -302,7 +301,7 @@ ensure_misc_params (GstVaapiEncoderVP8 * encoder, GstVaapiEncPicture * picture) if (!gst_vaapi_encoder_ensure_param_quality_level (base_encoder, picture)) return FALSE; - if (!ensure_control_rate_params (encoder, picture)) + if (!gst_vaapi_encoder_ensure_param_control_rate (base_encoder, picture)) return FALSE; return TRUE; @@ -510,6 +509,7 @@ gst_vaapi_encoder_vp8_reconfigure (GstVaapiEncoder * base_encoder) if (!ensure_bitrate (encoder)) goto error; + ensure_control_rate_params (encoder); return set_context_info (base_encoder); /* ERRORS */ -- 2.34.1