va: basedec: copy frames logic to decide_allocation()
authorVíctor Manuel Jáquez Leal <vjaquez@igalia.com>
Fri, 9 Oct 2020 14:00:18 +0000 (16:00 +0200)
committerGStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Sat, 10 Oct 2020 17:18:04 +0000 (17:18 +0000)
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1673>

sys/va/gstvabasedec.c
sys/va/gstvabasedec.h
sys/va/gstvah264dec.c
sys/va/gstvavp8dec.c

index 719f2c36d236a401297c18e549bcb604cf50d3b9..b9078cedbb6d0d8358f14b5c165fd6dbeef4be07 100644 (file)
@@ -323,6 +323,15 @@ gst_va_base_dec_decide_allocation (GstVideoDecoder * decoder, GstQuery * query)
   else
     gst_query_add_allocation_pool (query, pool, size, min, max);
 
+  if (!base->has_videometa) {
+    if ((base->copy_frames = gst_va_pool_requires_video_meta (pool))) {
+      GST_INFO_OBJECT (base, "Raw frame copy enabled.");
+      _create_other_pool (base, other_allocator, &other_params, caps, size);
+    }
+  }
+  if (!base->copy_frames)
+    gst_clear_object (&base->other_pool);
+
   gst_object_unref (allocator);
   gst_object_unref (pool);
 
index c80cb08270fa82e3c6fa178000f4d444e11cef1e..31fcbdab3357e6584de1052b259dade019a752c2 100644 (file)
@@ -65,6 +65,8 @@ struct _GstVaBaseDec
   GstVideoAlignment valign;
 
   gboolean has_videometa;
+
+  gboolean copy_frames;
 };
 
 struct _GstVaBaseDecClass
index 656ba9966526491abeb3001e3a905cec1f4b572a..6f61fc8c4a4d6e17d2bf940a2aa0e50583fbd415 100644 (file)
@@ -52,7 +52,6 @@
 #include "gstvah264dec.h"
 
 #include "gstvabasedec.h"
-#include "gstvapool.h"
 
 GST_DEBUG_CATEGORY_STATIC (gst_va_h264dec_debug);
 #ifndef GST_DISABLE_GST_DEBUG
@@ -84,7 +83,6 @@ struct _GstVaH264Dec
   gint dpb_size;
 
   gboolean need_negotiation;
-  gboolean copy_frames;
 };
 
 #define parent_class gst_va_base_dec_parent_class
@@ -115,6 +113,7 @@ static GstFlowReturn
 gst_va_h264_dec_output_picture (GstH264Decoder * decoder,
     GstVideoCodecFrame * frame, GstH264Picture * picture)
 {
+  GstVaBaseDec *base = GST_VA_BASE_DEC (decoder);
   GstVaH264Dec *self = GST_VA_H264_DEC (decoder);
 
   GST_LOG_OBJECT (self,
@@ -126,8 +125,8 @@ gst_va_h264_dec_output_picture (GstH264Decoder * decoder,
     return self->last_ret;
   }
 
-  if (self->copy_frames)
-    gst_va_base_dec_copy_output_buffer (GST_VA_BASE_DEC (self), frame);
+  if (base->copy_frames)
+    gst_va_base_dec_copy_output_buffer (base, frame);
 
   gst_h264_picture_unref (picture);
 
@@ -668,17 +667,6 @@ gst_va_h264_dec_new_sequence (GstH264Decoder * decoder, const GstH264SPS * sps,
     }
   }
 
-  if (!base->has_videometa) {
-    GstBufferPool *pool;
-
-    pool = gst_video_decoder_get_buffer_pool (GST_VIDEO_DECODER (self));
-    self->copy_frames = gst_va_pool_requires_video_meta (pool);
-    gst_object_unref (pool);
-
-    if (self->copy_frames)
-      GST_INFO_OBJECT (self, "Raw frame copy enabled.");
-  }
-
   return TRUE;
 }
 
index 279457c51b005c151eb6a374285072304fb6f26c..3457a4b2cb1ba978b69168336de59ce8173fece2 100644 (file)
@@ -46,7 +46,6 @@
 #include "gstvavp8dec.h"
 
 #include "gstvabasedec.h"
-#include "gstvapool.h"
 
 GST_DEBUG_CATEGORY_STATIC (gst_va_vp8dec_debug);
 #ifndef GST_DISABLE_GST_DEBUG
@@ -74,7 +73,6 @@ struct _GstVaVp8Dec
   GstFlowReturn last_ret;
 
   gboolean need_negotiation;
-  gboolean copy_frames;
 };
 
 #define parent_class gst_va_base_dec_parent_class
@@ -189,14 +187,6 @@ gst_va_vp8_dec_new_sequence (GstVp8Decoder * decoder,
     }
   }
 
-  if (!base->has_videometa) {
-    GstBufferPool *pool;
-
-    pool = gst_video_decoder_get_buffer_pool (GST_VIDEO_DECODER (self));
-    self->copy_frames = gst_va_pool_requires_video_meta (pool);
-    gst_object_unref (pool);
-  }
-
   return TRUE;
 }
 
@@ -460,6 +450,7 @@ static GstFlowReturn
 gst_va_vp8_dec_output_picture (GstVp8Decoder * decoder,
     GstVideoCodecFrame * frame, GstVp8Picture * picture)
 {
+  GstVaBaseDec *base = GST_VA_BASE_DEC (decoder);
   GstVaVp8Dec *self = GST_VA_VP8_DEC (decoder);
 
   GST_LOG_OBJECT (self,
@@ -472,8 +463,8 @@ gst_va_vp8_dec_output_picture (GstVp8Decoder * decoder,
     return self->last_ret;
   }
 
-  if (self->copy_frames)
-    gst_va_base_dec_copy_output_buffer (GST_VA_BASE_DEC (self), frame);
+  if (base->copy_frames)
+    gst_va_base_dec_copy_output_buffer (base, frame);
 
   gst_vp8_picture_unref (picture);