]> git.sesse.net Git - vlc/blobdiff - modules/codec/vorbis.c
vout: remove unimplemented GET_OPENGL controls
[vlc] / modules / codec / vorbis.c
index a9554b692cd6fbfb08f734480eea67b9e3a83f27..077a1c3becf6877ba00da410f44446a469a8aaf5 100644 (file)
@@ -318,7 +318,8 @@ static block_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
     {
         if( ProcessHeaders( p_dec ) )
         {
-            block_Release( *pp_block );
+            if( *pp_block )
+                block_Release( *pp_block );
             return NULL;
         }
         p_sys->b_has_headers = true;
@@ -362,9 +363,10 @@ static int ProcessHeaders( decoder_t *p_dec )
     p_dec->fmt_out.audio.i_rate     = p_sys->vi.rate;
     p_dec->fmt_out.audio.i_channels = p_sys->vi.channels;
 
-    if( p_dec->fmt_out.audio.i_channels > 9 )
+    if( p_dec->fmt_out.audio.i_channels >= ARRAY_SIZE(pi_channels_maps) )
     {
-        msg_Err( p_dec, "invalid number of channels (not between 1 and 9): %i",
+        msg_Err( p_dec, "invalid number of channels (1-%zu): %i",
+                 ARRAY_SIZE(pi_channels_maps),
                  p_dec->fmt_out.audio.i_channels );
         return VLC_EGENERIC;
     }
@@ -372,12 +374,12 @@ static int ProcessHeaders( decoder_t *p_dec )
     p_dec->fmt_out.audio.i_physical_channels =
         p_dec->fmt_out.audio.i_original_channels =
             pi_channels_maps[p_sys->vi.channels];
-    p_dec->fmt_out.i_bitrate = p_sys->vi.bitrate_nominal;
+    p_dec->fmt_out.i_bitrate = __MAX( 0, (int32_t) p_sys->vi.bitrate_nominal );
 
     date_Init( &p_sys->end_date, p_sys->vi.rate, 1 );
 
-    msg_Dbg( p_dec, "channels:%d samplerate:%ld bitrate:%ld",
-             p_sys->vi.channels, p_sys->vi.rate, p_sys->vi.bitrate_nominal );
+    msg_Dbg( p_dec, "channels:%d samplerate:%ld bitrate:%ud",
+             p_sys->vi.channels, p_sys->vi.rate, p_dec->fmt_out.i_bitrate );
 
     /* The next packet in order is the comments header */
     oggpacket.b_o_s  = 0;
@@ -469,11 +471,16 @@ static void Interleave( INTERLEAVE_TYPE *p_out, const INTERLEAVE_TYPE **pp_in,
 {
     for( int j = 0; j < i_samples; j++ )
         for( int i = 0; i < i_nb_channels; i++ )
+        {
 #ifdef MODULE_NAME_IS_tremor
-            p_out[j * i_nb_channels + pi_chan_table[i]] = pp_in[i][j] << 8;
+            union { int32_t i; uint32_t u;} spl;
+
+            spl.u = ((uint32_t)pp_in[i][j]) << 8;
+            p_out[j * i_nb_channels + pi_chan_table[i]] = spl.i;
 #else
             p_out[j * i_nb_channels + pi_chan_table[i]] = pp_in[i][j];
 #endif
+        }
 }
 
 /*****************************************************************************