]> git.sesse.net Git - vlc/commitdiff
avcodec: try to find packet sample format for encoding
authorIlkka Ollakka <ileoo@videolan.org>
Sat, 29 Dec 2012 13:21:43 +0000 (15:21 +0200)
committerIlkka Ollakka <ileoo@videolan.org>
Sun, 30 Dec 2012 11:24:27 +0000 (13:24 +0200)
modules/codec/avcodec/encoder.c

index 79f9951384e8833caac4d56d3399eeedcc707a01..c3e81b28200e4a7630582d6a2f6d5a8600b83842 100644 (file)
@@ -593,6 +593,22 @@ int OpenEncoder( vlc_object_t *p_this )
         p_context->sample_fmt  = p_codec->sample_fmts ?
                                     p_codec->sample_fmts[0] :
                                     AV_SAMPLE_FMT_S16;
+
+        // Try if we can use interleaved format for codec input as VLC doesn't really do planar audio yet
+        // FIXME: Remove when planar/interleaved audio in vlc is equally supported
+        if( av_sample_fmt_is_planar( p_context->sample_fmt ) )
+        {
+            msg_Dbg( p_enc, "Trying to find packet sample format instead of %s", av_get_sample_fmt_name( p_context->sample_fmt ) );
+            for( unsigned int i=0; p_codec->sample_fmts[i] != -1; i++ )
+            {
+                if( !av_sample_fmt_is_planar( p_codec->sample_fmts[i] ) )
+                {
+                    p_context->sample_fmt = p_codec->sample_fmts[i];
+                    msg_Dbg( p_enc, "Using %s as new sample format", av_get_sample_fmt_name( p_context->sample_fmt ) );
+                    break;
+                }
+            }
+        }
         p_enc->fmt_in.i_codec  = GetVlcAudioFormat( p_context->sample_fmt );
 
         p_context->sample_rate = p_enc->fmt_out.audio.i_rate;