gst-plugin-aml-v4l2dec: CB1 add resulotion chagne for LGE [1/1]

PD#SWPL-81043

Problem:
When Gst cannot emit resulotion change,
the resource change event will stop buffer pool

Solution:
Ignore the resource chagne event after eos event from decoder

Verify:
AP212

Change-Id: Ica632cc2e7aa62ce4417709e81ba777fbc8ddedf
Signed-off-by: sheng.liu <sheng.liu@amlogic.com>
diff --git a/src/gstamlv4l2videodec.c b/src/gstamlv4l2videodec.c
index bf0fbde..3a022b7 100644
--- a/src/gstamlv4l2videodec.c
+++ b/src/gstamlv4l2videodec.c
@@ -685,6 +685,35 @@
 }
 
 static void
+gst_v4l2_drop_event (GstV4l2Object * v4l2object)
+{
+  struct v4l2_event evt;
+  gint ret;
+
+  memset (&evt, 0x00, sizeof (struct v4l2_event));
+  ret = v4l2object->ioctl (v4l2object->video_fd, VIDIOC_DQEVENT, &evt);
+  if (ret < 0)
+  {
+    GST_DEBUG_OBJECT (v4l2object, "dqevent failed");
+    return;
+  }
+
+  switch (evt.type)
+  {
+    case V4L2_EVENT_SOURCE_CHANGE:
+      GST_DEBUG_OBJECT (v4l2object, "Drop GST_V4L2_FLOW_SOURCE_CHANGE");
+      break;
+    case V4L2_EVENT_EOS:
+      GST_DEBUG_OBJECT (v4l2object, "Drop GST_V4L2_FLOW_LAST_BUFFER");
+      break;
+    default:
+      break;
+  }
+
+  return;
+}
+
+static void
 gst_aml_v4l2_video_dec_loop(GstVideoDecoder *decoder)
 {
     GstAmlV4l2VideoDec *self = GST_AML_V4L2_VIDEO_DEC(decoder);
@@ -742,6 +771,13 @@
             }
         }
 
+        if (self->v4l2capture->need_drop_event)
+        {
+          // drop V4L2_EVENT_SOURCE_CHANGE
+          gst_v4l2_drop_event(self->v4l2capture);
+          self->v4l2capture->need_drop_event = FALSE;
+        }
+
         if (!gst_aml_v4l2_object_acquire_format(self->v4l2capture, &info))
             goto not_negotiated;
 
@@ -836,6 +872,12 @@
         ret = gst_buffer_pool_acquire_buffer(pool, &buffer, NULL);
         g_object_unref(pool);
 
+        if (ret == GST_V4L2_FLOW_LAST_BUFFER) {
+          GST_LOG_OBJECT(decoder, "Get GST_V4L2_FLOW_LAST_BUFFER");
+          self->v4l2capture->need_drop_event = TRUE;
+          goto beach;
+        }
+
         if (ret == GST_AML_V4L2_FLOW_SOURCE_CHANGE)
         {
             GST_LOG_OBJECT(decoder, "Get GST_AML_V4L2_FLOW_SOURCE_CHANGE");
@@ -1299,6 +1341,7 @@
                                                 V4L2_BUF_TYPE_VIDEO_CAPTURE, klass->default_device,
                                                 gst_aml_v4l2_get_input, gst_aml_v4l2_set_input, NULL);
     self->v4l2capture->need_wait_event = TRUE;
+    self->v4l2capture->need_drop_event = FALSE;
 }
 
 static void