Combine SPS/PPS header to IDR frame.
(cherry picked from http://192.168.110.45/jh7100/buildroot/-/commit/ed8e94ec351c61073a1408df54fb01b5c1deff2c)
This commit is contained in:
@@ -0,0 +1,67 @@
|
|||||||
|
Combine SPS/PPS header to IDR frame.
|
||||||
|
|
||||||
|
Signed-off-by: Windsome Zeng <windsome.zeng@starfivetech.com>
|
||||||
|
|
||||||
|
diff -purN a/meson.build b/meson.build
|
||||||
|
--- a/meson.build 2022-05-13 11:31:02.725614796 +0800
|
||||||
|
+++ b/meson.build 2022-05-13 11:32:26.213975419 +0800
|
||||||
|
@@ -218,6 +218,7 @@ elif omx_target == 'tizonia'
|
||||||
|
omx_inc = []
|
||||||
|
elif omx_target == 'stf'
|
||||||
|
cdata.set('USE_OMX_TARGET_STARFIVE', 1)
|
||||||
|
+ gst_omx_args += ['-DCOMBINE_SPS_PPS_HEADERS']
|
||||||
|
warning('stf selected')
|
||||||
|
else
|
||||||
|
error ('Unsupported omx target specified. Use the -Dtarget option')
|
||||||
|
diff -purN a/omx/gstomx.c b/omx/gstomx.c
|
||||||
|
--- a/omx/gstomx.c 2022-05-13 11:31:02.725614796 +0800
|
||||||
|
+++ b/omx/gstomx.c 2022-05-13 11:33:15.461950978 +0800
|
||||||
|
@@ -70,6 +70,11 @@ static GHashTable *core_handles;
|
||||||
|
G_LOCK_DEFINE_STATIC (buffer_flags_str);
|
||||||
|
static GHashTable *buffer_flags_str;
|
||||||
|
|
||||||
|
+#ifdef COMBINE_SPS_PPS_HEADERS
|
||||||
|
+static OMX_U8 *sps_pps_header = NULL;
|
||||||
|
+static OMX_U32 sps_pps_header_size = 0;
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
GstOMXCore *
|
||||||
|
gst_omx_core_acquire (const gchar * filename)
|
||||||
|
{
|
||||||
|
@@ -903,6 +908,36 @@ FillBufferDone (OMX_HANDLETYPE hComponen
|
||||||
|
|
||||||
|
g_assert (buf->omx_buf == pBuffer);
|
||||||
|
|
||||||
|
+#ifdef COMBINE_SPS_PPS_HEADERS
|
||||||
|
+ if (pBuffer->nFlags == 0x80) {
|
||||||
|
+ g_assert (sps_pps_header == NULL);
|
||||||
|
+ if (sps_pps_header)
|
||||||
|
+ g_free (sps_pps_header);
|
||||||
|
+
|
||||||
|
+ sps_pps_header = g_new (OMX_U8, pBuffer->nFilledLen);
|
||||||
|
+ if (sps_pps_header) {
|
||||||
|
+ sps_pps_header_size = pBuffer->nFilledLen;
|
||||||
|
+ memcpy(sps_pps_header, pBuffer->pBuffer + pBuffer->nOffset, pBuffer->nFilledLen);
|
||||||
|
+ }
|
||||||
|
+ return OMX_ErrorNone;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (sps_pps_header) {
|
||||||
|
+ g_assert (sps_pps_header_size + pBuffer->nFilledLen <= pBuffer->nAllocLen);
|
||||||
|
+ if (sps_pps_header_size + pBuffer->nFilledLen <= pBuffer->nAllocLen) {
|
||||||
|
+ OMX_U8 *buf;
|
||||||
|
+ buf = pBuffer->pBuffer + pBuffer->nOffset;
|
||||||
|
+ memmove (buf + sps_pps_header_size, buf, pBuffer->nFilledLen);
|
||||||
|
+ memcpy (buf, sps_pps_header, sps_pps_header_size);
|
||||||
|
+ pBuffer->nFilledLen += sps_pps_header_size;
|
||||||
|
+
|
||||||
|
+ g_free (sps_pps_header);
|
||||||
|
+ sps_pps_header = NULL;
|
||||||
|
+ sps_pps_header_size = 0;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+#endif /* COMBINE_SPS_PPS_HEADERS */
|
||||||
|
+
|
||||||
|
if (buf->port->tunneled) {
|
||||||
|
GST_ERROR ("FillBufferDone on tunneled port");
|
||||||
|
return OMX_ErrorBadParameter;
|
||||||
Reference in New Issue
Block a user