<p>Attached is a patch that circumvents any potential issue by giving DecoderDispatchBlock a new argument named <code>b_do_cc</code> which simply toggles any potential invocation of <code>DecoderGetCc</code> on/off.</p>
<p>The pertinent changes compared to the previous patch are below:</p>
<pre><code>diff --git a/src/input/decoder.c b/src/input/decoder.c
index d723acf..5e4fbf6 100644
--- a/src/input/decoder.c
+++ b/src/input/decoder.c
@@ -1207,7 +1207,7 @@ static void DecoderProcessSpu( decoder_t *p_dec, block_t *p_block )
* \param pf_decode pointer-to-function responsible for decoding the passed block
**/
static void DecoderDispatchBlock( decoder_t * p_dec, block_t * p_block,
- void( *pf_decode )( decoder_t*, block_t* ) )
+ void( *pf_decode )( decoder_t*, block_t* ), bool b_do_cc )
{
decoder_owner_sys_t *p_owner = p_dec->p_owner;
@@ -1236,7 +1236,7 @@ static void DecoderDispatchBlock( decoder_t * p_dec, block_t * p_block,
}
}
- if( p_packetizer->pf_get_cc )
+ if( b_do_cc && p_packetizer->pf_get_cc )
DecoderGetCc( p_dec, p_packetizer );
while( p_packetized_block )
@@ -1289,8 +1289,8 @@ static void DecoderProcess( decoder_t *p_dec, block_t *p_block )
switch( p_dec->fmt_out.i_cat )
{
- case VIDEO_ES: return DecoderDispatchBlock( p_dec, p_block, &DecoderDecodeVideo );
- case AUDIO_ES: return DecoderDispatchBlock( p_dec, p_block, &DecoderDecodeAudio );
+ case VIDEO_ES: return DecoderDispatchBlock( p_dec, p_block, &DecoderDecodeVideo, true );
+ case AUDIO_ES: return DecoderDispatchBlock( p_dec, p_block, &DecoderDecodeAudio, false );
case SPU_ES: return DecoderProcessSpu( p_dec, p_block );
default:</code></pre>
<p>See the attached file for the full patch.</p>