mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-19 16:21:17 +00:00
libs: encoder: implements gst_vaapi_encoder_ensure_max_num_ref_frames
This function will query VAConfigAttribEncMaxRefFrames to get the maximum number of reference frames supported in the driver. This will be used for h264/h265 encoding. https://bugzilla.gnome.org/show_bug.cgi?id=783803
This commit is contained in:
parent
7d6a80e13d
commit
ec76a9a7e3
2 changed files with 53 additions and 0 deletions
|
@ -1511,6 +1511,49 @@ gst_vaapi_encoder_ensure_num_slices (GstVaapiEncoder * encoder,
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_vaapi_encoder_ensure_max_num_ref_frames:
|
||||||
|
* @encoder: a #GstVaapiEncoder
|
||||||
|
* @profile: a #GstVaapiProfile
|
||||||
|
* @entrypoint: a #GstVaapiEntrypoint
|
||||||
|
*
|
||||||
|
* This function will query VAConfigAttribEncMaxRefFrames to get the
|
||||||
|
* maximum number of reference frames in the driver,
|
||||||
|
* for both the reference picture list 0 (bottom 16 bits) and
|
||||||
|
* the reference picture list 1 (top 16 bits).
|
||||||
|
*
|
||||||
|
* We need to pass the @profile and the @entrypoint, because at the
|
||||||
|
* moment the encoder base class, still doesn't have them assigned,
|
||||||
|
* and this function is meant to be called by the derived classes
|
||||||
|
* while they are configured.
|
||||||
|
*
|
||||||
|
* Returns: %TRUE if the number of reference frames is different than zero.
|
||||||
|
**/
|
||||||
|
gboolean
|
||||||
|
gst_vaapi_encoder_ensure_max_num_ref_frames (GstVaapiEncoder * encoder,
|
||||||
|
GstVaapiProfile profile, GstVaapiEntrypoint entrypoint)
|
||||||
|
{
|
||||||
|
VAProfile va_profile;
|
||||||
|
VAEntrypoint va_entrypoint;
|
||||||
|
guint max_ref_frames;
|
||||||
|
|
||||||
|
va_profile = gst_vaapi_profile_get_va_profile (profile);
|
||||||
|
va_entrypoint = gst_vaapi_entrypoint_get_va_entrypoint (entrypoint);
|
||||||
|
|
||||||
|
if (!gst_vaapi_get_config_attribute (encoder->display, va_profile,
|
||||||
|
va_entrypoint, VAConfigAttribEncMaxRefFrames, &max_ref_frames)) {
|
||||||
|
/* Set the default the number of reference frames */
|
||||||
|
encoder->max_num_ref_frames_0 = 1;
|
||||||
|
encoder->max_num_ref_frames_1 = 0;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
encoder->max_num_ref_frames_0 = max_ref_frames & 0xffff;
|
||||||
|
encoder->max_num_ref_frames_1 = (max_ref_frames >> 16) & 0xffff;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_vaapi_encoder_add_roi:
|
* gst_vaapi_encoder_add_roi:
|
||||||
* @encoder: a #GstVaapiEncoder
|
* @encoder: a #GstVaapiEncoder
|
||||||
|
|
|
@ -261,6 +261,11 @@ struct _GstVaapiEncoder
|
||||||
guint bitrate; /* kbps */
|
guint bitrate; /* kbps */
|
||||||
guint keyframe_period;
|
guint keyframe_period;
|
||||||
|
|
||||||
|
/* Maximum number of reference frames supported
|
||||||
|
* for the reference picture list 0 and list 2 */
|
||||||
|
guint max_num_ref_frames_0;
|
||||||
|
guint max_num_ref_frames_1;
|
||||||
|
|
||||||
/* parameters */
|
/* parameters */
|
||||||
VAEncMiscParameterBufferQualityLevel va_quality_level;
|
VAEncMiscParameterBufferQualityLevel va_quality_level;
|
||||||
|
|
||||||
|
@ -411,6 +416,11 @@ gst_vaapi_encoder_ensure_num_slices (GstVaapiEncoder * encoder,
|
||||||
GstVaapiProfile profile, GstVaapiEntrypoint entrypoint,
|
GstVaapiProfile profile, GstVaapiEntrypoint entrypoint,
|
||||||
guint media_max_slices, guint * num_slices);
|
guint media_max_slices, guint * num_slices);
|
||||||
|
|
||||||
|
G_GNUC_INTERNAL
|
||||||
|
gboolean
|
||||||
|
gst_vaapi_encoder_ensure_max_num_ref_frames (GstVaapiEncoder * encoder,
|
||||||
|
GstVaapiProfile profile, GstVaapiEntrypoint entrypoint);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* GST_VAAPI_ENCODER_PRIV_H */
|
#endif /* GST_VAAPI_ENCODER_PRIV_H */
|
||||||
|
|
Loading…
Reference in a new issue