vaapipostproc: do not compensate for crop/direction if no VPP

If we do not have functional VPP, then cropping and video
direction is non-functional and we should avoid calling
any of the gst_vaapi_filter* APIs.
This commit is contained in:
U. Artie Eoff 2020-02-21 07:37:50 -08:00
parent 39f2c932ee
commit 4573d3eefe
2 changed files with 33 additions and 24 deletions

View file

@ -718,6 +718,8 @@ rotate_crop_meta (GstVaapiPostproc * const postproc, const GstVideoMeta * vmeta,
{ {
guint tmp; guint tmp;
g_return_if_fail (postproc->has_vpp);
/* The video meta is required since the caps width/height are smaller, /* The video meta is required since the caps width/height are smaller,
* which would not result in a usable GstVideoInfo for mapping the * which would not result in a usable GstVideoInfo for mapping the
* buffer. */ * buffer. */
@ -1559,15 +1561,17 @@ gst_vaapipostproc_prepare_output_buffer (GstBaseTransform * trans,
info.width = video_meta->width; info.width = video_meta->width;
info.height = video_meta->height; info.height = video_meta->height;
/* compensate for rotation if needed */ if (postproc->has_vpp) {
switch (gst_vaapi_filter_get_video_direction (postproc->filter)) { /* compensate for rotation if needed */
case GST_VIDEO_ORIENTATION_90R: switch (gst_vaapi_filter_get_video_direction (postproc->filter)) {
case GST_VIDEO_ORIENTATION_UL_LR: case GST_VIDEO_ORIENTATION_90R:
case GST_VIDEO_ORIENTATION_90L: case GST_VIDEO_ORIENTATION_UL_LR:
case GST_VIDEO_ORIENTATION_UR_LL: case GST_VIDEO_ORIENTATION_90L:
G_PRIMITIVE_SWAP (guint, info.width, info.height); case GST_VIDEO_ORIENTATION_UR_LL:
default: G_PRIMITIVE_SWAP (guint, info.width, info.height);
break; default:
break;
}
} }
ensure_buffer_pool (postproc, &info); ensure_buffer_pool (postproc, &info);
@ -1765,6 +1769,8 @@ get_scale_factor (GstVaapiPostproc * const postproc, gdouble * w_factor,
gdouble wd = GST_VIDEO_INFO_WIDTH (&postproc->srcpad_info); gdouble wd = GST_VIDEO_INFO_WIDTH (&postproc->srcpad_info);
gdouble hd = GST_VIDEO_INFO_HEIGHT (&postproc->srcpad_info); gdouble hd = GST_VIDEO_INFO_HEIGHT (&postproc->srcpad_info);
g_return_if_fail (postproc->has_vpp);
switch (gst_vaapi_filter_get_video_direction (postproc->filter)) { switch (gst_vaapi_filter_get_video_direction (postproc->filter)) {
case GST_VIDEO_ORIENTATION_90R: case GST_VIDEO_ORIENTATION_90R:
case GST_VIDEO_ORIENTATION_90L: case GST_VIDEO_ORIENTATION_90L:
@ -1801,8 +1807,9 @@ gst_vaapipostproc_src_event (GstBaseTransform * trans, GstEvent * event)
GST_EVENT (gst_mini_object_make_writable (GST_MINI_OBJECT (event))); GST_EVENT (gst_mini_object_make_writable (GST_MINI_OBJECT (event)));
structure = (GstStructure *) gst_event_get_structure (event); structure = (GstStructure *) gst_event_get_structure (event);
if (gst_structure_get_double (structure, "pointer_x", &x) && if (postproc->has_vpp
gst_structure_get_double (structure, "pointer_y", &y)) { && gst_structure_get_double (structure, "pointer_x", &x)
&& gst_structure_get_double (structure, "pointer_y", &y)) {
GST_DEBUG_OBJECT (postproc, "converting %fx%f", x, y); GST_DEBUG_OBJECT (postproc, "converting %fx%f", x, y);
/* video-direction compensation */ /* video-direction compensation */

View file

@ -179,20 +179,22 @@ _fixate_frame_size (GstVaapiPostproc * postproc, GstVideoInfo * vinfo,
from_w = GST_VIDEO_INFO_WIDTH (vinfo); from_w = GST_VIDEO_INFO_WIDTH (vinfo);
from_h = GST_VIDEO_INFO_HEIGHT (vinfo); from_h = GST_VIDEO_INFO_HEIGHT (vinfo);
/* adjust for crop settings */ if (postproc->has_vpp) {
from_w -= postproc->crop_left + postproc->crop_right; /* adjust for crop settings */
from_h -= postproc->crop_top + postproc->crop_bottom; from_w -= postproc->crop_left + postproc->crop_right;
from_h -= postproc->crop_top + postproc->crop_bottom;
/* compensate for rotation if needed */ /* compensate for rotation if needed */
switch (gst_vaapi_filter_get_video_direction (postproc->filter)) { switch (gst_vaapi_filter_get_video_direction (postproc->filter)) {
case GST_VIDEO_ORIENTATION_90R: case GST_VIDEO_ORIENTATION_90R:
case GST_VIDEO_ORIENTATION_90L: case GST_VIDEO_ORIENTATION_90L:
case GST_VIDEO_ORIENTATION_UL_LR: case GST_VIDEO_ORIENTATION_UL_LR:
case GST_VIDEO_ORIENTATION_UR_LL: case GST_VIDEO_ORIENTATION_UR_LL:
G_PRIMITIVE_SWAP (gint, from_w, from_h); G_PRIMITIVE_SWAP (gint, from_w, from_h);
G_PRIMITIVE_SWAP (gint, from_par_n, from_par_d); G_PRIMITIVE_SWAP (gint, from_par_n, from_par_d);
default: default:
break; break;
}
} }
gst_structure_get_int (outs, "width", &w); gst_structure_get_int (outs, "width", &w);