OSDN Git Service

add bootstrap step to libdca
[handbrake-jp/handbrake-jp-git.git] / libhb / encvorbis.c
index 47a6077..f483a09 100644 (file)
@@ -68,6 +68,12 @@ int encvorbisInit( hb_work_object_t * w, hb_job_t * job )
     }
 
     /* init */
+    for( i = 0; i < 3; i++ )
+    {
+        // Zero vorbis headers so that we don't crash in mk_laceXiph
+        // when vorbis_encode_setup_managed fails.
+        memset( w->config->vorbis.headers[i], 0, sizeof( ogg_packet ) );
+    }
     vorbis_info_init( &pv->vi );
     if( vorbis_encode_setup_managed( &pv->vi, pv->out_discrete_channels,
           audio->config.out.samplerate, -1, 1000 * audio->config.out.bitrate, -1 ) )
@@ -123,12 +129,25 @@ int encvorbisInit( hb_work_object_t * w, hb_job_t * job )
             pv->channel_map[0] = 0;
             break;
         case 6:
-            pv->channel_map[0] = 0;
-            pv->channel_map[1] = 2;
-            pv->channel_map[2] = 1;
-            pv->channel_map[3] = 4;
-            pv->channel_map[4] = 5;
-            pv->channel_map[5] = 3;
+            // Vorbis use the following channels map = L C R Ls Rs Lfe
+            if( audio->config.in.codec == HB_ACODEC_AC3 )
+            {
+                pv->channel_map[0] = 1;
+                pv->channel_map[1] = 2;
+                pv->channel_map[2] = 3;
+                pv->channel_map[3] = 4;
+                pv->channel_map[4] = 5;
+                pv->channel_map[5] = 0;
+            }
+            else
+            {
+                pv->channel_map[0] = 1;
+                pv->channel_map[1] = 0;
+                pv->channel_map[2] = 2;
+                pv->channel_map[3] = 3;
+                pv->channel_map[4] = 4;
+                pv->channel_map[5] = 5;
+            }
             break;
         default:
             hb_log("encvorbis.c: Unable to correctly proccess %d channels, assuming stereo.", pv->out_discrete_channels);