vaapipostproc: do not compensate for crop/direction if no VPP
authorU. Artie Eoff <ullysses.a.eoff@intel.com>
Fri, 21 Feb 2020 15:37:50 +0000 (07:37 -0800)
committerU. Artie Eoff <ullysses.a.eoff@intel.com>
Fri, 21 Feb 2020 16:49:06 +0000 (08:49 -0800)
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.

gst/vaapi/gstvaapipostproc.c
gst/vaapi/gstvaapipostprocutil.c

index 0fb75b8..ad2d75c 100644 (file)
@@ -718,6 +718,8 @@ rotate_crop_meta (GstVaapiPostproc * const postproc, const GstVideoMeta * vmeta,
 {
   guint tmp;
 
+  g_return_if_fail (postproc->has_vpp);
+
   /* The video meta is required since the caps width/height are smaller,
    * which would not result in a usable GstVideoInfo for mapping the
    * buffer. */
@@ -1559,15 +1561,17 @@ gst_vaapipostproc_prepare_output_buffer (GstBaseTransform * trans,
     info.width = video_meta->width;
     info.height = video_meta->height;
 
-    /* compensate for rotation if needed */
-    switch (gst_vaapi_filter_get_video_direction (postproc->filter)) {
-      case GST_VIDEO_ORIENTATION_90R:
-      case GST_VIDEO_ORIENTATION_UL_LR:
-      case GST_VIDEO_ORIENTATION_90L:
-      case GST_VIDEO_ORIENTATION_UR_LL:
-        G_PRIMITIVE_SWAP (guint, info.width, info.height);
-      default:
-        break;
+    if (postproc->has_vpp) {
+      /* compensate for rotation if needed */
+      switch (gst_vaapi_filter_get_video_direction (postproc->filter)) {
+        case GST_VIDEO_ORIENTATION_90R:
+        case GST_VIDEO_ORIENTATION_UL_LR:
+        case GST_VIDEO_ORIENTATION_90L:
+        case GST_VIDEO_ORIENTATION_UR_LL:
+          G_PRIMITIVE_SWAP (guint, info.width, info.height);
+        default:
+          break;
+      }
     }
 
     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 hd = GST_VIDEO_INFO_HEIGHT (&postproc->srcpad_info);
 
+  g_return_if_fail (postproc->has_vpp);
+
   switch (gst_vaapi_filter_get_video_direction (postproc->filter)) {
     case GST_VIDEO_ORIENTATION_90R:
     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)));
 
       structure = (GstStructure *) gst_event_get_structure (event);
-      if (gst_structure_get_double (structure, "pointer_x", &x) &&
-          gst_structure_get_double (structure, "pointer_y", &y)) {
+      if (postproc->has_vpp
+          && 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);
 
         /* video-direction compensation */
index 94ece02..715a449 100644 (file)
@@ -179,20 +179,22 @@ _fixate_frame_size (GstVaapiPostproc * postproc, GstVideoInfo * vinfo,
     from_w = GST_VIDEO_INFO_WIDTH (vinfo);
     from_h = GST_VIDEO_INFO_HEIGHT (vinfo);
 
-    /* adjust for crop settings */
-    from_w -= postproc->crop_left + postproc->crop_right;
-    from_h -= postproc->crop_top + postproc->crop_bottom;
-
-    /* compensate for rotation if needed */
-    switch (gst_vaapi_filter_get_video_direction (postproc->filter)) {
-      case GST_VIDEO_ORIENTATION_90R:
-      case GST_VIDEO_ORIENTATION_90L:
-      case GST_VIDEO_ORIENTATION_UL_LR:
-      case GST_VIDEO_ORIENTATION_UR_LL:
-        G_PRIMITIVE_SWAP (gint, from_w, from_h);
-        G_PRIMITIVE_SWAP (gint, from_par_n, from_par_d);
-      default:
-        break;
+    if (postproc->has_vpp) {
+      /* adjust for crop settings */
+      from_w -= postproc->crop_left + postproc->crop_right;
+      from_h -= postproc->crop_top + postproc->crop_bottom;
+
+      /* compensate for rotation if needed */
+      switch (gst_vaapi_filter_get_video_direction (postproc->filter)) {
+        case GST_VIDEO_ORIENTATION_90R:
+        case GST_VIDEO_ORIENTATION_90L:
+        case GST_VIDEO_ORIENTATION_UL_LR:
+        case GST_VIDEO_ORIENTATION_UR_LL:
+          G_PRIMITIVE_SWAP (gint, from_w, from_h);
+          G_PRIMITIVE_SWAP (gint, from_par_n, from_par_d);
+        default:
+          break;
+      }
     }
 
     gst_structure_get_int (outs, "width", &w);