[Ffmpeg-devel] [PATCH] remove ac3 tables from parser.c

Justin Ruggles justinruggles
Sun Mar 11 03:14:18 CET 2007


Michael Niedermayer wrote:
> Hi
> 
> On Sat, Mar 10, 2007 at 09:26:37AM -0500, Justin Ruggles wrote:
> 
>>Michael Niedermayer wrote:
>>
>>>Hi
>>>
>>>On Fri, Mar 09, 2007 at 11:18:42PM -0500, Justin Ruggles wrote:
>>>[...]
>>>
>>>
>>>>>this looks wrong, it doesnt generate the same table
>>>>>the followig MIGHT be correct (didnt really check)
>>>>>
>>>>>for(i=0; i<38; i++) {
>>>>>   int br = ff_ac3_bitratetab[i >> 1];
>>>>>   ff_ac3_frame_sizes[i][0] = (  2*br      );
>>>>>   ff_ac3_frame_sizes[i][1] = (320*br / 147) + (i & 1);
>>>>>   ff_ac3_frame_sizes[i][2] = (  3*br      );
>>>>>}
>>>>>
>>>>>[...]
>>>>
>>>>You're right.  I did forget about the fact that the odd numbers only
>>>>differ for 44.1kHz, and that was all I tested with.
>>>>
>>>>ff_ac3_frame_sizes[i][j] = (br * 96 / ff_ac3_freqs[j]) + ((i & 1) &&
>>>>                                                         (j == 1));
>>>>
>>>>The above also does the trick, but I like your version better.  New
>>>>patch attached.
>>>
>>>
>>>theres another possible issue which ive missed ...
>>>ac3_common() is after your patch executed by the AVParser initalization
>>>which MUST be thread safe as new AVStreams can be added anytime 
>>>(in mpeg-ps/ts for example) and that also might cause a new AVParser to be
>>>inited, now the current code looks safe but ac3_common() should get a
>>>comment that it has to be thread safe because its called by the AVParser 
>>>init code
>>>otherwise someone smart might by misstake add code like:
>>>
>>>static int done=0
>>>if(!done){
>>>    done=1;
>>>    for(...)
>>>        foobartab[i]= abcd;
>>>}
>>>
>>>except that patch looks ok
>>
>>Okay.  Would this work?
> 
> 
> yes

Applied.




More information about the ffmpeg-devel mailing list