avs_mtk_voice/meta/meta-mediatek/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0005-gstreamer-upgrade-add-...

108 lines
3.7 KiB
Diff

From 362b003e7a7d7399a09b06b51fcf3191ff8983d7 Mon Sep 17 00:00:00 2001
From: Changtao Hu <changtao.hu@mediatek.com>
Date: Thu, 22 Jun 2017 11:04:11 +0800
Subject: [PATCH] gstreamer upgrade: add mdp plugin into playbin
Make patch for gstreamer upgrade
Test: OK
Signed-off-by: Changtao Hu <changtao.hu@mediatek.com>
CR-Id: AUTO00005189
---
gst/playback/gstdecodebin2.c | 2 +-
gst/playback/gstplaybin2.c | 5 ++++-
gst/playback/gstplaysink.c | 47 ++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 52 insertions(+), 2 deletions(-)
diff --git a/gst/playback/gstdecodebin2.c b/gst/playback/gstdecodebin2.c
index 7eb89da..b2ff939 100644
--- a/gst/playback/gstdecodebin2.c
+++ b/gst/playback/gstdecodebin2.c
@@ -240,7 +240,7 @@ enum
/* when playing, keep a max of 2MB of data but try to keep the number of buffers
* as low as possible (try to aim for 5 buffers) */
-#define AUTO_PLAY_SIZE_BYTES 2 * 1024 * 1024
+#define AUTO_PLAY_SIZE_BYTES 10 * 1024 * 1024
#define AUTO_PLAY_SIZE_BUFFERS 5
#define AUTO_PLAY_SIZE_TIME 0
diff --git a/gst/playback/gstplaybin2.c b/gst/playback/gstplaybin2.c
index ad63600..80e210c 100644
--- a/gst/playback/gstplaybin2.c
+++ b/gst/playback/gstplaybin2.c
@@ -4691,7 +4691,10 @@ autoplug_select_cb (GstElement * decodebin, GstPad * pad,
gst_element_factory_can_src_any_caps (factory, raw_caps)
|| gst_element_factory_can_src_any_caps (factory, caps);
} else {
- compatible = gst_element_factory_can_src_any_caps (factory, caps);
+ if (flags & GST_PLAY_FLAG_NATIVE_VIDEO)
+ compatible = gst_element_factory_can_src_any_caps (factory, raw_caps);
+ else
+ compatible = gst_element_factory_can_src_any_caps (factory, caps);
}
gst_object_unref (sinkpad);
diff --git a/gst/playback/gstplaysink.c b/gst/playback/gstplaysink.c
index e17c439..4dabc6c 100644
--- a/gst/playback/gstplaysink.c
+++ b/gst/playback/gstplaysink.c
@@ -1926,7 +1926,54 @@ gen_video_chain (GstPlaySink * playsink, gboolean raw, gboolean async)
}
prev = chain->conv;
}
+ else if (playsink->flags & GST_PLAY_FLAG_NATIVE_VIDEO) {
+ GstElement *elem = NULL;
+ GstIterator *iter = NULL;
+ GValue value = { 0 };
+ gboolean done = FALSE;
+ gboolean found_mdp = FALSE;
+
+ iter = gst_bin_iterate_elements (playsink->video_sink);
+ if (iter != NULL) {
+ while (!done) {
+ switch (gst_iterator_next (iter, &value)) {
+ case GST_ITERATOR_OK:
+ elem = (GstElement *) g_value_get_object (&value);
+ GST_DEBUG_OBJECT (playsink, "element->name=%s", GST_ELEMENT_NAME (elem));
+ if (strstr (GST_ELEMENT_NAME (elem), "mtkmdp")) {
+ done = TRUE;
+ found_mdp = TRUE;
+ }
+ /* Iterator increased the element refcount, so unref */
+ g_value_unset (&value);
+ break;
+ default:
+ done = TRUE;
+ break;
+ }
+ }
+ gst_iterator_free (iter);
+ }
+ if (found_mdp == FALSE) {
+ GST_DEBUG_OBJECT (playsink, "mdp_plugin == NULL");
+ chain->conv = gst_element_factory_make ("mtkmdp", "mtkmdp");
+ if (chain->conv == NULL) {
+ GST_WARNING_OBJECT (playsink, "no mtkmdp plugin");
+ }
+ else {
+ gst_bin_add (bin, chain->conv);
+ if (prev) {
+ if (!gst_element_link_pads_full (prev, "src", chain->conv, "sink",
+ GST_PAD_LINK_CHECK_TEMPLATE_CAPS))
+ goto link_failed;
+ } else {
+ head = chain->conv;
+ }
+ prev = chain->conv;
+ }
+ }
+ }
update_colorbalance (playsink);
if (prev) {
--
1.9.1