[Ffmpeg-devel] fix ac3 parser with realaudio

Justin Ruggles justinruggles
Fri Feb 9 03:03:23 CET 2007


Michael Niedermayer wrote:
> Hi
> 
> On Thu, Feb 08, 2007 at 08:40:37PM -0500, Justin Ruggles wrote:
> 
>>Justin Ruggles wrote:
>>
>>>Justin Ruggles wrote:
>>>
>>>
>>>>Michael Niedermayer wrote:
>>>>
>>>>
>>>>
>>>>>Hi
>>>>>
>>>>>On Thu, Feb 08, 2007 at 06:50:22PM -0500, Justin Ruggles wrote:
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>>Hi,
>>>>>>
>>>>>>It seems that when the AC-3 parser was modified to add E-AC-3 support,
>>>>>>it stopped working with RealAudio/DolbyNet.  Below is a patch to fix it.
>>>>>
>>>>>[...]
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>>@@ -667,7 +667,7 @@
>>>>>>      return 0;
>>>>>>
>>>>>>  bsid = show_bits_long(&bits, 29) & 0x1f;
>>>>>>-    if(bsid <= 8) {             /* Normal AC-3 */
>>>>>>+    if(bsid <= 10) {             /* Normal AC-3 */
>>>>>>      skip_bits(&bits, 16);       /* crc */
>>>>>>      fscod = get_bits(&bits, 2);
>>>>>>      frmsizecod = get_bits(&bits, 6);
>>>>>>@@ -686,13 +686,14 @@
>>>>>>          skip_bits(&bits, 2);    /* dsurmod */
>>>>>>      lfeon = get_bits1(&bits);
>>>>>>
>>>>>>-        *sample_rate = ac3_sample_rates[fscod];
>>>>>>-        *bit_rate = ac3_bitrates[frmsizecod] * 1000;
>>>>>>+        halfratecod = bsid - 8;
>>>>>>+        *sample_rate = ac3_sample_rates[fscod] >> halfratecod;
>>>>>>+        *bit_rate = (ac3_bitrates[frmsizecod] * 1000) >> halfratecod;
>>>>>
>>>>>
>>>>>this doesnt look correct, what is with bsid<8 ?
>>>
>>>
>>>but I forgot about what halfratecod would be...
>>>
>>>should be:
>>>
>>>halfratecod = FFMAX(0, bsid - 8);
>>>
>>>-Justin
>>
>>geez, maybe I should stop coding for the day. :)  Since bsid is
>>unsigned, the above wouldn't work.  Here is a new patch...
> 
> 
> looks ok now, except a minor nitpick
> 
> [...]
> 
>>+        halfratecod = 0;
>>+        if(bsid > 8) {
>>+            halfratecod = bsid - 8;
>>+        }
> 
> 
> halfratecod= FFMAX(bsid, 8) - 8;
> 

applied, with your nitpick.





More information about the ffmpeg-devel mailing list