[vlc-commits] avcodec: refactor channel_layout mapping
Thomas Guillem
git at videolan.org
Thu Sep 29 15:53:59 CEST 2016
vlc | branch: master | Thomas Guillem <thomas at gllm.fr> | Thu Sep 29 11:51:51 2016 +0200| [d9b434cfb47a1ce43232718b4bbf31341ef061cb] | committer: Thomas Guillem
avcodec: refactor channel_layout mapping
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=d9b434cfb47a1ce43232718b4bbf31341ef061cb
---
modules/codec/avcodec/audio.c | 32 +++++++++++++-------------------
1 file changed, 13 insertions(+), 19 deletions(-)
diff --git a/modules/codec/avcodec/audio.c b/modules/codec/avcodec/audio.c
index 8417988..a0d5c03 100644
--- a/modules/codec/avcodec/audio.c
+++ b/modules/codec/avcodec/audio.c
@@ -500,34 +500,28 @@ static void SetupOutputFormat( decoder_t *p_dec, bool b_trust )
p_sys->i_previous_layout = p_sys->p_context->channel_layout;
}
- /* Specified order
- * FIXME should we use fmt_in.audio.i_physical_channels or not ?
- */
- const unsigned i_order_max = 8 * sizeof(p_sys->p_context->channel_layout);
+ const unsigned i_order_max = sizeof(pi_channels_map)/sizeof(*pi_channels_map);
uint32_t pi_order_src[i_order_max];
+
int i_channels_src = 0;
+ int64_t channel_layout =
+ p_sys->p_context->channel_layout ? p_sys->p_context->channel_layout :
+ av_get_default_channel_layout( p_sys->p_context->channels );
- if( p_sys->p_context->channel_layout )
+ if( channel_layout )
{
- for( unsigned i = 0; i < sizeof(pi_channels_map)/sizeof(*pi_channels_map); i++ )
+ for( unsigned i = 0; i < i_order_max
+ && i_channels_src < p_sys->p_context->channels; i++ )
{
- if( p_sys->p_context->channel_layout & pi_channels_map[i][0] )
+ if( channel_layout & pi_channels_map[i][0] )
pi_order_src[i_channels_src++] = pi_channels_map[i][1];
}
+
+ if( i_channels_src != p_sys->p_context->channels && b_trust )
+ msg_Err( p_dec, "Channel layout not understood" );
}
else
- {
- /* Create default order */
- if( b_trust )
- msg_Warn( p_dec, "Physical channel configuration not set : guessing" );
- for( unsigned int i = 0; i < __MIN( i_order_max, (unsigned)p_sys->p_context->channels ); i++ )
- {
- if( i < sizeof(pi_channels_map)/sizeof(*pi_channels_map) )
- pi_order_src[i_channels_src++] = pi_channels_map[i][1];
- }
- }
- if( i_channels_src != p_sys->p_context->channels && b_trust )
- msg_Err( p_dec, "Channel layout not understood" );
+ msg_Warn( p_dec, "no channel layout found");
uint32_t i_layout_dst;
int i_channels_dst;
More information about the vlc-commits
mailing list