Part of Slepp's ProjectsPastebinTURLImagebinFilebin
Feedback -- English French German Japanese
Create Upload Newest Tools Donate
Sign In | Create Account

AAC/AC3
Friday, February 15th, 2008 at 5:34:19pm MST 

  1. Index: libhb/deca52.c
  2. ===================================================================
  3. --- libhb/deca52.c      (revision 1265)
  4. +++ libhb/deca52.c      (working copy)
  5. @@ -215,7 +215,8 @@
  6.      hb_list_getbytes( pv->list, pv->frame, pv->size, &pts, &pos );
  7.  
  8.      /* AC3 passthrough: don't decode the AC3 frame */
  9. -    if( pv->job->acodec & HB_ACODEC_AC3 )
  10. +    if( pv->job->acodec & HB_ACODEC_AC3 ||
  11. +        w->amixdown == HB_AMIXDOWN_AC3 )
  12.      {
  13.          buf = hb_buffer_init( pv->size );
  14.          memcpy( buf->data, pv->frame, pv->size );
  15. Index: libhb/muxmp4.c
  16. ===================================================================
  17. --- libhb/muxmp4.c      (revision 1265)
  18. +++ libhb/muxmp4.c      (working copy)
  19. @@ -303,7 +303,8 @@
  20.          mux_data = malloc( sizeof( hb_mux_data_t ) );
  21.          audio->mux_data = mux_data;
  22.  
  23. -        if( job->acodec & HB_ACODEC_AC3 )
  24. +        if( job->acodec & HB_ACODEC_AC3 ||
  25. +            job->audio_mixdowns[i] == HB_AMIXDOWN_AC3 )
  26.          {
  27.              mux_data->track = MP4AddAC3AudioTrack(
  28.                  m->file,
  29. Index: libhb/sync.c
  30. ===================================================================
  31. --- libhb/sync.c        (revision 1265)
  32. +++ libhb/sync.c        (working copy)
  33. @@ -144,7 +144,8 @@
  34.  
  35.      for( i = 0; i < hb_list_count( title->list_audio ); i++ )
  36.      {
  37. -        if( job->acodec & HB_ACODEC_AC3 )
  38. +        if( job->acodec & HB_ACODEC_AC3 ||
  39. +            job->audio_mixdowns[i] == HB_AMIXDOWN_AC3 )
  40.          {
  41.              free( pv->sync_audio[i].ac3_buf );
  42.          }
  43. @@ -206,7 +207,8 @@
  44.      sync        = &pv->sync_audio[i];
  45.      sync->audio = hb_list_item( title->list_audio, i );
  46.  
  47. -    if( job->acodec & HB_ACODEC_AC3 )
  48. +    if( job->acodec & HB_ACODEC_AC3 ||
  49. +        job->audio_mixdowns[i] == HB_AMIXDOWN_AC3 )
  50.      {
  51.          /* Have a silent AC-3 frame ready in case we have to fill a
  52.             gap */
  53. @@ -637,7 +639,8 @@
  54.      sync   = &pv->sync_audio[i];
  55.      audio  = sync->audio;
  56.  
  57. -    if( job->acodec & HB_ACODEC_AC3 )
  58. +    if( job->acodec & HB_ACODEC_AC3 ||
  59. +        job->audio_mixdowns[i] == HB_AMIXDOWN_AC3 )
  60.      {
  61.          fifo = audio->fifo_out;
  62.          rate = audio->rate;
  63. @@ -799,7 +802,8 @@
  64.              }
  65.          }
  66.  
  67. -        if( job->acodec & HB_ACODEC_AC3 )
  68. +        if( job->acodec & HB_ACODEC_AC3 ||
  69. +            job->audio_mixdowns[i] == HB_AMIXDOWN_AC3 )
  70.          {
  71.              buf        = hb_fifo_get( audio->fifo_raw );
  72.              buf->start = start;
  73. @@ -915,7 +919,8 @@
  74.      job    = pv->job;
  75.      sync   = &pv->sync_audio[i];
  76.  
  77. -    if( job->acodec & HB_ACODEC_AC3 )
  78. +    if( job->acodec & HB_ACODEC_AC3 ||
  79. +        job->audio_mixdowns[i] == HB_AMIXDOWN_AC3 )
  80.      {
  81.          buf        = hb_buffer_init( sync->ac3_size );
  82.          buf->start = sync->count_frames * 90000 / sync->audio->rate;
  83. Index: libhb/work.c
  84. ===================================================================
  85. --- libhb/work.c        (revision 1265)
  86. +++ libhb/work.c        (working copy)
  87. @@ -351,7 +351,8 @@
  88.      if ( job->dynamic_range_compression )
  89.          hb_log(" + dynamic range compression: %f", job->dynamic_range_compression);
  90.  
  91. -    /* if we are doing AC3 passthru, then remove any non-AC3 audios from the job */
  92. +    /* if we are doing AC3 passthru (at the codec level, not pass-through),
  93. +     * then remove any non-AC3 audios from the job */
  94.      /* otherwise, Bad Things will happen */
  95.      for( i = 0; i < hb_list_count( title->list_audio ); )
  96.      {
  97. @@ -389,6 +390,8 @@
  98.          int audioCodecsSupport6Ch =  ((audio->codec == HB_ACODEC_AC3 ||
  99.              audio->codec == HB_ACODEC_DCA) && (job->acodec == HB_ACODEC_FAAC || job->acodec == HB_ACODEC_VORBIS));
  100.  
  101. +        if( job->audio_mixdowns[i] != HB_AMIXDOWN_AC3 )
  102. +        {
  103.          /* find out what the format of our source audio is */
  104.          switch (audio->input_channel_layout & HB_INPUT_CH_LAYOUT_DISCRETE_NO_LFE_MASK) {
  105.          
  106. @@ -481,6 +484,7 @@
  107.                  }
  108.  
  109.          }
  110. +        }
  111.  
  112.                /* log the output mixdown */
  113.                for (j = 0; j < hb_audio_mixdowns_count; j++) {
  114. @@ -496,12 +500,16 @@
  115.  
  116.          audio->config.vorbis.language = audio->lang_simple;
  117.  
  118. -              /* set up the audio work structures */
  119. +        /* set up the audio work structures */
  120.          audio->fifo_in   = hb_fifo_init( 2048 );
  121.          audio->fifo_raw  = hb_fifo_init( FIFO_CPU_MULT * cpu_count );
  122.          audio->fifo_sync = hb_fifo_init( FIFO_CPU_MULT * cpu_count );
  123.          audio->fifo_out  = hb_fifo_init( FIFO_CPU_MULT * cpu_count );
  124.  
  125. +
  126. +        /*
  127. +         * Audio Decoder Thread
  128. +         */
  129.          switch( audio->codec )
  130.          {
  131.              case HB_ACODEC_AC3:
  132. @@ -529,8 +537,13 @@
  133.          
  134.          hb_list_add( job->list_work, audio_w );
  135.  
  136. -        switch( job->acodec )
  137. +        /*
  138. +         * Audio Encoder Thread
  139. +         */
  140. +        if( job->audio_mixdowns[i] != HB_AMIXDOWN_AC3 )
  141.          {
  142. +            switch( job->acodec )
  143. +            {
  144.              case HB_ACODEC_FAAC:
  145.                  w = getWork( WORK_ENCFAAC );
  146.                  break;
  147. @@ -540,10 +553,15 @@
  148.              case HB_ACODEC_VORBIS:
  149.                  w = getWork( WORK_ENCVORBIS );
  150.                  break;
  151. +            }
  152.          }
  153.  
  154. -        if( job->acodec != HB_ACODEC_AC3 )
  155. +        if( job->acodec != HB_ACODEC_AC3 &&
  156. +            job->audio_mixdowns[i] != HB_AMIXDOWN_AC3)
  157.          {
  158. +            /*
  159. +             * Add the encoder thread if not doing AC-3 pass through
  160. +             */
  161.              w->fifo_in       = audio->fifo_sync;
  162.              w->fifo_out      = audio->fifo_out;
  163.              w->config        = &audio->config;
  164. Index: libhb/common.c
  165. ===================================================================
  166. --- libhb/common.c      (revision 1265)
  167. +++ libhb/common.c      (working copy)
  168. @@ -43,7 +43,9 @@
  169.    { "Stereo",             "HB_AMIXDOWN_STEREO",    "stereo", HB_AMIXDOWN_STEREO    },
  170.    { "Dolby Surround",     "HB_AMIXDOWN_DOLBY",     "dpl1",   HB_AMIXDOWN_DOLBY     },
  171.    { "Dolby Pro Logic II", "HB_AMIXDOWN_DOLBYPLII", "dpl2",   HB_AMIXDOWN_DOLBYPLII },
  172. { "6-channel discrete", "HB_AMIXDOWN_6CH",       "6ch",    HB_AMIXDOWN_6CH       } };
  173. { "6-channel discrete", "HB_AMIXDOWN_6CH",       "6ch",    HB_AMIXDOWN_6CH       },
  174. { "AC-3 Pass-through",  "HB_AMIXDOWN_AC3",       "ac-3",   HB_AMIXDOWN_AC3       },
  175. +};
  176.  int hb_audio_mixdowns_count = sizeof( hb_audio_mixdowns ) /
  177.                                sizeof( hb_mixdown_t );
  178.  
  179. @@ -224,13 +226,22 @@
  180.      {
  181.          /* Audio data */
  182.          int abitrate;
  183. -        if( job->acodec & HB_ACODEC_AC3 )
  184. +        if( job->acodec & HB_ACODEC_AC3 ||
  185. +            job->audio_mixdowns[i] == HB_AMIXDOWN_AC3)
  186.          {
  187. +            /*
  188. +             * For AC-3 we take the bitrate from the input audio
  189. +             * bitrate as we are simply passing it through.
  190. +             */
  191.              audio = hb_list_item( title->list_audio, job->audios[i] );
  192.              abitrate = audio->bitrate / 8;
  193.          }
  194.          else
  195.          {
  196. +            /*
  197. +             * Where we are transcoding the audio we use the destination
  198. +             * bitrate.
  199. +             */
  200.              abitrate = job->abitrate * 1000 / 8;
  201.          }
  202.          avail -= length * abitrate;
  203. Index: libhb/common.h
  204. ===================================================================
  205. --- libhb/common.h      (revision 1265)
  206. +++ libhb/common.h      (working copy)
  207. @@ -211,6 +211,8 @@
  208.  // A52_FORMAT of A52_3F2R | A52_LFE        = 23   = 0x17
  209.  // discrete channel count of 6
  210.  
  211. +#define HB_AMIXDOWN_AC3                         0x20000000
  212. +
  213.  /* define some macros to extract the various information from the HB_AMIXDOWN_XXXX values */
  214.  #define HB_AMIXDOWN_GET_DCA_FORMAT( a ) ( ( a & HB_AMIXDOWN_DCA_FORMAT_MASK ) >> 12 )
  215.  #define HB_AMIXDOWN_GET_A52_FORMAT( a ) ( ( a & HB_AMIXDOWN_A52_FORMAT_MASK ) >> 4 )
  216. Index: macosx/Controller.mm
  217. ===================================================================
  218. --- macosx/Controller.mm        (revision 1266)
  219. +++ macosx/Controller.mm        (working copy)
  220. @@ -2922,6 +2922,16 @@
  221.                      maxMixdownUsed = MAX(maxMixdownUsed, hb_audio_mixdowns[4].amixdown);
  222.                  }
  223.  
  224. +                /* do we want to add an AC-3 passthrough option? */
  225. +                if (audio->codec == HB_ACODEC_AC3) {
  226. +                    NSMenuItem *menuItem = [[mixdownPopUp menu] addItemWithTitle:
  227. +                        [NSString stringWithCString: hb_audio_mixdowns[5].human_readable_name]
  228. +                        action: NULL keyEquivalent: @""];
  229. +                    [menuItem setTag: hb_audio_mixdowns[5].amixdown];
  230. +                    if (minMixdownUsed == 0) minMixdownUsed = hb_audio_mixdowns[5].amixdown;
  231. +                    maxMixdownUsed = MAX(maxMixdownUsed, hb_audio_mixdowns[5].amixdown);
  232. +                }
  233. +
  234.                  /* auto-select the best mixdown based on our saved mixdown preference */
  235.                  
  236.                  /* for now, this is hard-coded to a "best" mixdown of HB_AMIXDOWN_DOLBYPLII */
  237. @@ -2975,7 +2985,10 @@
  238.      {
  239.          case HB_ACODEC_FAAC:
  240.              /* check if we have a 6ch discrete conversion in either audio track */
  241. -            if ([[fAudTrack1MixPopUp selectedItem] tag] == HB_AMIXDOWN_6CH || [[fAudTrack2MixPopUp selectedItem] tag] == HB_AMIXDOWN_6CH)
  242. +            if ([[fAudTrack1MixPopUp selectedItem] tag] == HB_AMIXDOWN_6CH ||
  243. +                [[fAudTrack2MixPopUp selectedItem] tag] == HB_AMIXDOWN_6CH ||
  244. +                [[fAudTrack1MixPopUp selectedItem] tag] == HB_AMIXDOWN_AC3 ||
  245. +                [[fAudTrack2MixPopUp selectedItem] tag] == HB_AMIXDOWN_AC3)
  246.              {
  247.                  /* FAAC is happy using our min bitrate of 32 kbps, even for 6ch */
  248.                  minbitrate = 32;
  249. @@ -3041,7 +3054,10 @@
  250.      }
  251.  
  252.      /* select the default bitrate (but use 384 for 6-ch AAC) */
  253. -    if ([[fAudTrack1MixPopUp selectedItem] tag] == HB_AMIXDOWN_6CH || [[fAudTrack2MixPopUp selectedItem] tag] == HB_AMIXDOWN_6CH)
  254. +    if ([[fAudTrack1MixPopUp selectedItem] tag] == HB_AMIXDOWN_6CH ||
  255. +        [[fAudTrack2MixPopUp selectedItem] tag] == HB_AMIXDOWN_6CH ||
  256. +        [[fAudTrack1MixPopUp selectedItem] tag] == HB_AMIXDOWN_AC3 ||
  257. +        [[fAudTrack2MixPopUp selectedItem] tag] == HB_AMIXDOWN_AC3)
  258.      {
  259.          [fAudBitratePopUp selectItemWithTag: 384];
  260.      }

advertising

Update the Post

Either update this post and resubmit it with changes, or make a new post.

You may also comment on this post.

update paste below
details of the post (optional)

Note: Only the paste content is required, though the following information can be useful to others.

Save name / title?

(space separated, optional)



Please note that information posted here will expire by default in one month. If you do not want it to expire, please set the expiry time above. If it is set to expire, web search engines will not be allowed to index it prior to it expiring. Items that are not marked to expire will be indexable by search engines. Be careful with your passwords. All illegal activities will be reported and any information will be handed over to the authorities, so be good.

worth-right
fantasy-obligation