aboutsummaryrefslogtreecommitdiffstats
path: root/main/vlc/0004-omxil-bcm-h264-Don-t-wait-for-error-free-frame.patch
blob: 502f9671cede572cfc0656aaa7027f2a7342e0f1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
From 18cbe9639c57d5d3cc676909c64acd89997bcac3 Mon Sep 17 00:00:00 2001
From: Julian Scheel <julian@jusst.de>
Date: Thu, 12 Sep 2013 10:14:13 +0200
Subject: [PATCH] omxil: bcm: h264: Don't wait for error free frame.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The bcm h264 decoder is not able to detect when the first error free frame has
been decoded for certain h264 streams. To avoid not getting any frames out of
the decoder, disable the StartWithValidFrame flag until that is fixed at bcm.
See https://github.com/huceke/omxplayer/issues/96 for details.

Signed-off-by: Julian Scheel <julian@jusst.de>
Signed-off-by: Martin Storsjö <martin@martin.st>
---
 modules/codec/omxil/omxil.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/modules/codec/omxil/omxil.c b/modules/codec/omxil/omxil.c
index 0fafedf..da86e23 100644
--- a/modules/codec/omxil/omxil.c
+++ b/modules/codec/omxil/omxil.c
@@ -50,6 +50,7 @@
 /* Defined in the broadcom version of OMX_Index.h */
 #define OMX_IndexConfigRequestCallback 0x7f000063
 #define OMX_IndexParamBrcmPixelAspectRatio 0x7f00004d
+#define OMX_IndexParamBrcmVideoDecodeErrorConcealment 0x7f000080
 
 /* Defined in the broadcom version of OMX_Core.h */
 #define OMX_EventParamOrConfigChanged 0x7F000001
@@ -745,6 +746,21 @@ static OMX_ERRORTYPE InitialiseComponent(decoder_t *p_dec,
         if(omx_error != OMX_ErrorNone) goto error;
     }
 
+    if(!strncmp(p_sys->psz_component, "OMX.broadcom.", 13) &&
+        p_sys->in.p_fmt->i_codec == VLC_CODEC_H264)
+    {
+        OMX_PARAM_BRCMVIDEODECODEERRORCONCEALMENTTYPE concanParam;
+        OMX_INIT_STRUCTURE(concanParam);
+        concanParam.bStartWithValidFrame = OMX_FALSE;
+
+        omx_error = OMX_SetParameter(omx_handle,
+                OMX_IndexParamBrcmVideoDecodeErrorConcealment, &concanParam);
+        if (omx_error == OMX_ErrorNone)
+            msg_Dbg(p_dec, "StartWithValidFrame disabled.");
+        else
+            msg_Dbg(p_dec, "Could not disable StartWithValidFrame.");
+    }
+
     /* Allocate our array for the omx buffers and enable ports */
     for(i = 0; i < p_sys->ports; i++)
     {
-- 
1.8.5.2