summaryrefslogtreecommitdiff
path: root/gst/vaapi/gstvaapiencode.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/vaapi/gstvaapiencode.c')
-rw-r--r--gst/vaapi/gstvaapiencode.c45
1 files changed, 16 insertions, 29 deletions
diff --git a/gst/vaapi/gstvaapiencode.c b/gst/vaapi/gstvaapiencode.c
index b573e188..f19f2213 100644
--- a/gst/vaapi/gstvaapiencode.c
+++ b/gst/vaapi/gstvaapiencode.c
@@ -366,19 +366,6 @@ get_profile (GstVaapiEncode * encode)
return GST_VAAPI_PROFILE_UNKNOWN;
}
-static GstVaapiEntrypoint
-get_entrypoint (GstVaapiEncode * encode, GstVaapiProfile profile)
-{
- GstVaapiEncoderTune tune = GST_VAAPI_ENCODER_TUNE_NONE;
-
- g_object_get (encode, "tune", &tune, NULL);
- if (tune == GST_VAAPI_ENCODER_TUNE_LOW_POWER)
- return GST_VAAPI_ENTRYPOINT_SLICE_ENCODE_LP;
- if (profile == GST_VAAPI_PROFILE_JPEG_BASELINE)
- return GST_VAAPI_ENTRYPOINT_PICTURE_ENCODE;
- return GST_VAAPI_ENTRYPOINT_SLICE_ENCODE;
-}
-
static gboolean
ensure_allowed_sinkpad_caps (GstVaapiEncode * encode)
{
@@ -390,6 +377,7 @@ ensure_allowed_sinkpad_caps (GstVaapiEncode * encode)
GstVaapiProfile profile;
guint i, size;
GstStructure *structure;
+ gint min_width, min_height, max_width, max_height;
if (encode->allowed_sinkpad_caps)
return TRUE;
@@ -397,19 +385,28 @@ ensure_allowed_sinkpad_caps (GstVaapiEncode * encode)
return TRUE;
profile = get_profile (encode);
- if (profile == GST_VAAPI_PROFILE_UNKNOWN)
- return TRUE;
/* First get all supported formats, all these formats should be recognized
in video-format map. */
- formats = gst_vaapi_encoder_get_surface_formats (encode->encoder, profile);
+ formats = gst_vaapi_encoder_get_surface_attributes (encode->encoder, profile,
+ &min_width, &min_height, &max_width, &max_height);
if (!formats)
- goto failed_get_formats;
+ goto failed_get_attributes;
raw_caps = gst_vaapi_video_format_new_template_caps_from_list (formats);
if (!raw_caps)
goto failed_create_raw_caps;
+ /* Set the width/height info to caps */
+ size = gst_caps_get_size (raw_caps);
+ for (i = 0; i < size; i++) {
+ structure = gst_caps_get_structure (raw_caps, i);
+ if (!structure)
+ continue;
+ gst_structure_set (structure, "width", GST_TYPE_INT_RANGE, min_width,
+ max_width, "height", GST_TYPE_INT_RANGE, min_height, max_height, NULL);
+ }
+
va_caps = gst_caps_copy (raw_caps);
gst_caps_set_features_simple (va_caps,
gst_caps_features_from_string (GST_CAPS_FEATURE_MEMORY_VAAPI_SURFACE));
@@ -424,16 +421,6 @@ ensure_allowed_sinkpad_caps (GstVaapiEncode * encode)
gst_caps_append (out_caps, va_caps);
gst_caps_append (out_caps, dma_caps);
- /* Last, set the width/height info to caps */
- size = gst_caps_get_size (out_caps);
- for (i = 0; i < size; i++) {
- structure = gst_caps_get_structure (out_caps, i);
- if (!structure)
- continue;
- gst_vaapi_profile_caps_append_encoder (GST_VAAPI_PLUGIN_BASE_DISPLAY
- (encode), profile, get_entrypoint (encode, profile), structure);
- }
-
gst_caps_replace (&encode->allowed_sinkpad_caps, out_caps);
GST_INFO_OBJECT (encode, "Allowed sink caps %" GST_PTR_FORMAT,
encode->allowed_sinkpad_caps);
@@ -452,9 +439,9 @@ bail:
g_array_unref (formats);
return ret;
-failed_get_formats:
+failed_get_attributes:
{
- GST_WARNING_OBJECT (encode, "failed to get allowed surface formats");
+ GST_WARNING_OBJECT (encode, "failed to get surface attributes");
goto bail;
}
failed_create_raw_caps: