diff options
28 files changed, 0 insertions, 2348 deletions
diff --git a/common/recipes-bsp/grub/files/autogen.sh-exclude-pc.patch b/common/recipes-bsp/grub/files/autogen.sh-exclude-pc.patch deleted file mode 100644 index fc5aa4e3..00000000 --- a/common/recipes-bsp/grub/files/autogen.sh-exclude-pc.patch +++ /dev/null @@ -1,34 +0,0 @@ -From ff8f68cc48fd3c30d55e1d570d51f2e0952c968e Mon Sep 17 00:00:00 2001 -From: Robert Yang <liezhi.yang@windriver.com> -Date: Sat, 25 Jan 2014 23:49:44 -0500 -Subject: [PATCH] autogen.sh: exclude .pc from po/POTFILES.in - -Exclude the .pc from po/POTFILES.in since quilt uses "patch --backup", -which will create the backup file under .pc, this may cause unexpected -errors, for example, on CentOS 5.x, if the backup file is null -(newfile), it's mode will be 000, then we will get errors when xgettext -try to read it. - -Upstream-Status: Inappropriate [OE specific] - -Signed-off-by: Robert Yang <liezhi.yang@windriver.com> ---- - autogen.sh | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/autogen.sh b/autogen.sh -index 7424428..843619e 100755 ---- a/autogen.sh -+++ b/autogen.sh -@@ -5,7 +5,7 @@ set -e - export LC_COLLATE=C - unset LC_ALL - --find . -iname '*.[ch]' ! -ipath './grub-core/lib/libgcrypt-grub/*' ! -ipath './build-aux/*' ! -ipath './grub-core/lib/libgcrypt/src/misc.c' ! -ipath './grub-core/lib/libgcrypt/src/global.c' ! -ipath './grub-core/lib/libgcrypt/src/secmem.c' ! -ipath './util/grub-gen-widthspec.c' ! -ipath './util/grub-gen-asciih.c' |sort > po/POTFILES.in -+find . -iname '*.[ch]' ! -ipath './grub-core/lib/libgcrypt-grub/*' ! -ipath './build-aux/*' ! -ipath './grub-core/lib/libgcrypt/src/misc.c' ! -ipath './grub-core/lib/libgcrypt/src/global.c' ! -ipath './grub-core/lib/libgcrypt/src/secmem.c' ! -ipath './util/grub-gen-widthspec.c' ! -ipath './util/grub-gen-asciih.c' ! -path './.pc/*' | sort > po/POTFILES.in - find util -iname '*.in' ! -name Makefile.in |sort > po/POTFILES-shell.in - - echo "Importing unicode..." --- -1.7.10.4 - diff --git a/common/recipes-graphics/mesa/mesa/0001-radeonsi-always-set-all-blend-registers.patch b/common/recipes-graphics/mesa/mesa/0001-radeonsi-always-set-all-blend-registers.patch deleted file mode 100644 index ed2e91e1..00000000 --- a/common/recipes-graphics/mesa/mesa/0001-radeonsi-always-set-all-blend-registers.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 39bdbca891a49b51273268de62e8a4db1009cbe5 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= <marek.olsak@amd.com> -Date: Sat, 26 Nov 2016 15:39:06 +0100 -Subject: [PATCH 1/3] radeonsi: always set all blend registers - -Signed-off-by: Avinash M N <avimn@amd.com> ---- - src/gallium/drivers/radeonsi/si_state.c | 9 ++++----- - 1 file changed, 4 insertions(+), 5 deletions(-) - -diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c -index 2cef615..d71be56 100644 ---- a/src/gallium/drivers/radeonsi/si_state.c -+++ b/src/gallium/drivers/radeonsi/si_state.c -@@ -461,16 +461,15 @@ static void *si_create_blend_state_mode(struct pipe_context *ctx, - S_028760_ALPHA_COMB_FCN(V_028760_OPT_COMB_BLEND_DISABLED); - - /* Only set dual source blending for MRT0 to avoid a hang. */ -- if (i >= 1 && blend->dual_src_blend) -- continue; -- -- if (!state->rt[j].colormask) -+ if (i >= 1 && blend->dual_src_blend) { -+ si_pm4_set_reg(pm4, R_028780_CB_BLEND0_CONTROL + i * 4, blend_cntl); - continue; -+ } - - /* cb_render_state will disable unused ones */ - blend->cb_target_mask |= (unsigned)state->rt[j].colormask << (4 * i); - -- if (!state->rt[j].blend_enable) { -+ if (!state->rt[j].colormask || !state->rt[j].blend_enable) { - si_pm4_set_reg(pm4, R_028780_CB_BLEND0_CONTROL + i * 4, blend_cntl); - continue; - } --- -2.7.4 - diff --git a/common/recipes-graphics/mesa/mesa/0002-radeonsi-set-CB_BLEND1_CONTROL.ENABLE-for-dual-sourc.patch b/common/recipes-graphics/mesa/mesa/0002-radeonsi-set-CB_BLEND1_CONTROL.ENABLE-for-dual-sourc.patch deleted file mode 100644 index 4b7ecc1c..00000000 --- a/common/recipes-graphics/mesa/mesa/0002-radeonsi-set-CB_BLEND1_CONTROL.ENABLE-for-dual-sourc.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 3f6039e2e1fd5504ec4971f68b0ec09b3b7899f8 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= <marek.olsak@amd.com> -Date: Sat, 26 Nov 2016 15:43:39 +0100 -Subject: [PATCH 2/3] radeonsi: set CB_BLEND1_CONTROL.ENABLE for dual source - blending - -Signed-off-by: Avinash M N <avimn@amd.com> ---- - src/gallium/drivers/radeonsi/si_state.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c -index d71be56..349bcaa 100644 ---- a/src/gallium/drivers/radeonsi/si_state.c -+++ b/src/gallium/drivers/radeonsi/si_state.c -@@ -462,6 +462,10 @@ static void *si_create_blend_state_mode(struct pipe_context *ctx, - - /* Only set dual source blending for MRT0 to avoid a hang. */ - if (i >= 1 && blend->dual_src_blend) { -+ /* Vulkan does this for dual source blending. */ -+ if (i == 1) -+ blend_cntl |= S_028780_ENABLE(1); -+ - si_pm4_set_reg(pm4, R_028780_CB_BLEND0_CONTROL + i * 4, blend_cntl); - continue; - } --- -2.7.4 - diff --git a/common/recipes-graphics/mesa/mesa/0003-radeonsi-disable-RB-blend-optimizations-for-dual-sou.patch b/common/recipes-graphics/mesa/mesa/0003-radeonsi-disable-RB-blend-optimizations-for-dual-sou.patch deleted file mode 100644 index b06091f7..00000000 --- a/common/recipes-graphics/mesa/mesa/0003-radeonsi-disable-RB-blend-optimizations-for-dual-sou.patch +++ /dev/null @@ -1,36 +0,0 @@ -From e130c192cb70df096aef57b2a308ccafe3228ceb Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= <marek.olsak@amd.com> -Date: Sat, 26 Nov 2016 15:52:05 +0100 -Subject: [PATCH 3/3] radeonsi: disable RB+ blend optimizations for dual source - blending - -Signed-off-by: Avinash M N <avimn@amd.com> ---- - src/gallium/drivers/radeonsi/si_state.c | 11 +++++++++++ - 1 file changed, 11 insertions(+) - -diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c -index 349bcaa..b51c74d 100644 ---- a/src/gallium/drivers/radeonsi/si_state.c -+++ b/src/gallium/drivers/radeonsi/si_state.c -@@ -554,6 +554,17 @@ static void *si_create_blend_state_mode(struct pipe_context *ctx, - } - - if (sctx->b.family == CHIP_STONEY) { -+ /* Disable RB+ blend optimizations for dual source blending. -+ * Vulkan does this. -+ */ -+ if (blend->dual_src_blend) { -+ for (int i = 0; i < 8; i++) { -+ sx_mrt_blend_opt[i] = -+ S_028760_COLOR_COMB_FCN(V_028760_OPT_COMB_NONE) | -+ S_028760_ALPHA_COMB_FCN(V_028760_OPT_COMB_NONE); -+ } -+ } -+ - for (int i = 0; i < 8; i++) - si_pm4_set_reg(pm4, R_028760_SX_MRT0_BLEND_OPT + i * 4, - sx_mrt_blend_opt[i]); --- -2.7.4 - diff --git a/common/recipes-kernel/linux/files/0307-drm-radeon-Modify-kgd_engine_type-enum-to-match-CZ.patch b/common/recipes-kernel/linux/files/0307-drm-radeon-Modify-kgd_engine_type-enum-to-match-CZ.patch deleted file mode 100644 index 95cf4372..00000000 --- a/common/recipes-kernel/linux/files/0307-drm-radeon-Modify-kgd_engine_type-enum-to-match-CZ.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 22801f76fa59870aed2c0b8a4eb6c8d6993347ae Mon Sep 17 00:00:00 2001 -From: Oded Gabbay <oded.gabbay@gmail.com> -Date: Mon, 19 Jan 2015 16:20:21 +0200 -Subject: [PATCH 0307/1050] drm/radeon: Modify kgd_engine_type enum to match CZ - -This patch splits the KGD_ENGINE_SDMA to KGD_ENGINE_SDMA1 and -KGD_ENGINE_SDMA2 to match CZ definitions. - -Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com> ---- - drivers/gpu/drm/amd/include/kgd_kfd_interface.h | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h -index 9080daa..888250b 100644 ---- a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h -+++ b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h -@@ -52,7 +52,8 @@ enum kgd_engine_type { - KGD_ENGINE_MEC1, - KGD_ENGINE_MEC2, - KGD_ENGINE_RLC, -- KGD_ENGINE_SDMA, -+ KGD_ENGINE_SDMA1, -+ KGD_ENGINE_SDMA2, - KGD_ENGINE_MAX - }; - --- -1.9.1 - diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-gstomxvideodec-fix-multithreads-negotiation-problem-.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-gstomxvideodec-fix-multithreads-negotiation-problem-.patch deleted file mode 100644 index 28078995..00000000 --- a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-gstomxvideodec-fix-multithreads-negotiation-problem-.patch +++ /dev/null @@ -1,36 +0,0 @@ -From c223d8863624a93cd969b421b302df5d74f7fbaf Mon Sep 17 00:00:00 2001 -From: Leo Liu <leo.liu@amd.com> -Date: Thu, 7 Nov 2013 13:13:19 -0500 -Subject: [PATCH 01/11] gstomxvideodec: fix multithreads negotiation problem - v2 -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -v2: update comment text - -Signed-off-by: Leo Liu <leo.liu@amd.com> -Signed-off-by: Christian König <christian.koenig@amd.com> ---- - omx/gstomxvideodec.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c -index bf44b3d..0d8801e 100644 ---- a/omx/gstomxvideodec.c -+++ b/omx/gstomxvideodec.c -@@ -2675,6 +2675,11 @@ gst_omx_video_dec_set_format (GstVideoDecoder * decoder, - if (!gst_omx_video_dec_negotiate (self)) - GST_LOG_OBJECT (self, "Negotiation failed, will get output format later"); - -+ /* Make sure other threads are done enabling it */ -+ if (gst_omx_port_wait_enabled (self->dec_out_port, -+ 1 * GST_SECOND) != OMX_ErrorNone) -+ return FALSE; -+ - /* Disable output port */ - if (gst_omx_port_set_enabled (self->dec_out_port, FALSE) != OMX_ErrorNone) - return FALSE; --- -1.7.9.5 - diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-gstomxvideoenc-use-scaling-default-macro-s.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-gstomxvideoenc-use-scaling-default-macro-s.patch deleted file mode 100644 index b5cdb082..00000000 --- a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-gstomxvideoenc-use-scaling-default-macro-s.patch +++ /dev/null @@ -1,59 +0,0 @@ -From ca0e2ccb9323129b69036094145afa872799ce53 Mon Sep 17 00:00:00 2001 -From: Arindam Nath <arindam.nath@amd.com> -Date: Fri, 31 Jul 2015 11:51:22 +0530 -Subject: [PATCH 1/4] gstomxvideoenc: use scaling default macro's - -* use #define macros instead of hardcoded value for default -* if omx failed to set the request scaling parameter then use default scaling value - -Signed-off-by: Brijesh Singh <brijeshkumar.singh@amd.com> -Signed-off-by: Arindam Nath <arindam.nath@amd.com> ---- - omx/gstomxvideoenc.c | 12 ++++++++---- - 1 file changed, 8 insertions(+), 4 deletions(-) - -diff --git a/omx/gstomxvideoenc.c b/omx/gstomxvideoenc.c -index f42ec13..1a0ecea 100644 ---- a/omx/gstomxvideoenc.c -+++ b/omx/gstomxvideoenc.c -@@ -395,8 +395,8 @@ gst_omx_video_enc_open (GstVideoEncoder * encoder) - } - } - -- if (self->scaling_width != 0xffffffff || -- self->scaling_height != 0xffffffff) { -+ if (self->scaling_width != GST_OMX_VIDEO_ENC_SCALING_WIDTH_DEFAULT || -+ self->scaling_height != GST_OMX_VIDEO_ENC_SCALING_HEIGHT_DEFAULT) { - OMX_CONFIG_SCALEFACTORTYPE scale_factor; - GST_OMX_INIT_STRUCT (&scale_factor); - scale_factor.nPortIndex = self->enc_out_port->index; -@@ -406,9 +406,9 @@ gst_omx_video_enc_open (GstVideoEncoder * encoder) - - if (err == OMX_ErrorNone) { - -- if (self->scaling_width != 0xffffffff) -+ if (self->scaling_width != GST_OMX_VIDEO_ENC_SCALING_WIDTH_DEFAULT) - scale_factor.xWidth = self->scaling_width; -- if (self->scaling_height != 0xffffffff) -+ if (self->scaling_height != GST_OMX_VIDEO_ENC_SCALING_HEIGHT_DEFAULT) - scale_factor.xHeight = self->scaling_height; - - err = -@@ -417,10 +417,14 @@ gst_omx_video_enc_open (GstVideoEncoder * encoder) - if (err == OMX_ErrorUnsupportedIndex) { - GST_WARNING_OBJECT (self, - "Setting scale configuration not supported by the component"); -+ self->scaling_width = GST_OMX_VIDEO_ENC_SCALING_WIDTH_DEFAULT; -+ self->scaling_height = GST_OMX_VIDEO_ENC_SCALING_HEIGHT_DEFAULT; - } else if (err == OMX_ErrorUnsupportedSetting) { - GST_WARNING_OBJECT (self, - "Setting scale configuration %u %u not supported by the component", - self->scaling_width, self->scaling_height); -+ self->scaling_width = GST_OMX_VIDEO_ENC_SCALING_WIDTH_DEFAULT; -+ self->scaling_height = GST_OMX_VIDEO_ENC_SCALING_HEIGHT_DEFAULT; - } else if (err != OMX_ErrorNone) { - GST_ERROR_OBJECT (self, - "Failed to set scale configuration: %s (0x%08x)", --- -1.9.1 - diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0002-gstomxvideodec-remove-dead-code.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0002-gstomxvideodec-remove-dead-code.patch deleted file mode 100644 index 305e8b20..00000000 --- a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0002-gstomxvideodec-remove-dead-code.patch +++ /dev/null @@ -1,99 +0,0 @@ -From 45a91c687ea3a2ce80fcffcdea413b9dcac55242 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> -Date: Thu, 5 Sep 2013 02:05:52 -0600 -Subject: [PATCH 02/11] gstomxvideodec: remove dead code -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This code doesn't seems to be used for quite a while, -remove it before it starts to rot. - -Signed-off-by: Christian König <christian.koenig@amd.com> ---- - omx/gstomxvideodec.c | 48 +----------------------------------------------- - 1 file changed, 1 insertion(+), 47 deletions(-) - -diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c -index 0d8801e..6b5cbe3 100644 ---- a/omx/gstomxvideodec.c -+++ b/omx/gstomxvideodec.c -@@ -1008,19 +1008,13 @@ gst_omx_video_dec_change_state (GstElement * element, GstStateChange transition) - return ret; - } - --#define MAX_FRAME_DIST_TICKS (5 * OMX_TICKS_PER_SECOND) --#define MAX_FRAME_DIST_FRAMES (100) -- - static GstVideoCodecFrame * - _find_nearest_frame (GstOMXVideoDec * self, GstOMXBuffer * buf) - { -- GList *l, *best_l = NULL; -- GList *finish_frames = NULL; - GstVideoCodecFrame *best = NULL; -- guint64 best_timestamp = 0; - guint64 best_diff = G_MAXUINT64; -- BufferIdentification *best_id = NULL; - GList *frames; -+ GList *l; - - frames = gst_video_decoder_get_frames (GST_VIDEO_DECODER (self)); - -@@ -1045,10 +1039,7 @@ _find_nearest_frame (GstOMXVideoDec * self, GstOMXBuffer * buf) - - if (best == NULL || diff < best_diff) { - best = tmp; -- best_timestamp = timestamp; - best_diff = diff; -- best_l = l; -- best_id = id; - - /* For frames without timestamp we simply take the first frame */ - if ((buf->omx_buf->nTimeStamp == 0 && timestamp == 0) || diff == 0) -@@ -1056,43 +1047,6 @@ _find_nearest_frame (GstOMXVideoDec * self, GstOMXBuffer * buf) - } - } - -- if (FALSE && best_id) { -- for (l = frames; l && l != best_l; l = l->next) { -- GstVideoCodecFrame *tmp = l->data; -- BufferIdentification *id = gst_video_codec_frame_get_user_data (tmp); -- guint64 diff_ticks, diff_frames; -- -- /* This happens for frames that were just added but -- * which were not passed to the component yet. Ignore -- * them here! -- */ -- if (!id) -- continue; -- -- if (id->timestamp > best_timestamp) -- break; -- -- if (id->timestamp == 0 || best_timestamp == 0) -- diff_ticks = 0; -- else -- diff_ticks = best_timestamp - id->timestamp; -- diff_frames = best->system_frame_number - tmp->system_frame_number; -- -- if (diff_ticks > MAX_FRAME_DIST_TICKS -- || diff_frames > MAX_FRAME_DIST_FRAMES) { -- finish_frames = -- g_list_prepend (finish_frames, gst_video_codec_frame_ref (tmp)); -- } -- } -- } -- -- if (FALSE && finish_frames) { -- g_warning ("Too old frames, bug in decoder -- please file a bug"); -- for (l = finish_frames; l; l = l->next) { -- gst_video_decoder_drop_frame (GST_VIDEO_DECODER (self), l->data); -- } -- } -- - if (best) - gst_video_codec_frame_ref (best); - --- -1.7.9.5 - diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0002-gstomxvideoenc-fix-srcpad-caps-when-scaling-property.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0002-gstomxvideoenc-fix-srcpad-caps-when-scaling-property.patch deleted file mode 100644 index f1952e8d..00000000 --- a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0002-gstomxvideoenc-fix-srcpad-caps-when-scaling-property.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 647b180a8805f9f8b5fdd35c1bbc0a8e03d3e91f Mon Sep 17 00:00:00 2001 -From: Arindam Nath <arindam.nath@amd.com> -Date: Fri, 31 Jul 2015 12:36:36 +0530 -Subject: [PATCH 2/4] gstomxvideoenc: fix srcpad caps when scaling property is - specified - -if scaling parameter is specified then use the scaling width and height to configure the encoder state. - -Signed-off-by: Brijesh Singh <brijeshkumar.singh@amd.com> -Signed-off-by: Arindam Nath <arindam.nath@amd.com> ---- - omx/gstomxvideoenc.c | 13 +++++++++++++ - 1 file changed, 13 insertions(+) - -diff --git a/omx/gstomxvideoenc.c b/omx/gstomxvideoenc.c -index 1a0ecea..c372a0d 100644 ---- a/omx/gstomxvideoenc.c -+++ b/omx/gstomxvideoenc.c -@@ -805,6 +805,14 @@ gst_omx_video_enc_handle_output_frame (GstOMXVideoEnc * self, GstOMXPort * port, - gst_video_encoder_set_output_state (GST_VIDEO_ENCODER (self), caps, - self->input_state); - state->codec_data = codec_data; -+ if (GST_OMX_VIDEO_ENC(self)->scaling_width != -+ GST_OMX_VIDEO_ENC_SCALING_WIDTH_DEFAULT || -+ GST_OMX_VIDEO_ENC(self)->scaling_height != -+ GST_OMX_VIDEO_ENC_SCALING_HEIGHT_DEFAULT) { -+ state->info.width = self->scaling_width; -+ state->info.height = self->scaling_height; -+ } -+ - if (!gst_video_encoder_negotiate (GST_VIDEO_ENCODER (self))) { - gst_video_codec_frame_unref (frame); - return GST_FLOW_NOT_NEGOTIATED; -@@ -928,6 +936,11 @@ gst_omx_video_enc_loop (GstOMXVideoEnc * self) - state = - gst_video_encoder_set_output_state (GST_VIDEO_ENCODER (self), caps, - self->input_state); -+ if (self->scaling_width != GST_OMX_VIDEO_ENC_SCALING_WIDTH_DEFAULT || -+ self->scaling_height != GST_OMX_VIDEO_ENC_SCALING_HEIGHT_DEFAULT) { -+ state->info.width = self->scaling_width; -+ state->info.height = self->scaling_height; -+ } - gst_video_codec_state_unref (state); - - if (!gst_video_encoder_negotiate (GST_VIDEO_ENCODER (self))) { --- -1.9.1 - diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0003-gstomxvideodec-simplify-_find_nearest_frame.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0003-gstomxvideodec-simplify-_find_nearest_frame.patch deleted file mode 100644 index f2c9a912..00000000 --- a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0003-gstomxvideodec-simplify-_find_nearest_frame.patch +++ /dev/null @@ -1,125 +0,0 @@ -From 75402afb7acd7bee4fe02ca2c2e524d3d7426d19 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> -Date: Thu, 5 Sep 2013 02:23:39 -0600 -Subject: [PATCH 03/11] gstomxvideodec: simplify _find_nearest_frame -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -No need to make it more complicated and error prone than -necessary. Also give the function a gst_omx_video_dec prefix -to distinct it from the encoder function. - -Signed-off-by: Christian König <christian.koenig@amd.com> ---- - omx/gstomxvideodec.c | 60 ++++++++++++++------------------------------------ - 1 file changed, 16 insertions(+), 44 deletions(-) - -diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c -index 6b5cbe3..020b7d3 100644 ---- a/omx/gstomxvideodec.c -+++ b/omx/gstomxvideodec.c -@@ -646,18 +646,6 @@ gst_omx_buffer_pool_new (GstElement * element, GstOMXComponent * component, - return GST_BUFFER_POOL (pool); - } - --typedef struct _BufferIdentification BufferIdentification; --struct _BufferIdentification --{ -- guint64 timestamp; --}; -- --static void --buffer_identification_free (BufferIdentification * id) --{ -- g_slice_free (BufferIdentification, id); --} -- - /* prototypes */ - static void gst_omx_video_dec_finalize (GObject * object); - -@@ -1009,40 +997,32 @@ gst_omx_video_dec_change_state (GstElement * element, GstStateChange transition) - } - - static GstVideoCodecFrame * --_find_nearest_frame (GstOMXVideoDec * self, GstOMXBuffer * buf) -+gst_omx_video_dec_find_nearest_frame (GstOMXVideoDec * self, GstOMXBuffer * buf) - { - GstVideoCodecFrame *best = NULL; -- guint64 best_diff = G_MAXUINT64; -+ GstClockTimeDiff best_diff = G_MAXINT64; -+ GstClockTime timestamp; - GList *frames; - GList *l; - -+ if (buf->omx_buf->nTimeStamp) -+ timestamp = -+ gst_util_uint64_scale (buf->omx_buf->nTimeStamp, GST_SECOND, -+ OMX_TICKS_PER_SECOND); -+ else -+ timestamp = GST_CLOCK_TIME_NONE; -+ - frames = gst_video_decoder_get_frames (GST_VIDEO_DECODER (self)); - - for (l = frames; l; l = l->next) { - GstVideoCodecFrame *tmp = l->data; -- BufferIdentification *id = gst_video_codec_frame_get_user_data (tmp); -- guint64 timestamp, diff; -+ GstClockTimeDiff diff = ABS (GST_CLOCK_DIFF (timestamp, tmp->pts)); - -- /* This happens for frames that were just added but -- * which were not passed to the component yet. Ignore -- * them here! -- */ -- if (!id) -- continue; -- -- timestamp = id->timestamp; -- -- if (timestamp > buf->omx_buf->nTimeStamp) -- diff = timestamp - buf->omx_buf->nTimeStamp; -- else -- diff = buf->omx_buf->nTimeStamp - timestamp; -- -- if (best == NULL || diff < best_diff) { -+ if (diff < best_diff) { - best = tmp; - best_diff = diff; - -- /* For frames without timestamp we simply take the first frame */ -- if ((buf->omx_buf->nTimeStamp == 0 && timestamp == 0) || diff == 0) -+ if (diff == 0) - break; - } - } -@@ -1947,7 +1927,7 @@ gst_omx_video_dec_loop (GstOMXVideoDec * self) - (guint) buf->omx_buf->nFlags, (guint64) buf->omx_buf->nTimeStamp); - - GST_VIDEO_DECODER_STREAM_LOCK (self); -- frame = _find_nearest_frame (self, buf); -+ frame = gst_omx_video_dec_find_nearest_frame (self, buf); - - if (frame - && (deadline = gst_video_decoder_get_max_decode_time -@@ -2926,16 +2906,8 @@ gst_omx_video_dec_handle_frame (GstVideoDecoder * decoder, - buf->omx_buf->nTickCount = 0; - } - -- if (offset == 0) { -- BufferIdentification *id = g_slice_new0 (BufferIdentification); -- -- if (GST_VIDEO_CODEC_FRAME_IS_SYNC_POINT (frame)) -- buf->omx_buf->nFlags |= OMX_BUFFERFLAG_SYNCFRAME; -- -- id->timestamp = buf->omx_buf->nTimeStamp; -- gst_video_codec_frame_set_user_data (frame, id, -- (GDestroyNotify) buffer_identification_free); -- } -+ if (offset == 0 && GST_VIDEO_CODEC_FRAME_IS_SYNC_POINT (frame)) -+ buf->omx_buf->nFlags |= OMX_BUFFERFLAG_SYNCFRAME; - - /* TODO: Set flags - * - OMX_BUFFERFLAG_DECODEONLY for buffers that are outside --- -1.7.9.5 - diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0003-gstomxvideoenc-add-fix-timestamp-property.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0003-gstomxvideoenc-add-fix-timestamp-property.patch deleted file mode 100644 index a7e9bdd1..00000000 --- a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0003-gstomxvideoenc-add-fix-timestamp-property.patch +++ /dev/null @@ -1,111 +0,0 @@ -From e40121374266c6e72901ce77c09673fb28f78380 Mon Sep 17 00:00:00 2001 -From: Arindam Nath <arindam.nath@amd.com> -Date: Fri, 31 Jul 2015 12:48:45 +0530 -Subject: [PATCH 3/4] gstomxvideoenc: add fix-timestamp property - -The property will force element to calculate the timestamp (dts and pts) based on duration. - -Signed-off-by: Brijesh Singh <brijeshkumar.singh@amd.com> -Signed-off-by: Arindam Nath <arindam.nath@amd.com> ---- - omx/gstomxvideoenc.c | 20 +++++++++++++++++++- - omx/gstomxvideoenc.h | 3 +++ - 2 files changed, 22 insertions(+), 1 deletion(-) - -diff --git a/omx/gstomxvideoenc.c b/omx/gstomxvideoenc.c -index c372a0d..bba349a 100644 ---- a/omx/gstomxvideoenc.c -+++ b/omx/gstomxvideoenc.c -@@ -101,7 +101,8 @@ enum - PROP_SCALING_HEIGHT, - PROP_CAPTURE, - PROP_POS_X, -- PROP_POS_Y -+ PROP_POS_Y, -+ PROP_FIX_TIMESTAMP - }; - - /* FIXME: Better defaults */ -@@ -115,6 +116,7 @@ enum - #define GST_OMX_VIDEO_ENC_CAPTURE_DEFAULT (FALSE) - #define GST_OMX_VIDEO_ENC_POS_X_DEFAULT (0) - #define GST_OMX_VIDEO_ENC_POS_Y_DEFAULT (0) -+#define GST_OMX_VIDEO_ENC_FIX_TIMESTAMP_DEFAULT FALSE - - /* class initialization */ - -@@ -207,6 +209,11 @@ gst_omx_video_enc_class_init (GstOMXVideoEncClass * klass) - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | - GST_PARAM_MUTABLE_READY)); - -+ g_object_class_install_property (gobject_class, PROP_FIX_TIMESTAMP, -+ g_param_spec_boolean ("fix-timestamp", "Calculate timestamp", -+ "Calculate timestamp (dts/pts) based on duration", -+ 0, G_PARAM_READWRITE)); -+ - element_class->change_state = - GST_DEBUG_FUNCPTR (gst_omx_video_enc_change_state); - -@@ -246,6 +253,8 @@ gst_omx_video_enc_init (GstOMXVideoEnc * self) - self->capture = GST_OMX_VIDEO_ENC_CAPTURE_DEFAULT; - self->pos_x = GST_OMX_VIDEO_ENC_POS_X_DEFAULT; - self->pos_y = GST_OMX_VIDEO_ENC_POS_Y_DEFAULT; -+ self->prev_timestamp = 0; -+ self->fix_timestamp = GST_OMX_VIDEO_ENC_FIX_TIMESTAMP_DEFAULT; - - g_mutex_init (&self->drain_lock); - g_cond_init (&self->drain_cond); -@@ -623,6 +632,9 @@ gst_omx_video_enc_set_property (GObject * object, guint prop_id, - case PROP_POS_Y: - self->pos_y = g_value_get_uint (value); - break; -+ case PROP_FIX_TIMESTAMP: -+ self->fix_timestamp = g_value_get_boolean (value); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; -@@ -666,6 +678,9 @@ gst_omx_video_enc_get_property (GObject * object, guint prop_id, GValue * value, - case PROP_POS_Y: - g_value_set_uint (value, self->pos_y); - break; -+ case PROP_FIX_TIMESTAMP: -+ g_value_set_boolean (value, self->fix_timestamp); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; -@@ -998,6 +1013,9 @@ gst_omx_video_enc_loop (GstOMXVideoEnc * self) - GST_VIDEO_ENCODER_STREAM_LOCK (self); - frame = gst_omx_video_enc_find_nearest_frame (self, buf); - -+ GST_INFO_OBJECT (self, "dts %" GST_TIME_FORMAT " pts %" GST_TIME_FORMAT, -+ GST_TIME_ARGS(frame->dts), GST_TIME_ARGS(frame->pts)); -+ - g_assert (klass->handle_output_frame); - flow_ret = klass->handle_output_frame (self, self->enc_out_port, buf, frame); - -diff --git a/omx/gstomxvideoenc.h b/omx/gstomxvideoenc.h -index 3de563b..064583f 100644 ---- a/omx/gstomxvideoenc.h -+++ b/omx/gstomxvideoenc.h -@@ -60,6 +60,7 @@ struct _GstOMXVideoEnc - gboolean started; - - GstClockTime last_upstream_ts; -+ GstClockTime prev_timestamp; - - /* Draining state */ - GMutex drain_lock; -@@ -77,6 +78,8 @@ struct _GstOMXVideoEnc - guint32 quant_p_frames; - guint32 quant_b_frames; - -+ gboolean fix_timestamp; -+ - guint32 scaling_width; - guint32 scaling_height; - --- -1.9.1 - diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0004-gstomxvideoenc-add-force-keyframe-period-property.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0004-gstomxvideoenc-add-force-keyframe-period-property.patch deleted file mode 100644 index 5d0d606d..00000000 --- a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0004-gstomxvideoenc-add-force-keyframe-period-property.patch +++ /dev/null @@ -1,154 +0,0 @@ -From 8a24b4c8cbfc49deceb5595b76c5d9fc8dc5e602 Mon Sep 17 00:00:00 2001 -From: Arindam Nath <arindam.nath@amd.com> -Date: Fri, 31 Jul 2015 13:05:36 +0530 -Subject: [PATCH 4/4] gstomxvideoenc: add force-keyframe-period property - -Add property to allow overriding the default keyframe period. - -Signed-off-by: Brijesh Singh <brijeshkumar.singh@amd.com> -Signed-off-by: Arindam Nath <arindam.nath@amd.com> ---- - omx/gstomxvideoenc.c | 56 +++++++++++++++++++++++++++++++++++++++------------- - omx/gstomxvideoenc.h | 3 +++ - 2 files changed, 45 insertions(+), 14 deletions(-) - -diff --git a/omx/gstomxvideoenc.c b/omx/gstomxvideoenc.c -index bba349a..e7c7db5 100644 ---- a/omx/gstomxvideoenc.c -+++ b/omx/gstomxvideoenc.c -@@ -102,7 +102,8 @@ enum - PROP_CAPTURE, - PROP_POS_X, - PROP_POS_Y, -- PROP_FIX_TIMESTAMP -+ PROP_FIX_TIMESTAMP, -+ PROP_FORCE_KEYFRAME_PERIOD - }; - - /* FIXME: Better defaults */ -@@ -117,6 +118,7 @@ enum - #define GST_OMX_VIDEO_ENC_POS_X_DEFAULT (0) - #define GST_OMX_VIDEO_ENC_POS_Y_DEFAULT (0) - #define GST_OMX_VIDEO_ENC_FIX_TIMESTAMP_DEFAULT FALSE -+#define GST_OMX_VIDEO_ENC_FORCE_KEYFRAME_PERIOD (0xffffffff) - - /* class initialization */ - -@@ -209,6 +211,13 @@ gst_omx_video_enc_class_init (GstOMXVideoEncClass * klass) - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | - GST_PARAM_MUTABLE_READY)); - -+ g_object_class_install_property (gobject_class, PROP_FORCE_KEYFRAME_PERIOD, -+ g_param_spec_uint ("force-keyframe-period", "Force key frame", -+ "Generate keyframe after a specified number of frames (0xffffffff=component default)", -+ 0, G_MAXUINT, GST_OMX_VIDEO_ENC_FORCE_KEYFRAME_PERIOD, -+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | -+ GST_PARAM_MUTABLE_READY)); -+ - g_object_class_install_property (gobject_class, PROP_FIX_TIMESTAMP, - g_param_spec_boolean ("fix-timestamp", "Calculate timestamp", - "Calculate timestamp (dts/pts) based on duration", -@@ -255,6 +264,7 @@ gst_omx_video_enc_init (GstOMXVideoEnc * self) - self->pos_y = GST_OMX_VIDEO_ENC_POS_Y_DEFAULT; - self->prev_timestamp = 0; - self->fix_timestamp = GST_OMX_VIDEO_ENC_FIX_TIMESTAMP_DEFAULT; -+ self->force_keyframe_period = GST_OMX_VIDEO_ENC_FORCE_KEYFRAME_PERIOD; - - g_mutex_init (&self->drain_lock); - g_cond_init (&self->drain_cond); -@@ -635,6 +645,9 @@ gst_omx_video_enc_set_property (GObject * object, guint prop_id, - case PROP_FIX_TIMESTAMP: - self->fix_timestamp = g_value_get_boolean (value); - break; -+ case PROP_FORCE_KEYFRAME_PERIOD: -+ self->force_keyframe_period = g_value_get_uint (value); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; -@@ -681,6 +694,9 @@ gst_omx_video_enc_get_property (GObject * object, guint prop_id, GValue * value, - case PROP_FIX_TIMESTAMP: - g_value_set_boolean (value, self->fix_timestamp); - break; -+ case PROP_FORCE_KEYFRAME_PERIOD: -+ g_value_set_uint (value, self->force_keyframe_period); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; -@@ -1708,6 +1724,25 @@ done: - return ret; - } - -+static void -+gst_omx_video_enc_force_keyframe (GstOMXVideoEnc * self, GstOMXPort * port) -+{ -+ OMX_ERRORTYPE err; -+ OMX_CONFIG_INTRAREFRESHVOPTYPE config; -+ -+ GST_OMX_INIT_STRUCT (&config); -+ config.nPortIndex = port->index; -+ config.IntraRefreshVOP = OMX_TRUE; -+ -+ GST_DEBUG_OBJECT (self, "Forcing a keyframe"); -+ err = -+ gst_omx_component_set_config (self->enc, -+ OMX_IndexConfigVideoIntraVOPRefresh, &config); -+ if (err != OMX_ErrorNone) -+ GST_ERROR_OBJECT (self, "Failed to force a keyframe: %s (0x%08x)", -+ gst_omx_error_to_string (err), err); -+} -+ - static GstFlowReturn - gst_omx_video_enc_handle_frame (GstVideoEncoder * encoder, - GstVideoCodecFrame * frame) -@@ -1735,6 +1770,11 @@ gst_omx_video_enc_handle_frame (GstVideoEncoder * encoder, - - port = self->enc_in_port; - -+ /* do we need to force key frame ? */ -+ if ((self->force_keyframe_period != 0xffffffff) && -+ (self->input_frame_count++ % self->force_keyframe_period == 0)) -+ gst_omx_video_enc_force_keyframe (self, port); -+ - if (port->tunneled) { - gst_video_codec_frame_unref (frame); - return self->downstream_flow_ret; -@@ -1827,19 +1867,7 @@ gst_omx_video_enc_handle_frame (GstVideoEncoder * encoder, - GST_DEBUG_OBJECT (self, "Handling frame"); - - if (GST_VIDEO_CODEC_FRAME_IS_FORCE_KEYFRAME (frame)) { -- OMX_CONFIG_INTRAREFRESHVOPTYPE config; -- -- GST_OMX_INIT_STRUCT (&config); -- config.nPortIndex = port->index; -- config.IntraRefreshVOP = OMX_TRUE; -- -- GST_DEBUG_OBJECT (self, "Forcing a keyframe"); -- err = -- gst_omx_component_set_config (self->enc, -- OMX_IndexConfigVideoIntraVOPRefresh, &config); -- if (err != OMX_ErrorNone) -- GST_ERROR_OBJECT (self, "Failed to force a keyframe: %s (0x%08x)", -- gst_omx_error_to_string (err), err); -+ gst_omx_video_enc_force_keyframe (self, port); - } - - /* Copy the buffer content in chunks of size as requested -diff --git a/omx/gstomxvideoenc.h b/omx/gstomxvideoenc.h -index 064583f..bb8bff7 100644 ---- a/omx/gstomxvideoenc.h -+++ b/omx/gstomxvideoenc.h -@@ -87,6 +87,9 @@ struct _GstOMXVideoEnc - guint32 pos_x; - guint32 pos_y; - -+ guint32 force_keyframe_period; -+ guint64 input_frame_count; -+ - GstFlowReturn downstream_flow_ret; - }; - --- -1.9.1 - diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0004-gstomxvideoenc-simplify-_find_nearest_frame.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0004-gstomxvideoenc-simplify-_find_nearest_frame.patch deleted file mode 100644 index b12bac17..00000000 --- a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0004-gstomxvideoenc-simplify-_find_nearest_frame.patch +++ /dev/null @@ -1,175 +0,0 @@ -From 91123307c8f934a867cf70b9ae6b27373311b8fc Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> -Date: Thu, 5 Sep 2013 03:41:10 -0600 -Subject: [PATCH 04/11] gstomxvideoenc: simplify _find_nearest_frame -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Just the same as we did with the decoder. Also give the -function a gst_omx_video_enc prefix to distinct it from -the decoder function. - -Signed-off-by: Christian König <christian.koenig@amd.com> ---- - omx/gstomxvideoenc.c | 102 ++++++++------------------------------------------ - 1 file changed, 15 insertions(+), 87 deletions(-) - -diff --git a/omx/gstomxvideoenc.c b/omx/gstomxvideoenc.c -index a85e815..3a139bb 100644 ---- a/omx/gstomxvideoenc.c -+++ b/omx/gstomxvideoenc.c -@@ -55,18 +55,6 @@ gst_omx_video_enc_control_rate_get_type (void) - return qtype; - } - --typedef struct _BufferIdentification BufferIdentification; --struct _BufferIdentification --{ -- guint64 timestamp; --}; -- --static void --buffer_identification_free (BufferIdentification * id) --{ -- g_slice_free (BufferIdentification, id); --} -- - /* prototypes */ - static void gst_omx_video_enc_finalize (GObject * object); - static void gst_omx_video_enc_set_property (GObject * object, guint prop_id, -@@ -551,88 +539,34 @@ gst_omx_video_enc_change_state (GstElement * element, GstStateChange transition) - return ret; - } - --#define MAX_FRAME_DIST_TICKS (5 * OMX_TICKS_PER_SECOND) --#define MAX_FRAME_DIST_FRAMES (100) -- - static GstVideoCodecFrame * --_find_nearest_frame (GstOMXVideoEnc * self, GstOMXBuffer * buf) -+gst_omx_video_enc_find_nearest_frame (GstOMXVideoEnc * self, GstOMXBuffer * buf) - { -- GList *l, *best_l = NULL; -- GList *finish_frames = NULL; - GstVideoCodecFrame *best = NULL; -- guint64 best_timestamp = 0; -- guint64 best_diff = G_MAXUINT64; -- BufferIdentification *best_id = NULL; -+ GstClockTimeDiff best_diff = G_MAXINT64; -+ GstClockTime timestamp; - GList *frames; -+ GList *l; -+ -+ if (buf->omx_buf->nTimeStamp) -+ timestamp = -+ gst_util_uint64_scale (buf->omx_buf->nTimeStamp, GST_SECOND, -+ OMX_TICKS_PER_SECOND); -+ else -+ timestamp = GST_CLOCK_TIME_NONE; - - frames = gst_video_encoder_get_frames (GST_VIDEO_ENCODER (self)); - - for (l = frames; l; l = l->next) { - GstVideoCodecFrame *tmp = l->data; -- BufferIdentification *id = gst_video_codec_frame_get_user_data (tmp); -- guint64 timestamp, diff; -- -- /* This happens for frames that were just added but -- * which were not passed to the component yet. Ignore -- * them here! -- */ -- if (!id) -- continue; -- -- timestamp = id->timestamp; -+ GstClockTimeDiff diff = ABS (GST_CLOCK_DIFF (timestamp, tmp->pts)); - -- if (timestamp > buf->omx_buf->nTimeStamp) -- diff = timestamp - buf->omx_buf->nTimeStamp; -- else -- diff = buf->omx_buf->nTimeStamp - timestamp; -- -- if (best == NULL || diff < best_diff) { -+ if (diff < best_diff) { - best = tmp; -- best_timestamp = timestamp; - best_diff = diff; -- best_l = l; -- best_id = id; -- -- /* For frames without timestamp we simply take the first frame */ -- if ((buf->omx_buf->nTimeStamp == 0 && timestamp == 0) || diff == 0) -- break; -- } -- } -- -- if (best_id) { -- for (l = frames; l && l != best_l; l = l->next) { -- GstVideoCodecFrame *tmp = l->data; -- BufferIdentification *id = gst_video_codec_frame_get_user_data (tmp); -- guint64 diff_ticks, diff_frames; -- -- /* This happens for frames that were just added but -- * which were not passed to the component yet. Ignore -- * them here! -- */ -- if (!id) -- continue; - -- if (id->timestamp > best_timestamp) -+ if (diff == 0) - break; -- -- if (id->timestamp == 0 || best_timestamp == 0) -- diff_ticks = 0; -- else -- diff_ticks = best_timestamp - id->timestamp; -- diff_frames = best->system_frame_number - tmp->system_frame_number; -- -- if (diff_ticks > MAX_FRAME_DIST_TICKS -- || diff_frames > MAX_FRAME_DIST_FRAMES) { -- finish_frames = -- g_list_prepend (finish_frames, gst_video_codec_frame_ref (tmp)); -- } -- } -- } -- -- if (finish_frames) { -- g_warning ("Too old frames, bug in encoder -- please file a bug"); -- for (l = finish_frames; l; l = l->next) { -- gst_video_encoder_finish_frame (GST_VIDEO_ENCODER (self), l->data); - } - } - -@@ -851,7 +785,7 @@ gst_omx_video_enc_loop (GstOMXVideoEnc * self) - (guint) buf->omx_buf->nFlags, (guint64) buf->omx_buf->nTimeStamp); - - GST_VIDEO_ENCODER_STREAM_LOCK (self); -- frame = _find_nearest_frame (self, buf); -+ frame = gst_omx_video_enc_find_nearest_frame (self, buf); - - g_assert (klass->handle_output_frame); - flow_ret = klass->handle_output_frame (self, self->enc_out_port, buf, frame); -@@ -1559,7 +1493,6 @@ gst_omx_video_enc_handle_frame (GstVideoEncoder * encoder, - port = self->enc_in_port; - - while (acq_ret != GST_OMX_ACQUIRE_BUFFER_OK) { -- BufferIdentification *id; - GstClockTime timestamp, duration; - - /* Make sure to release the base class stream lock, otherwise -@@ -1683,11 +1616,6 @@ gst_omx_video_enc_handle_frame (GstVideoEncoder * encoder, - self->last_upstream_ts += duration; - } - -- id = g_slice_new0 (BufferIdentification); -- id->timestamp = buf->omx_buf->nTimeStamp; -- gst_video_codec_frame_set_user_data (frame, id, -- (GDestroyNotify) buffer_identification_free); -- - self->started = TRUE; - err = gst_omx_port_release_buffer (port, buf); - if (err != OMX_ErrorNone) --- -1.7.9.5 - diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0005-gstomxvideoenc-Add-new-property-to-set-framerate.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0005-gstomxvideoenc-Add-new-property-to-set-framerate.patch deleted file mode 100644 index cc93f02c..00000000 --- a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0005-gstomxvideoenc-Add-new-property-to-set-framerate.patch +++ /dev/null @@ -1,185 +0,0 @@ -From 9ea8f85d9b9fac5de07256bd7a5f2e3f73291f3f Mon Sep 17 00:00:00 2001 -From: Nishanth Peethambaran <nishanth.peethambaran@amd.com> -Date: Tue, 22 Mar 2016 18:58:42 -0400 -Subject: [PATCH 2/3] gstomxvideoenc: Add new property to set framerate - -Signed-off-by: Nishanth Peethambaran <nishanth.peethambaran@amd.com> ---- - omx/gstomxvideoenc.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++- - omx/gstomxvideoenc.h | 4 +++ - 2 files changed, 92 insertions(+), 1 deletion(-) - -diff --git a/omx/gstomxvideoenc.c b/omx/gstomxvideoenc.c -index a1bc9fb..54c8f2c 100644 ---- a/omx/gstomxvideoenc.c -+++ b/omx/gstomxvideoenc.c -@@ -103,7 +103,9 @@ enum - PROP_POS_X, - PROP_POS_Y, - PROP_FIX_TIMESTAMP, -- PROP_FORCE_KEYFRAME_PERIOD -+ PROP_FORCE_KEYFRAME_PERIOD, -+ PROP_FRAMERATE_NUM, -+ PROP_FRAMERATE_DEN - }; - - /* FIXME: Better defaults */ -@@ -119,6 +121,7 @@ enum - #define GST_OMX_VIDEO_ENC_POS_Y_DEFAULT (0) - #define GST_OMX_VIDEO_ENC_FIX_TIMESTAMP_DEFAULT FALSE - #define GST_OMX_VIDEO_ENC_FORCE_KEYFRAME_PERIOD (0xffffffff) -+#define GST_OMX_VIDEO_ENC_FRAMERATE_DEFAULT (0) - - /* class initialization */ - -@@ -223,6 +226,20 @@ gst_omx_video_enc_class_init (GstOMXVideoEncClass * klass) - "Calculate timestamp (dts/pts) based on duration", - 0, G_PARAM_READWRITE)); - -+ g_object_class_install_property (gobject_class, PROP_FRAMERATE_NUM, -+ g_param_spec_uint ("framerate-num", "Framerate Numerator", -+ "Numerator for output framerate", -+ 0, G_MAXUINT, GST_OMX_VIDEO_ENC_FRAMERATE_DEFAULT, -+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | -+ GST_PARAM_MUTABLE_READY)); -+ -+ g_object_class_install_property (gobject_class, PROP_FRAMERATE_DEN, -+ g_param_spec_uint ("framerate-den", "Framerate Denominator", -+ "Denominator for output framerate", -+ 0, G_MAXUINT, GST_OMX_VIDEO_ENC_FRAMERATE_DEFAULT, -+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | -+ GST_PARAM_MUTABLE_READY)); -+ - element_class->change_state = - GST_DEBUG_FUNCPTR (gst_omx_video_enc_change_state); - -@@ -265,6 +282,9 @@ gst_omx_video_enc_init (GstOMXVideoEnc * self) - self->prev_timestamp = 0; - self->fix_timestamp = GST_OMX_VIDEO_ENC_FIX_TIMESTAMP_DEFAULT; - self->force_keyframe_period = GST_OMX_VIDEO_ENC_FORCE_KEYFRAME_PERIOD; -+ self->framerate_num = GST_OMX_VIDEO_ENC_FRAMERATE_DEFAULT; -+ self->framerate_den = GST_OMX_VIDEO_ENC_FRAMERATE_DEFAULT; -+ self->xEncodeFramerate = 0; - - g_mutex_init (&self->drain_lock); - g_cond_init (&self->drain_cond); -@@ -525,6 +545,49 @@ gst_omx_video_enc_open (GstVideoEncoder * encoder) - gst_omx_error_to_string (err), err); - } - } -+ -+ if (self->framerate_num != GST_OMX_VIDEO_ENC_FRAMERATE_DEFAULT && -+ self->framerate_den != GST_OMX_VIDEO_ENC_FRAMERATE_DEFAULT) { -+ -+ OMX_CONFIG_FRAMERATETYPE framerate_config; -+ -+ GST_OMX_INIT_STRUCT (&framerate_config); -+ framerate_config.nPortIndex = self->enc_out_port->index; -+ -+ err = gst_omx_component_get_config (self->enc, -+ OMX_IndexConfigVideoFramerate, &framerate_config); -+ -+ if (err == OMX_ErrorNone) { -+ -+ framerate_config.xEncodeFramerate = -+ (self->framerate_num << 16) / (self->framerate_den); -+ err = -+ gst_omx_component_set_config (self->enc, -+ OMX_IndexConfigVideoFramerate, &framerate_config); -+ if (err == OMX_ErrorUnsupportedIndex) { -+ GST_WARNING_OBJECT (self, -+ "Setting parameter not supported by the component"); -+ self->framerate_num = GST_OMX_VIDEO_ENC_FRAMERATE_DEFAULT; -+ self->framerate_den = GST_OMX_VIDEO_ENC_FRAMERATE_DEFAULT; -+ } else if (err == OMX_ErrorUnsupportedSetting) { -+ GST_WARNING_OBJECT (self, -+ "Setting framerate %u %u not supported by the component", -+ self->framerate_num, self->framerate_den); -+ self->framerate_num = GST_OMX_VIDEO_ENC_FRAMERATE_DEFAULT; -+ self->framerate_den = GST_OMX_VIDEO_ENC_FRAMERATE_DEFAULT; -+ } else if (err != OMX_ErrorNone) { -+ GST_ERROR_OBJECT (self, -+ "Failed to set encoder framerate config: %s (0x%08x)", -+ gst_omx_error_to_string (err), err); -+ return FALSE; -+ } else { -+ self->xEncodeFramerate = framerate_config.xEncodeFramerate; -+ } -+ } else { -+ GST_ERROR_OBJECT (self, "Failed to get framerate config: %s (0x%08x)", -+ gst_omx_error_to_string (err), err); -+ } -+ } - } - - return TRUE; -@@ -647,6 +710,12 @@ gst_omx_video_enc_set_property (GObject * object, guint prop_id, - case PROP_FORCE_KEYFRAME_PERIOD: - self->force_keyframe_period = g_value_get_uint (value); - break; -+ case PROP_FRAMERATE_NUM: -+ self->framerate_num = g_value_get_uint (value); -+ break; -+ case PROP_FRAMERATE_DEN: -+ self->framerate_den = g_value_get_uint (value); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; -@@ -696,6 +765,12 @@ gst_omx_video_enc_get_property (GObject * object, guint prop_id, GValue * value, - case PROP_FORCE_KEYFRAME_PERIOD: - g_value_set_uint (value, self->force_keyframe_period); - break; -+ case PROP_FRAMERATE_NUM: -+ self->framerate_num = g_value_get_uint (value); -+ break; -+ case PROP_FRAMERATE_DEN: -+ self->framerate_den = g_value_get_uint (value); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; -@@ -848,6 +923,13 @@ gst_omx_video_enc_handle_output_frame (GstOMXVideoEnc * self, GstOMXPort * port, - state->info.width = self->scaling_width; - state->info.height = self->scaling_height; - } -+ if (GST_OMX_VIDEO_ENC (self)->framerate_num != -+ GST_OMX_VIDEO_ENC_FRAMERATE_DEFAULT && -+ GST_OMX_VIDEO_ENC (self)->framerate_den != -+ GST_OMX_VIDEO_ENC_FRAMERATE_DEFAULT) { -+ state->info.fps_n = self->framerate_num; -+ state->info.fps_d = self->framerate_den; -+ } - - if (!gst_video_encoder_negotiate (GST_VIDEO_ENCODER (self))) { - gst_video_codec_frame_unref (frame); -@@ -978,6 +1060,11 @@ gst_omx_video_enc_loop (GstOMXVideoEnc * self) - state->info.width = self->scaling_width; - state->info.height = self->scaling_height; - } -+ if (self->framerate_num != GST_OMX_VIDEO_ENC_FRAMERATE_DEFAULT && -+ self->framerate_den != GST_OMX_VIDEO_ENC_FRAMERATE_DEFAULT) { -+ state->info.fps_n = self->framerate_num; -+ state->info.fps_d = self->framerate_den; -+ } - gst_video_codec_state_unref (state); - - if (!gst_video_encoder_negotiate (GST_VIDEO_ENCODER (self))) { -diff --git a/omx/gstomxvideoenc.h b/omx/gstomxvideoenc.h -index d348643..f09a23b 100644 ---- a/omx/gstomxvideoenc.h -+++ b/omx/gstomxvideoenc.h -@@ -92,6 +92,10 @@ struct _GstOMXVideoEnc - gboolean is_keyframe; - - GstFlowReturn downstream_flow_ret; -+ -+ guint32 framerate_num; -+ guint32 framerate_den; -+ OMX_U32 xEncodeFramerate; /* Q16 format */ - }; - - struct _GstOMXVideoEncClass --- -2.1.4 - diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0005-omx-improve-tunneling-support.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0005-omx-improve-tunneling-support.patch deleted file mode 100644 index 686e0693..00000000 --- a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0005-omx-improve-tunneling-support.patch +++ /dev/null @@ -1,77 +0,0 @@ -From 1975efe159dc52a8030602736c5319785fb62329 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> -Date: Thu, 5 Sep 2013 04:15:26 -0600 -Subject: [PATCH 05/11] omx: improve tunneling support -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Keep track where the tunnel leads us instead of just if it's tunneled or not. - -Signed-off-by: Christian König <christian.koenig@amd.com> ---- - omx/gstomx.c | 13 +++++++------ - omx/gstomx.h | 2 +- - 2 files changed, 8 insertions(+), 7 deletions(-) - -diff --git a/omx/gstomx.c b/omx/gstomx.c -index 4e94712..c8a8927 100644 ---- a/omx/gstomx.c -+++ b/omx/gstomx.c -@@ -920,7 +920,7 @@ gst_omx_component_add_port (GstOMXComponent * comp, guint32 index) - port->comp = comp; - port->index = index; - -- port->tunneled = FALSE; -+ port->tunneled = NULL; - - port->port_def = port_def; - -@@ -1085,8 +1085,8 @@ gst_omx_component_setup_tunnel (GstOMXComponent * comp1, GstOMXPort * port1, - port2->index); - - if (err == OMX_ErrorNone) { -- port1->tunneled = TRUE; -- port2->tunneled = TRUE; -+ port1->tunneled = port2; -+ port2->tunneled = port1; - } - - GST_DEBUG_OBJECT (comp1->parent, -@@ -1115,7 +1115,8 @@ gst_omx_component_close_tunnel (GstOMXComponent * comp1, GstOMXPort * port1, - g_return_val_if_fail (port2->port_def.eDir == OMX_DirInput, - OMX_ErrorUndefined); - g_return_val_if_fail (comp1->core == comp2->core, OMX_ErrorUndefined); -- g_return_val_if_fail (port1->tunneled && port2->tunneled, OMX_ErrorUndefined); -+ g_return_val_if_fail (port1->tunneled == port2, OMX_ErrorUndefined); -+ g_return_val_if_fail (port2->tunneled == port1, OMX_ErrorUndefined); - - g_mutex_lock (&comp1->lock); - g_mutex_lock (&comp2->lock); -@@ -1136,8 +1137,8 @@ gst_omx_component_close_tunnel (GstOMXComponent * comp1, GstOMXPort * port1, - gst_omx_error_to_string (err), err); - } - -- port1->tunneled = FALSE; -- port2->tunneled = FALSE; -+ port1->tunneled = NULL; -+ port2->tunneled = NULL; - - GST_DEBUG_OBJECT (comp1->parent, - "Closed tunnel between %s port %u and %s port %u", -diff --git a/omx/gstomx.h b/omx/gstomx.h -index 8af81b8..3645b63 100644 ---- a/omx/gstomx.h -+++ b/omx/gstomx.h -@@ -199,7 +199,7 @@ struct _GstOMXPort { - GstOMXComponent *comp; - guint32 index; - -- gboolean tunneled; -+ GstOMXPort *tunneled; - - OMX_PARAM_PORTDEFINITIONTYPE port_def; - GPtrArray *buffers; /* Contains GstOMXBuffer* */ --- -1.7.9.5 - diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0006-gstomxvideoenc-Update-GstBuffer-fields-on-FRC.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0006-gstomxvideoenc-Update-GstBuffer-fields-on-FRC.patch deleted file mode 100644 index 1bd0971a..00000000 --- a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0006-gstomxvideoenc-Update-GstBuffer-fields-on-FRC.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 1fdd9ba35575f9d5001509111166e98c9d359984 Mon Sep 17 00:00:00 2001 -From: Nishanth Peethambaran <nishanth.peethambaran@amd.com> -Date: Tue, 22 Mar 2016 19:21:20 -0400 -Subject: [PATCH 3/3] gstomxvideoenc: Update GstBuffer fields on FRC - -Update the ts, duration and offset fields of the encoder output -GstBuffer to ensure the bitstream/container has the right header -information. - -Signed-off-by: Nishanth Peethambaran <nishanth.peethambaran@amd.com> ---- - omx/gstomxvideoenc.c | 13 +++++++++++++ - omx/gstomxvideoenc.h | 1 + - 2 files changed, 14 insertions(+) - -diff --git a/omx/gstomxvideoenc.c b/omx/gstomxvideoenc.c -index 54c8f2c..e3a1b19 100644 ---- a/omx/gstomxvideoenc.c -+++ b/omx/gstomxvideoenc.c -@@ -285,6 +285,7 @@ gst_omx_video_enc_init (GstOMXVideoEnc * self) - self->framerate_num = GST_OMX_VIDEO_ENC_FRAMERATE_DEFAULT; - self->framerate_den = GST_OMX_VIDEO_ENC_FRAMERATE_DEFAULT; - self->xEncodeFramerate = 0; -+ self->out_frame_count = 0; - - g_mutex_init (&self->drain_lock); - g_cond_init (&self->drain_cond); -@@ -977,10 +978,22 @@ gst_omx_video_enc_handle_output_frame (GstOMXVideoEnc * self, GstOMXPort * port, - } - - if (frame) { -+ if (self->xEncodeFramerate) { -+ outbuf->offset = self->out_frame_count++; -+ outbuf->offset_end = self->out_frame_count; -+ frame->pts = outbuf->pts; -+ frame->dts = outbuf->pts; -+ frame->duration = outbuf->duration; -+ } - frame->output_buffer = outbuf; - flow_ret = - gst_video_encoder_finish_frame (GST_VIDEO_ENCODER (self), frame); - } else { -+ if (self->xEncodeFramerate) { -+ outbuf->offset = self->out_frame_count++; -+ outbuf->offset_end = self->out_frame_count; -+ outbuf->dts = outbuf->pts; -+ } - GST_ERROR_OBJECT (self, "No corresponding frame found"); - flow_ret = gst_pad_push (GST_VIDEO_ENCODER_SRC_PAD (self), outbuf); - } -diff --git a/omx/gstomxvideoenc.h b/omx/gstomxvideoenc.h -index f09a23b..653d78c 100644 ---- a/omx/gstomxvideoenc.h -+++ b/omx/gstomxvideoenc.h -@@ -96,6 +96,7 @@ struct _GstOMXVideoEnc - guint32 framerate_num; - guint32 framerate_den; - OMX_U32 xEncodeFramerate; /* Q16 format */ -+ guint32 out_frame_count; - }; - - struct _GstOMXVideoEncClass --- -2.1.4 - diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0006-omx-add-tunneling-support-between-decoder-and-encode.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0006-omx-add-tunneling-support-between-decoder-and-encode.patch deleted file mode 100644 index aa3e403f..00000000 --- a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0006-omx-add-tunneling-support-between-decoder-and-encode.patch +++ /dev/null @@ -1,328 +0,0 @@ -From 17e9d641799a075a085a64d0543c5a51b11fd73d Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> -Date: Fri, 13 Sep 2013 03:33:19 -0600 -Subject: [PATCH 06/11] omx: add tunneling support between decoder and - encoders v2 -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Forward the frames through both the OMX tunnel as well as the gst pad, this -way we can map OMX buffers to their frame counterpart when they left the -tunnel on the other side. - -v2: fix tunnel close and buffer dealloc order - -Signed-off-by: Christian König <christian.koenig@amd.com> ---- - omx/gstomx.c | 6 +++- - omx/gstomx.h | 2 ++ - omx/gstomxvideodec.c | 90 ++++++++++++++++++++++++++++++++++++++++++++------ - omx/gstomxvideoenc.c | 29 +++++++++++++--- - 4 files changed, 110 insertions(+), 17 deletions(-) - -diff --git a/omx/gstomx.c b/omx/gstomx.c -index c8a8927..df3a8ff 100644 ---- a/omx/gstomx.c -+++ b/omx/gstomx.c -@@ -1204,7 +1204,6 @@ gst_omx_port_acquire_buffer (GstOMXPort * port, GstOMXBuffer ** buf) - GstOMXBuffer *_buf = NULL; - - g_return_val_if_fail (port != NULL, GST_OMX_ACQUIRE_BUFFER_ERROR); -- g_return_val_if_fail (!port->tunneled, GST_OMX_ACQUIRE_BUFFER_ERROR); - g_return_val_if_fail (buf != NULL, GST_OMX_ACQUIRE_BUFFER_ERROR); - - *buf = NULL; -@@ -1298,6 +1297,11 @@ retry: - goto done; - } - -+ if (port->tunneled) { -+ ret = GST_OMX_ACQUIRE_BUFFER_TUNNELED; -+ goto done; -+ } -+ - /* - * At this point we have no error or flushing/eos port - * and a properly configured port. -diff --git a/omx/gstomx.h b/omx/gstomx.h -index 3645b63..9b534bd 100644 ---- a/omx/gstomx.h -+++ b/omx/gstomx.h -@@ -124,6 +124,8 @@ typedef enum { - GST_OMX_ACQUIRE_BUFFER_RECONFIGURE, - /* The port is EOS */ - GST_OMX_ACQUIRE_BUFFER_EOS, -+ /* The port is tunneled */ -+ GST_OMX_ACQUIRE_BUFFER_TUNNELED, - /* A fatal error happened */ - GST_OMX_ACQUIRE_BUFFER_ERROR - } GstOMXAcquireBufferReturn; -diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c -index 020b7d3..e8813fb 100644 ---- a/omx/gstomxvideodec.c -+++ b/omx/gstomxvideodec.c -@@ -50,6 +50,7 @@ - #include <string.h> - - #include "gstomxvideodec.h" -+#include "gstomxvideoenc.h" - - GST_DEBUG_CATEGORY_STATIC (gst_omx_video_dec_debug_category); - #define GST_CAT_DEFAULT gst_omx_video_dec_debug_category -@@ -881,6 +882,11 @@ gst_omx_video_dec_shutdown (GstOMXVideoDec * self) - gst_omx_component_get_state (self->dec, 5 * GST_SECOND); - } - -+ if (self->dec_out_port->tunneled) { -+ gst_omx_component_close_tunnel (self->dec, self->dec_out_port, -+ self->dec_out_port->tunneled->comp, self->dec_out_port->tunneled); -+ } -+ - return TRUE; - } - -@@ -1527,7 +1533,7 @@ done: - static OMX_ERRORTYPE - gst_omx_video_dec_deallocate_output_buffers (GstOMXVideoDec * self) - { -- OMX_ERRORTYPE err; -+ OMX_ERRORTYPE err = OMX_ErrorNone; - - if (self->out_port_pool) { - gst_buffer_pool_set_active (self->out_port_pool, FALSE); -@@ -1543,7 +1549,10 @@ gst_omx_video_dec_deallocate_output_buffers (GstOMXVideoDec * self) - gst_omx_port_deallocate_buffers (self-> - eglimage ? self->egl_out_port : self->dec_out_port); - #else -- err = gst_omx_port_deallocate_buffers (self->dec_out_port); -+ if (!self->dec_out_port->tunneled) -+ err = gst_omx_port_deallocate_buffers (self->dec_out_port); -+ else -+ err = gst_omx_port_set_enabled (self->dec_out_port, FALSE); - #endif - - return err; -@@ -1772,12 +1781,28 @@ gst_omx_video_dec_reconfigure_output_port (GstOMXVideoDec * self) - - GST_VIDEO_DECODER_STREAM_UNLOCK (self); - -+ { -+ GstPad *peer = gst_pad_get_peer (GST_VIDEO_DECODER_SRC_PAD (self)); -+ GstElement *element = peer ? gst_pad_get_parent_element (peer) : NULL; -+ -+ if (element && GST_IS_OMX_VIDEO_ENC (element)) { -+ GstOMXVideoEnc *enc = GST_OMX_VIDEO_ENC (element); -+ -+ gst_omx_component_setup_tunnel (self->dec, self->dec_out_port, -+ enc->enc, enc->enc_in_port); -+ -+ } -+ } -+ - #if defined (USE_OMX_TARGET_RPI) && defined (HAVE_GST_EGL) - enable_port: - #endif -- err = gst_omx_video_dec_allocate_output_buffers (self); -- if (err != OMX_ErrorNone) -- goto done; -+ -+ if (!self->dec_out_port->tunneled) { -+ err = gst_omx_video_dec_allocate_output_buffers (self); -+ if (err != OMX_ErrorNone) -+ goto done; -+ } - - err = gst_omx_port_populate (port); - if (err != OMX_ErrorNone) -@@ -1816,6 +1841,9 @@ gst_omx_video_dec_loop (GstOMXVideoDec * self) - goto flushing; - } else if (acq_return == GST_OMX_ACQUIRE_BUFFER_EOS) { - goto eos; -+ } else if (acq_return == GST_OMX_ACQUIRE_BUFFER_TUNNELED) { -+ gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self)); -+ return; - } - - if (!gst_pad_has_current_caps (GST_VIDEO_DECODER_SRC_PAD (self)) || -@@ -2657,6 +2685,7 @@ gst_omx_video_dec_set_format (GstVideoDecoder * decoder, - GST_DEBUG_OBJECT (self, "Starting task again"); - - self->downstream_flow_ret = GST_FLOW_OK; -+ - gst_pad_start_task (GST_VIDEO_DECODER_SRC_PAD (self), - (GstTaskFunction) gst_omx_video_dec_loop, decoder, NULL); - -@@ -2703,6 +2732,7 @@ gst_omx_video_dec_reset (GstVideoDecoder * decoder, gboolean hard) - self->last_upstream_ts = 0; - self->eos = FALSE; - self->downstream_flow_ret = GST_FLOW_OK; -+ - gst_pad_start_task (GST_VIDEO_DECODER_SRC_PAD (self), - (GstTaskFunction) gst_omx_video_dec_loop, decoder, NULL); - -@@ -2925,7 +2955,11 @@ gst_omx_video_dec_handle_frame (GstVideoDecoder * decoder, - goto release_error; - } - -- gst_video_codec_frame_unref (frame); -+ if (self->dec_out_port->tunneled) { -+ frame->output_buffer = gst_buffer_new (); -+ gst_video_decoder_finish_frame (GST_VIDEO_DECODER (self), frame); -+ } else -+ gst_video_codec_frame_unref (frame); - - GST_DEBUG_OBJECT (self, "Passed frame to component"); - -@@ -3003,6 +3037,7 @@ gst_omx_video_dec_finish (GstVideoDecoder * decoder) - static GstFlowReturn - gst_omx_video_dec_drain (GstOMXVideoDec * self, gboolean is_eos) - { -+ GstOMXVideoEnc *enc = NULL; - GstOMXVideoDecClass *klass; - GstOMXBuffer *buf; - GstOMXAcquireBufferReturn acq_ret; -@@ -3031,6 +3066,14 @@ gst_omx_video_dec_drain (GstOMXVideoDec * self, gboolean is_eos) - return GST_FLOW_OK; - } - -+ if (self->dec_out_port->tunneled) { -+ GstPad *peer = gst_pad_get_peer (GST_VIDEO_DECODER_SRC_PAD (self)); -+ GstElement *element = peer ? gst_pad_get_parent_element (peer) : NULL; -+ -+ if (element && GST_IS_OMX_VIDEO_ENC (element)) -+ enc = GST_OMX_VIDEO_ENC (element); -+ } -+ - /* Make sure to release the base class stream lock, otherwise - * _loop() can't call _finish_frame() and we might block forever - * because no input buffers are released */ -@@ -3047,8 +3090,14 @@ gst_omx_video_dec_drain (GstOMXVideoDec * self, gboolean is_eos) - return GST_FLOW_ERROR; - } - -- g_mutex_lock (&self->drain_lock); -- self->draining = TRUE; -+ if (enc) { -+ g_mutex_lock (&enc->drain_lock); -+ enc->draining = TRUE; -+ } else { -+ g_mutex_lock (&self->drain_lock); -+ self->draining = TRUE; -+ } -+ - buf->omx_buf->nFilledLen = 0; - buf->omx_buf->nTimeStamp = - gst_util_uint64_scale (self->last_upstream_ts, OMX_TICKS_PER_SECOND, -@@ -3059,6 +3108,10 @@ gst_omx_video_dec_drain (GstOMXVideoDec * self, gboolean is_eos) - if (err != OMX_ErrorNone) { - GST_ERROR_OBJECT (self, "Failed to drain component: %s (0x%08x)", - gst_omx_error_to_string (err), err); -+ if (enc) -+ g_mutex_unlock (&enc->drain_lock); -+ else -+ g_mutex_unlock (&self->drain_lock); - GST_VIDEO_DECODER_STREAM_LOCK (self); - return GST_FLOW_ERROR; - } -@@ -3067,18 +3120,33 @@ gst_omx_video_dec_drain (GstOMXVideoDec * self, gboolean is_eos) - - if (G_UNLIKELY (self->dec->hacks & GST_OMX_HACK_DRAIN_MAY_NOT_RETURN)) { - gint64 wait_until = g_get_monotonic_time () + G_TIME_SPAN_SECOND / 2; -+ gboolean result; -+ -+ if (enc) -+ result = -+ g_cond_wait_until (&enc->drain_cond, &enc->drain_lock, wait_until); -+ else -+ result = -+ g_cond_wait_until (&self->drain_cond, &self->drain_lock, wait_until); - -- if (!g_cond_wait_until (&self->drain_cond, &self->drain_lock, wait_until)) -+ if (!result) - GST_WARNING_OBJECT (self, "Drain timed out"); - else - GST_DEBUG_OBJECT (self, "Drained component"); - - } else { -- g_cond_wait (&self->drain_cond, &self->drain_lock); -+ if (enc) -+ g_cond_wait (&enc->drain_cond, &enc->drain_lock); -+ else -+ g_cond_wait (&self->drain_cond, &self->drain_lock); - GST_DEBUG_OBJECT (self, "Drained component"); - } - -- g_mutex_unlock (&self->drain_lock); -+ if (enc) -+ g_mutex_unlock (&enc->drain_lock); -+ else -+ g_mutex_unlock (&self->drain_lock); -+ - GST_VIDEO_DECODER_STREAM_LOCK (self); - - self->started = FALSE; -diff --git a/omx/gstomxvideoenc.c b/omx/gstomxvideoenc.c -index 3a139bb..8f6cab3 100644 ---- a/omx/gstomxvideoenc.c -+++ b/omx/gstomxvideoenc.c -@@ -364,7 +364,10 @@ gst_omx_video_enc_shutdown (GstOMXVideoEnc * self) - gst_omx_component_get_state (self->enc, 5 * GST_SECOND); - } - gst_omx_component_set_state (self->enc, OMX_StateLoaded); -- gst_omx_port_deallocate_buffers (self->enc_in_port); -+ if (!self->enc_in_port->tunneled) -+ gst_omx_port_deallocate_buffers (self->enc_in_port); -+ else -+ gst_omx_port_set_enabled (self->enc_in_port, FALSE); - gst_omx_port_deallocate_buffers (self->enc_out_port); - if (state > OMX_StateLoaded) - gst_omx_component_get_state (self->enc, 5 * GST_SECOND); -@@ -1086,8 +1089,9 @@ gst_omx_video_enc_set_format (GstVideoEncoder * encoder, - if (gst_omx_port_wait_buffers_released (self->enc_out_port, - 1 * GST_SECOND) != OMX_ErrorNone) - return FALSE; -- if (gst_omx_port_deallocate_buffers (self->enc_in_port) != OMX_ErrorNone) -- return FALSE; -+ if (!self->enc_in_port->tunneled) -+ if (gst_omx_port_deallocate_buffers (self->enc_in_port) != OMX_ErrorNone) -+ return FALSE; - if (gst_omx_port_deallocate_buffers (self->enc_out_port) != OMX_ErrorNone) - return FALSE; - if (gst_omx_port_wait_enabled (self->enc_in_port, -@@ -1225,8 +1229,18 @@ gst_omx_video_enc_set_format (GstVideoEncoder * encoder, - return FALSE; - - /* Need to allocate buffers to reach Idle state */ -- if (gst_omx_port_allocate_buffers (self->enc_in_port) != OMX_ErrorNone) -- return FALSE; -+ if (self->enc_in_port->tunneled) { -+ if (gst_omx_port_set_enabled (self->enc_in_port->tunneled, -+ TRUE) != OMX_ErrorNone) -+ return FALSE; -+ -+ if (gst_omx_port_wait_enabled (self->enc_in_port->tunneled, -+ 1 * GST_SECOND) != OMX_ErrorNone) -+ return FALSE; -+ } else { -+ if (gst_omx_port_allocate_buffers (self->enc_in_port) != OMX_ErrorNone) -+ return FALSE; -+ } - - if (gst_omx_component_get_state (self->enc, - GST_CLOCK_TIME_NONE) != OMX_StateIdle) -@@ -1492,6 +1506,11 @@ gst_omx_video_enc_handle_frame (GstVideoEncoder * encoder, - - port = self->enc_in_port; - -+ if (port->tunneled) { -+ gst_video_codec_frame_unref (frame); -+ return self->downstream_flow_ret; -+ } -+ - while (acq_ret != GST_OMX_ACQUIRE_BUFFER_OK) { - GstClockTime timestamp, duration; - --- -1.7.9.5 - diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0007-gstomxvideoenc-implement-scaling-configuration-suppo.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0007-gstomxvideoenc-implement-scaling-configuration-suppo.patch deleted file mode 100644 index 6db5e742..00000000 --- a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0007-gstomxvideoenc-implement-scaling-configuration-suppo.patch +++ /dev/null @@ -1,155 +0,0 @@ -From 9d1fc5ceb72222037b959c1a2c3fe05c50de676a Mon Sep 17 00:00:00 2001 -From: Leo Liu <leo.liu@amd.com> -Date: Thu, 14 Nov 2013 18:47:24 -0500 -Subject: [PATCH 07/11] gstomxvideoenc: implement scaling configuration - support - -Signed-off-by: Leo Liu <leo.liu@amd.com> ---- - omx/gstomxvideoenc.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++- - omx/gstomxvideoenc.h | 3 +++ - 2 files changed, 75 insertions(+), 1 deletion(-) - -diff --git a/omx/gstomxvideoenc.c b/omx/gstomxvideoenc.c -index 8f6cab3..ee41fa0 100644 ---- a/omx/gstomxvideoenc.c -+++ b/omx/gstomxvideoenc.c -@@ -96,7 +96,9 @@ enum - PROP_TARGET_BITRATE, - PROP_QUANT_I_FRAMES, - PROP_QUANT_P_FRAMES, -- PROP_QUANT_B_FRAMES -+ PROP_QUANT_B_FRAMES, -+ PROP_SCALING_WIDTH, -+ PROP_SCALING_HEIGHT - }; - - /* FIXME: Better defaults */ -@@ -105,6 +107,8 @@ enum - #define GST_OMX_VIDEO_ENC_QUANT_I_FRAMES_DEFAULT (0xffffffff) - #define GST_OMX_VIDEO_ENC_QUANT_P_FRAMES_DEFAULT (0xffffffff) - #define GST_OMX_VIDEO_ENC_QUANT_B_FRAMES_DEFAULT (0xffffffff) -+#define GST_OMX_VIDEO_ENC_SCALING_WIDTH_DEFAULT (0xffffffff) -+#define GST_OMX_VIDEO_ENC_SCALING_HEIGHT_DEFAULT (0xffffffff) - - /* class initialization */ - -@@ -163,6 +167,20 @@ gst_omx_video_enc_class_init (GstOMXVideoEncClass * klass) - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | - GST_PARAM_MUTABLE_READY)); - -+ g_object_class_install_property (gobject_class, PROP_SCALING_WIDTH, -+ g_param_spec_uint ("scaling-width", "Scaling Width", -+ "Scaling Width parameter (0xffffffff=component default)", -+ 0, G_MAXUINT, GST_OMX_VIDEO_ENC_SCALING_WIDTH_DEFAULT, -+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | -+ GST_PARAM_MUTABLE_READY)); -+ -+ g_object_class_install_property (gobject_class, PROP_SCALING_HEIGHT, -+ g_param_spec_uint ("scaling-height", "Scaling Height", -+ "Scaling Height parameter (0xffffffff=component default)", -+ 0, G_MAXUINT, GST_OMX_VIDEO_ENC_SCALING_HEIGHT_DEFAULT, -+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | -+ GST_PARAM_MUTABLE_READY)); -+ - element_class->change_state = - GST_DEBUG_FUNCPTR (gst_omx_video_enc_change_state); - -@@ -197,6 +215,8 @@ gst_omx_video_enc_init (GstOMXVideoEnc * self) - self->quant_i_frames = GST_OMX_VIDEO_ENC_QUANT_I_FRAMES_DEFAULT; - self->quant_p_frames = GST_OMX_VIDEO_ENC_QUANT_P_FRAMES_DEFAULT; - self->quant_b_frames = GST_OMX_VIDEO_ENC_QUANT_B_FRAMES_DEFAULT; -+ self->scaling_width = GST_OMX_VIDEO_ENC_SCALING_WIDTH_DEFAULT; -+ self->scaling_height = GST_OMX_VIDEO_ENC_SCALING_HEIGHT_DEFAULT; - - g_mutex_init (&self->drain_lock); - g_cond_init (&self->drain_cond); -@@ -345,6 +365,45 @@ gst_omx_video_enc_open (GstVideoEncoder * encoder) - - } - } -+ -+ if (self->scaling_width != 0xffffffff || -+ self->scaling_height != 0xffffffff) { -+ OMX_CONFIG_SCALEFACTORTYPE scale_factor; -+ GST_OMX_INIT_STRUCT (&scale_factor); -+ scale_factor.nPortIndex = self->enc_out_port->index; -+ -+ err = gst_omx_component_get_config (self->enc, -+ OMX_IndexConfigCommonScale, &scale_factor); -+ -+ if (err == OMX_ErrorNone) { -+ -+ if (self->scaling_width != 0xffffffff) -+ scale_factor.xWidth = self->scaling_width; -+ if (self->scaling_height != 0xffffffff) -+ scale_factor.xHeight = self->scaling_height; -+ -+ err = -+ gst_omx_component_set_config (self->enc, -+ OMX_IndexConfigCommonScale, &scale_factor); -+ if (err == OMX_ErrorUnsupportedIndex) { -+ GST_WARNING_OBJECT (self, -+ "Setting scale configuration not supported by the component"); -+ } else if (err == OMX_ErrorUnsupportedSetting) { -+ GST_WARNING_OBJECT (self, -+ "Setting scale configuration %u %u not supported by the component", -+ self->scaling_width, self->scaling_height); -+ } else if (err != OMX_ErrorNone) { -+ GST_ERROR_OBJECT (self, -+ "Failed to set scale configuration: %s (0x%08x)", -+ gst_omx_error_to_string (err), err); -+ return FALSE; -+ } -+ } else { -+ GST_ERROR_OBJECT (self, -+ "Failed to set scale configuration: %s (0x%08x)", -+ gst_omx_error_to_string (err), err); -+ } -+ } - } - - return TRUE; -@@ -443,6 +502,12 @@ gst_omx_video_enc_set_property (GObject * object, guint prop_id, - case PROP_QUANT_B_FRAMES: - self->quant_b_frames = g_value_get_uint (value); - break; -+ case PROP_SCALING_WIDTH: -+ self->scaling_width = g_value_get_uint (value); -+ break; -+ case PROP_SCALING_HEIGHT: -+ self->scaling_height = g_value_get_uint (value); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; -@@ -471,6 +536,12 @@ gst_omx_video_enc_get_property (GObject * object, guint prop_id, GValue * value, - case PROP_QUANT_B_FRAMES: - g_value_set_uint (value, self->quant_b_frames); - break; -+ case PROP_SCALING_WIDTH: -+ g_value_set_uint (value, self->scaling_width); -+ break; -+ case PROP_SCALING_HEIGHT: -+ g_value_set_uint (value, self->scaling_height); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; -diff --git a/omx/gstomxvideoenc.h b/omx/gstomxvideoenc.h -index e266537..86e9c8f 100644 ---- a/omx/gstomxvideoenc.h -+++ b/omx/gstomxvideoenc.h -@@ -77,6 +77,9 @@ struct _GstOMXVideoEnc - guint32 quant_p_frames; - guint32 quant_b_frames; - -+ guint32 scaling_width; -+ guint32 scaling_height; -+ - GstFlowReturn downstream_flow_ret; - }; - --- -1.7.9.5 - diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0008-configure-fix-first-run-of-autogen-automake.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0008-configure-fix-first-run-of-autogen-automake.patch deleted file mode 100644 index 8478cc3a..00000000 --- a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0008-configure-fix-first-run-of-autogen-automake.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 8e089ae8249899b8e47cbe7abfe3dd8814458c89 Mon Sep 17 00:00:00 2001 -From: Tim Writer <Tim.Writer@amd.com> -Date: Mon, 25 Nov 2013 15:51:21 -0500 -Subject: [PATCH 08/11] configure: fix first run of autogen/automake - -Without AC_CONFIG_AUX_DIR, libtoolize fails to copy ltmain.sh, -causing the first run of automake to fail. ---- - configure.ac | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/configure.ac b/configure.ac -index fcf4d9d..6dcca1c 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -9,6 +9,10 @@ AC_INIT(GStreamer OpenMAX Plug-ins, 1.0.0.1, - http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer, - gst-omx) - -+dnl Forces libtoolize to copy ltmain.sh. Without it, automake fails on -+dnl the first run. -+AC_CONFIG_AUX_DIR([.]) -+ - AG_GST_INIT - - dnl initialize automake --- -1.7.9.5 - diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0009-omxvideodec-fix-startup-race-condition.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0009-omxvideodec-fix-startup-race-condition.patch deleted file mode 100644 index df070f44..00000000 --- a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0009-omxvideodec-fix-startup-race-condition.patch +++ /dev/null @@ -1,33 +0,0 @@ -From c79c13c43e4d535fdb0c7fc508a7d5219eebe940 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> -Date: Sat, 1 Mar 2014 18:48:17 +0100 -Subject: [PATCH 09/11] omxvideodec: fix startup race condition -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -The reset function shouldn't start the src pad -loop if it wasn't started before. - -Signed-off-by: Christian König <christian.koenig@amd.com> ---- - omx/gstomxvideodec.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c -index e8813fb..00f3951 100644 ---- a/omx/gstomxvideodec.c -+++ b/omx/gstomxvideodec.c -@@ -2703,6 +2703,9 @@ gst_omx_video_dec_reset (GstVideoDecoder * decoder, gboolean hard) - - GST_DEBUG_OBJECT (self, "Resetting decoder"); - -+ if (gst_omx_component_get_state (self->dec, 0) == OMX_StateLoaded) -+ return TRUE; -+ - gst_omx_port_set_flushing (self->dec_in_port, 5 * GST_SECOND, TRUE); - gst_omx_port_set_flushing (self->dec_out_port, 5 * GST_SECOND, TRUE); - --- -1.7.9.5 - diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0010-omxvideoenc-fix-startup-race-condition.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0010-omxvideoenc-fix-startup-race-condition.patch deleted file mode 100644 index 68b89b8a..00000000 --- a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0010-omxvideoenc-fix-startup-race-condition.patch +++ /dev/null @@ -1,33 +0,0 @@ -From ba51373c66f4c9c3349eb083c5218b31e4162a6e Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> -Date: Sat, 1 Mar 2014 18:49:41 +0100 -Subject: [PATCH 10/11] omxvideoenc: fix startup race condition -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -The reset function shouldn't start the src pad -loop if it wasn't started before. - -Signed-off-by: Christian König <christian.koenig@amd.com> ---- - omx/gstomxvideoenc.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/omx/gstomxvideoenc.c b/omx/gstomxvideoenc.c -index ee41fa0..e65a9e0 100644 ---- a/omx/gstomxvideoenc.c -+++ b/omx/gstomxvideoenc.c -@@ -1359,6 +1359,9 @@ gst_omx_video_enc_reset (GstVideoEncoder * encoder, gboolean hard) - - GST_DEBUG_OBJECT (self, "Resetting encoder"); - -+ if (gst_omx_component_get_state (self->enc, 0) == OMX_StateLoaded) -+ return TRUE; -+ - gst_omx_port_set_flushing (self->enc_in_port, 5 * GST_SECOND, TRUE); - gst_omx_port_set_flushing (self->enc_out_port, 5 * GST_SECOND, TRUE); - --- -1.7.9.5 - diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0011-omx-fix-two-serious-message-handling-bugs.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0011-omx-fix-two-serious-message-handling-bugs.patch deleted file mode 100644 index 6de3b84a..00000000 --- a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0011-omx-fix-two-serious-message-handling-bugs.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 6d0b6813745b54eb5dd249ba4446118b21383059 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> -Date: Sat, 1 Mar 2014 22:28:24 +0100 -Subject: [PATCH 11/11] omx: fix two serious message handling bugs - -Waiting for the next message if we already got one -is nonsense and can lead to lockups. - -https://bugzilla.gnome.org/show_bug.cgi?id=725468 ---- - omx/gstomx.c | 6 ++---- - 1 file changed, 2 insertions(+), 4 deletions(-) - -diff --git a/omx/gstomx.c b/omx/gstomx.c -index df3a8ff..b77c904 100644 ---- a/omx/gstomx.c -+++ b/omx/gstomx.c -@@ -842,8 +842,7 @@ gst_omx_component_get_state (GstOMXComponent * comp, GstClockTime timeout) - g_mutex_unlock (&comp->lock); - if (!g_queue_is_empty (&comp->messages)) { - signalled = TRUE; -- } -- if (timeout == GST_CLOCK_TIME_NONE) { -+ } else if (timeout == GST_CLOCK_TIME_NONE) { - g_cond_wait (&comp->messages_cond, &comp->messages_lock); - signalled = TRUE; - } else { -@@ -1519,8 +1518,7 @@ gst_omx_port_set_flushing (GstOMXPort * port, GstClockTime timeout, - - if (!g_queue_is_empty (&comp->messages)) { - signalled = TRUE; -- } -- if (timeout == GST_CLOCK_TIME_NONE) { -+ } else if (timeout == GST_CLOCK_TIME_NONE) { - g_cond_wait (&comp->messages_cond, &comp->messages_lock); - signalled = TRUE; - } else { --- -1.7.9.5 - diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0012-gstomxvideoenc-implement-capture-configuration-suppo.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0012-gstomxvideoenc-implement-capture-configuration-suppo.patch deleted file mode 100644 index 3df8f37f..00000000 --- a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0012-gstomxvideoenc-implement-capture-configuration-suppo.patch +++ /dev/null @@ -1,131 +0,0 @@ -From eb7b8df4eb363f3799d2264f4761401aeb40fa26 Mon Sep 17 00:00:00 2001 -From: Leo Liu <leo.liu@amd.com> -Date: Mon, 24 Feb 2014 15:03:50 -0500 -Subject: [PATCH 12/14] gstomxvideoenc: implement capture configuration support - -Signed-off-by: Leo Liu <leo.liu@amd.com> ---- - omx/gstomxvideoenc.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++- - omx/gstomxvideoenc.h | 2 ++ - 2 files changed, 52 insertions(+), 1 deletion(-) - -diff --git a/omx/gstomxvideoenc.c b/omx/gstomxvideoenc.c -index e65a9e0..cbb8cb9 100644 ---- a/omx/gstomxvideoenc.c -+++ b/omx/gstomxvideoenc.c -@@ -98,7 +98,8 @@ enum - PROP_QUANT_P_FRAMES, - PROP_QUANT_B_FRAMES, - PROP_SCALING_WIDTH, -- PROP_SCALING_HEIGHT -+ PROP_SCALING_HEIGHT, -+ PROP_CAPTURE - }; - - /* FIXME: Better defaults */ -@@ -109,6 +110,7 @@ enum - #define GST_OMX_VIDEO_ENC_QUANT_B_FRAMES_DEFAULT (0xffffffff) - #define GST_OMX_VIDEO_ENC_SCALING_WIDTH_DEFAULT (0xffffffff) - #define GST_OMX_VIDEO_ENC_SCALING_HEIGHT_DEFAULT (0xffffffff) -+#define GST_OMX_VIDEO_ENC_CAPTURE_DEFAULT (FALSE) - - /* class initialization */ - -@@ -181,6 +183,12 @@ gst_omx_video_enc_class_init (GstOMXVideoEncClass * klass) - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | - GST_PARAM_MUTABLE_READY)); - -+ g_object_class_install_property (gobject_class, PROP_CAPTURE, -+ g_param_spec_boolean ("capture", "Capture", -+ "Capture parameter (FALSE=component default)", -+ FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | -+ GST_PARAM_MUTABLE_READY)); -+ - element_class->change_state = - GST_DEBUG_FUNCPTR (gst_omx_video_enc_change_state); - -@@ -217,6 +225,7 @@ gst_omx_video_enc_init (GstOMXVideoEnc * self) - self->quant_b_frames = GST_OMX_VIDEO_ENC_QUANT_B_FRAMES_DEFAULT; - self->scaling_width = GST_OMX_VIDEO_ENC_SCALING_WIDTH_DEFAULT; - self->scaling_height = GST_OMX_VIDEO_ENC_SCALING_HEIGHT_DEFAULT; -+ self->capture = GST_OMX_VIDEO_ENC_CAPTURE_DEFAULT; - - g_mutex_init (&self->drain_lock); - g_cond_init (&self->drain_cond); -@@ -404,6 +413,40 @@ gst_omx_video_enc_open (GstVideoEncoder * encoder) - gst_omx_error_to_string (err), err); - } - } -+ -+ if (self->capture) { -+ OMX_CONFIG_BOOLEANTYPE capture_factor; -+ GST_OMX_INIT_STRUCT (&capture_factor); -+ -+ err = gst_omx_component_get_config (self->enc, -+ OMX_IndexConfigCapturing, &capture_factor); -+ -+ if (err == OMX_ErrorNone) { -+ -+ if (self->capture) -+ capture_factor.bEnabled = TRUE; -+ -+ err = -+ gst_omx_component_set_config (self->enc, -+ OMX_IndexConfigCapturing, &capture_factor); -+ if (err == OMX_ErrorUnsupportedIndex) { -+ GST_WARNING_OBJECT (self, -+ "Setting capture configuration not supported by the component"); -+ } else if (err == OMX_ErrorUnsupportedSetting) { -+ GST_WARNING_OBJECT (self, -+ "Setting capture configuration not supported by the component"); -+ } else if (err != OMX_ErrorNone) { -+ GST_ERROR_OBJECT (self, -+ "Failed to set capture configuration: %s (0x%08x)", -+ gst_omx_error_to_string (err), err); -+ return FALSE; -+ } -+ } else { -+ GST_ERROR_OBJECT (self, -+ "Failed to set capture configuration: %s (0x%08x)", -+ gst_omx_error_to_string (err), err); -+ } -+ } - } - - return TRUE; -@@ -508,6 +551,9 @@ gst_omx_video_enc_set_property (GObject * object, guint prop_id, - case PROP_SCALING_HEIGHT: - self->scaling_height = g_value_get_uint (value); - break; -+ case PROP_CAPTURE: -+ self->capture = g_value_get_boolean (value); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; -@@ -542,6 +588,9 @@ gst_omx_video_enc_get_property (GObject * object, guint prop_id, GValue * value, - case PROP_SCALING_HEIGHT: - g_value_set_uint (value, self->scaling_height); - break; -+ case PROP_CAPTURE: -+ g_value_set_boolean (value, self->capture); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; -diff --git a/omx/gstomxvideoenc.h b/omx/gstomxvideoenc.h -index 86e9c8f..e9844b8 100644 ---- a/omx/gstomxvideoenc.h -+++ b/omx/gstomxvideoenc.h -@@ -80,6 +80,8 @@ struct _GstOMXVideoEnc - guint32 scaling_width; - guint32 scaling_height; - -+ gboolean capture; -+ - GstFlowReturn downstream_flow_ret; - }; - --- -1.9.1 - diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0013-gstomxvideoenc-add-capture-geometry-support.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0013-gstomxvideoenc-add-capture-geometry-support.patch deleted file mode 100644 index 72f579ba..00000000 --- a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0013-gstomxvideoenc-add-capture-geometry-support.patch +++ /dev/null @@ -1,158 +0,0 @@ -From 407a4cdc9fe7b8c4e8a3a5a76a0c9e6a34b4cd96 Mon Sep 17 00:00:00 2001 -From: Leo Liu <leo.liu@amd.com> -Date: Mon, 3 Mar 2014 16:38:20 -0500 -Subject: [PATCH 13/14] gstomxvideoenc: add capture geometry support - -Signed-off-by: Leo Liu <leo.liu@amd.com> ---- - omx/gstomxvideoenc.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++++---- - omx/gstomxvideoenc.h | 2 ++ - 2 files changed, 75 insertions(+), 5 deletions(-) - -diff --git a/omx/gstomxvideoenc.c b/omx/gstomxvideoenc.c -index cbb8cb9..83c68fe 100644 ---- a/omx/gstomxvideoenc.c -+++ b/omx/gstomxvideoenc.c -@@ -99,7 +99,9 @@ enum - PROP_QUANT_B_FRAMES, - PROP_SCALING_WIDTH, - PROP_SCALING_HEIGHT, -- PROP_CAPTURE -+ PROP_CAPTURE, -+ PROP_POS_X, -+ PROP_POS_Y - }; - - /* FIXME: Better defaults */ -@@ -111,6 +113,8 @@ enum - #define GST_OMX_VIDEO_ENC_SCALING_WIDTH_DEFAULT (0xffffffff) - #define GST_OMX_VIDEO_ENC_SCALING_HEIGHT_DEFAULT (0xffffffff) - #define GST_OMX_VIDEO_ENC_CAPTURE_DEFAULT (FALSE) -+#define GST_OMX_VIDEO_ENC_POS_X_DEFAULT (0) -+#define GST_OMX_VIDEO_ENC_POS_Y_DEFAULT (0) - - /* class initialization */ - -@@ -189,6 +193,20 @@ gst_omx_video_enc_class_init (GstOMXVideoEncClass * klass) - FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | - GST_PARAM_MUTABLE_READY)); - -+ g_object_class_install_property (gobject_class, PROP_POS_X, -+ g_param_spec_uint ("pos-x", "Position X", -+ "Capture Position X parameter (0=component default)", -+ 0, G_MAXUINT, GST_OMX_VIDEO_ENC_POS_X_DEFAULT, -+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | -+ GST_PARAM_MUTABLE_READY)); -+ -+ g_object_class_install_property (gobject_class, PROP_POS_Y, -+ g_param_spec_uint ("pos-y", "Position Y", -+ "Capture Position Y parameter (0=component default)", -+ 0, G_MAXUINT, GST_OMX_VIDEO_ENC_POS_Y_DEFAULT, -+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | -+ GST_PARAM_MUTABLE_READY)); -+ - element_class->change_state = - GST_DEBUG_FUNCPTR (gst_omx_video_enc_change_state); - -@@ -226,6 +244,8 @@ gst_omx_video_enc_init (GstOMXVideoEnc * self) - self->scaling_width = GST_OMX_VIDEO_ENC_SCALING_WIDTH_DEFAULT; - self->scaling_height = GST_OMX_VIDEO_ENC_SCALING_HEIGHT_DEFAULT; - self->capture = GST_OMX_VIDEO_ENC_CAPTURE_DEFAULT; -+ self->pos_x = GST_OMX_VIDEO_ENC_POS_X_DEFAULT; -+ self->pos_y = GST_OMX_VIDEO_ENC_POS_Y_DEFAULT; - - g_mutex_init (&self->drain_lock); - g_cond_init (&self->drain_cond); -@@ -426,10 +446,46 @@ gst_omx_video_enc_open (GstVideoEncoder * encoder) - if (self->capture) - capture_factor.bEnabled = TRUE; - -- err = -- gst_omx_component_set_config (self->enc, -- OMX_IndexConfigCapturing, &capture_factor); -- if (err == OMX_ErrorUnsupportedIndex) { -+ err = gst_omx_component_set_config (self->enc, -+ OMX_IndexConfigCapturing, &capture_factor); -+ if (err == OMX_ErrorNone) { -+ if (self->pos_x || self->pos_y) { -+ OMX_CONFIG_POINTTYPE pos_factor; -+ -+ GST_OMX_INIT_STRUCT (&pos_factor); -+ pos_factor.nPortIndex = self->enc_out_port->index; -+ -+ err = gst_omx_component_get_config (self->enc, -+ OMX_IndexConfigCommonOutputPosition, &pos_factor); -+ -+ if (err == OMX_ErrorNone) { -+ if (self->pos_x) -+ pos_factor.nX = self->pos_x; -+ if (self->pos_y) -+ pos_factor.nY = self->pos_y; -+ err = gst_omx_component_set_config (self->enc, -+ OMX_IndexConfigCommonOutputPosition, &pos_factor); -+ if (err == OMX_ErrorUnsupportedIndex) { -+ GST_WARNING_OBJECT (self, -+ "Setting capture position configuration not supported by the component"); -+ } else if (err == OMX_ErrorUnsupportedSetting) { -+ GST_WARNING_OBJECT (self, -+ "Setting capture position configuration %u %u not supported by the component", -+ self->pos_x, self->pos_y); -+ } else if (err != OMX_ErrorNone) { -+ GST_ERROR_OBJECT (self, -+ "Failed to set capture position configuration: %s (0x%08x)", -+ gst_omx_error_to_string (err), err); -+ return FALSE; -+ } -+ }else { -+ GST_ERROR_OBJECT (self, -+ "Failed to set capture position configuration: %s (0x%08x)", -+ gst_omx_error_to_string (err), err); -+ } -+ } -+ } -+ else if (err == OMX_ErrorUnsupportedIndex) { - GST_WARNING_OBJECT (self, - "Setting capture configuration not supported by the component"); - } else if (err == OMX_ErrorUnsupportedSetting) { -@@ -554,6 +610,12 @@ gst_omx_video_enc_set_property (GObject * object, guint prop_id, - case PROP_CAPTURE: - self->capture = g_value_get_boolean (value); - break; -+ case PROP_POS_X: -+ self->pos_x = g_value_get_uint (value); -+ break; -+ case PROP_POS_Y: -+ self->pos_y = g_value_get_uint (value); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; -@@ -591,6 +653,12 @@ gst_omx_video_enc_get_property (GObject * object, guint prop_id, GValue * value, - case PROP_CAPTURE: - g_value_set_boolean (value, self->capture); - break; -+ case PROP_POS_X: -+ g_value_set_uint (value, self->pos_x); -+ break; -+ case PROP_POS_Y: -+ g_value_set_uint (value, self->pos_y); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; -diff --git a/omx/gstomxvideoenc.h b/omx/gstomxvideoenc.h -index e9844b8..3de563b 100644 ---- a/omx/gstomxvideoenc.h -+++ b/omx/gstomxvideoenc.h -@@ -81,6 +81,8 @@ struct _GstOMXVideoEnc - guint32 scaling_height; - - gboolean capture; -+ guint32 pos_x; -+ guint32 pos_y; - - GstFlowReturn downstream_flow_ret; - }; --- -1.9.1 - diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0014-gstomxvideoenc-reduce-shutdown-timeout-for-tunnellin.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0014-gstomxvideoenc-reduce-shutdown-timeout-for-tunnellin.patch deleted file mode 100644 index 2a8d1c42..00000000 --- a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0014-gstomxvideoenc-reduce-shutdown-timeout-for-tunnellin.patch +++ /dev/null @@ -1,29 +0,0 @@ -From c321d1666fd107d5e3a673789ddf5b9db2b831ec Mon Sep 17 00:00:00 2001 -From: Leo Liu <leo.liu@amd.com> -Date: Fri, 22 Aug 2014 12:37:55 -0400 -Subject: [PATCH 14/14] gstomxvideoenc: reduce shutdown timeout for tunnelling - -Signed-off-by: Leo Liu <leo.liu@amd.com> ---- - omx/gstomxvideoenc.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/omx/gstomxvideoenc.c b/omx/gstomxvideoenc.c -index 83c68fe..f42ec13 100644 ---- a/omx/gstomxvideoenc.c -+++ b/omx/gstomxvideoenc.c -@@ -528,7 +528,10 @@ gst_omx_video_enc_shutdown (GstOMXVideoEnc * self) - gst_omx_port_set_enabled (self->enc_in_port, FALSE); - gst_omx_port_deallocate_buffers (self->enc_out_port); - if (state > OMX_StateLoaded) -- gst_omx_component_get_state (self->enc, 5 * GST_SECOND); -+ if (!self->enc_in_port->tunneled) -+ gst_omx_component_get_state (self->enc, 5 * GST_SECOND); -+ else -+ gst_omx_component_get_state (self->enc, 1 * GST_SECOND); - } - - return TRUE; --- -1.9.1 - diff --git a/meta-v1000/recipes-core/llvm/files/0001-CrossCompile.cmake-adjust-build-for-OE.patch b/meta-v1000/recipes-core/llvm/files/0001-CrossCompile.cmake-adjust-build-for-OE.patch deleted file mode 100644 index bf03ec2f..00000000 --- a/meta-v1000/recipes-core/llvm/files/0001-CrossCompile.cmake-adjust-build-for-OE.patch +++ /dev/null @@ -1,44 +0,0 @@ -From eb27ad28d5171770d27415ace95f4c91f15828bf Mon Sep 17 00:00:00 2001 -From: Awais Belal <awais_belal@mentor.com> -Date: Wed, 21 Dec 2016 14:32:50 +0500 -Subject: [PATCH] CrossCompile.cmake: adjust build for OE - -CMake picks up its values from these environment variables -in case of native builds and in OE we set these to target -tools which will be incorrect in this case. -We specifically need to strip the BUILD_CC variable -before setting CC through it because OE tends to -add a space which isn't liked too much by cmake. - -Signed-off-by: Awais Belal <awais_belal@mentor.com> ---- - cmake/modules/CrossCompile.cmake | 13 +++++++++++++ - 1 file changed, 13 insertions(+) - -diff --git a/cmake/modules/CrossCompile.cmake b/cmake/modules/CrossCompile.cmake -index 9c598a6..cf76fd6 100644 ---- a/cmake/modules/CrossCompile.cmake -+++ b/cmake/modules/CrossCompile.cmake -@@ -4,6 +4,19 @@ function(llvm_create_cross_target_internal target_name toolchain buildtype) - set(LLVM_${target_name}_BUILD "${CMAKE_BINARY_DIR}/${target_name}") - set(LLVM_${target_name}_BUILD ${LLVM_${target_name}_BUILD} PARENT_SCOPE) - message(STATUS "Setting native build dir to " ${LLVM_${target_name}_BUILD}) -+ string(STRIP $ENV{BUILD_CC} build_cc) -+ set(ENV{AR} $ENV{BUILD_AR}) -+ set(ENV{ASM} ${build_cc}) -+ set(ENV{ASMFLAGS} $ENV{BUILD_CFLAGS}) -+ set(ENV{CC} ${build_cc}) -+ set(ENV{CFLAGS} $ENV{BUILD_CFLAGS}) -+ set(ENV{CXX} $ENV{BUILD_CXX}) -+ set(ENV{CXXFLAGS} $ENV{BUILD_CXXFLAGS}) -+ set(ENV{CPP} $ENV{BUILD_CPP}) -+ set(ENV{CPPFLAGS} $ENV{BUILD_CPPFLAGS}) -+ set(ENV{NM} $ENV{BUILD_NM}) -+ set(ENV{RANLIB} $ENV{BUILD_RANLIB}) -+ set(ENV{LDFLAGS} $ENV{BUILD_LDFLAGS}) - endif(NOT DEFINED LLVM_${target_name}_BUILD) - - if (EXISTS ${LLVM_MAIN_SRC_DIR}/cmake/platforms/${toolchain}.cmake) --- -1.9.1 - diff --git a/meta-v1000/recipes-core/llvm/files/0002-CrossCompile.cmake-use-target-BuildVariables-include.patch b/meta-v1000/recipes-core/llvm/files/0002-CrossCompile.cmake-use-target-BuildVariables-include.patch deleted file mode 100644 index 5ed00757..00000000 --- a/meta-v1000/recipes-core/llvm/files/0002-CrossCompile.cmake-use-target-BuildVariables-include.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 489b229104c76651ff36fc5639384cf9dc6b8d7d Mon Sep 17 00:00:00 2001 -From: Awais Belal <awais_belal@mentor.com> -Date: Fri, 23 Dec 2016 03:19:18 +0500 -Subject: [PATCH] CrossCompile.cmake: use target BuildVariables include for - host - -This is primarily OE specific where we'd like to report -the target build variables when checked through host -llvm-config because that is used for configuring -projects depending on LLVM. - -Signed-off-by: Awais Belal <awais_belal@mentor.com> ---- - cmake/modules/CrossCompile.cmake | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/cmake/modules/CrossCompile.cmake b/cmake/modules/CrossCompile.cmake -index 9c598a6..173aefd 100644 ---- a/cmake/modules/CrossCompile.cmake -+++ b/cmake/modules/CrossCompile.cmake -@@ -22,7 +22,8 @@ function(llvm_create_cross_target_internal target_name toolchain buildtype) - -DLLVM_TARGET_IS_CROSSCOMPILE_HOST=TRUE - WORKING_DIRECTORY ${LLVM_${target_name}_BUILD} - DEPENDS ${LLVM_${target_name}_BUILD} -- COMMENT "Configuring ${target_name} LLVM...") -+ COMMENT "Configuring ${target_name} LLVM..." -+ COMMAND "${CMAKE_COMMAND}" "-E" "copy" "${CMAKE_SOURCE_DIR}/../build/tools/llvm-config/BuildVariables.inc" "${CMAKE_SOURCE_DIR}/../build/NATIVE/tools/llvm-config/BuildVariables.inc") - - add_custom_target(CONFIGURE_LLVM_${target_name} - DEPENDS ${LLVM_${target_name}_BUILD}/CMakeCache.txt) --- -1.9.1 - diff --git a/meta-v1000/recipes-core/llvm/files/0004-CrossCompile.cmake-strip-sysroot-info-from-build-var.patch b/meta-v1000/recipes-core/llvm/files/0004-CrossCompile.cmake-strip-sysroot-info-from-build-var.patch deleted file mode 100644 index 832cdceb..00000000 --- a/meta-v1000/recipes-core/llvm/files/0004-CrossCompile.cmake-strip-sysroot-info-from-build-var.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 8b668989bc17433ab507ec442b51a1518b593604 Mon Sep 17 00:00:00 2001 -From: Awais Belal <awais_belal@mentor.com> -Date: Thu, 9 Feb 2017 18:15:45 +0500 -Subject: [PATCH] CrossCompile.cmake: strip sysroot info from build variables - -This is to align with the recipe specific sysroot mechanism -which will otherwise break the build for any other package -that utilizes LLVM by specifying the LLVM sysroot on the -compiler/linker commandline rather than that package's -specific sysroot. - -Signed-off-by: Awais Belal <awais_belal@mentor.com> ---- - cmake/modules/CrossCompile.cmake | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/cmake/modules/CrossCompile.cmake b/cmake/modules/CrossCompile.cmake -index 6378b7e..9682a98 100644 ---- a/cmake/modules/CrossCompile.cmake -+++ b/cmake/modules/CrossCompile.cmake -@@ -36,7 +36,9 @@ function(llvm_create_cross_target_internal target_name toolchain buildtype) - WORKING_DIRECTORY ${LLVM_${target_name}_BUILD} - DEPENDS ${LLVM_${target_name}_BUILD} - COMMENT "Configuring ${target_name} LLVM..." -- COMMAND "${CMAKE_COMMAND}" "-E" "copy" "${CMAKE_SOURCE_DIR}/../build/tools/llvm-config/BuildVariables.inc" "${CMAKE_SOURCE_DIR}/../build/NATIVE/tools/llvm-config/BuildVariables.inc") -+ COMMAND "${CMAKE_COMMAND}" "-E" "copy" "${CMAKE_SOURCE_DIR}/../build/tools/llvm-config/BuildVariables.inc" "${CMAKE_SOURCE_DIR}/../build/NATIVE/tools/llvm-config/BuildVariables.inc" -+ COMMAND sed -i "'s/\\(.*--sysroot=\\\)[^ ]* \\(.*\\)/\\1 \\2/g'" "${CMAKE_SOURCE_DIR}/../build/NATIVE/tools/llvm-config/BuildVariables.inc" -+ COMMAND sed -i "'s/--sysroot=//g'" "${CMAKE_SOURCE_DIR}/../build/NATIVE/tools/llvm-config/BuildVariables.inc") - - add_custom_target(CONFIGURE_LLVM_${target_name} - DEPENDS ${LLVM_${target_name}_BUILD}/CMakeCache.txt) --- -1.9.1 - |