[FFmpeg-devel] [PATCH] HE-AAC v1 decoder try 4

Michael Niedermayer michaelni
Sun Feb 21 21:53:19 CET 2010


On Sun, Feb 21, 2010 at 09:36:10PM +0100, Vladimir Pantelic wrote:
> Michael Niedermayer wrote:
>> On Wed, Feb 17, 2010 at 07:06:44PM +0100, Vladimir Pantelic wrote:
>>> Vladimir Pantelic wrote:
>>>> Alexander Strange wrote:
>>>>>   On Feb 16, 2010, at 6:19 PM, Alex Converse wrote:
>>>>>
>>>>>>    On Tue, Feb 16, 2010 at 6:01 PM, Alex
>>>>>> Converse<alex.converse at gmail.com>wrote:
>>>>>>
>>>>>>>    Notes:
>>>>>>>    *All the computation time is spent in ff_sbr_apply() and it's
>>>>>>>    children. If it isn't called from ff_sbr_apply() making it 100%
>>>>>>> faster
>>>>>>>    isn't going to buy us anything.
>>>>>>>    *Right now the synthesis filterbank is written on top on an MDCT.
>>>>>>> With
>>>>>>>    appropriate SIMD functions it may make sense to move it to an FFT.
>>>>>>>    Right now the MDCT version is much faster.
>>>>>>>    *SIMD placeholder patch not included
>>>>>>>
>>>>>>    Wrong patch.
>>>>>>    try 4.1 :)
>>>>>>    <sbr.diff>
>>>>>   I tried it with ffplay and it plays 2x too slow. If ffplay needs to 
>>>>> be
>>>>> fixed, I wonder if other players will too? Well, it's unavoidable 
>>>>> anyway.
>>>>>   ffmpeg to wav sounds fine.
>>>> guess its the issue that the container signals the smaller (non-sbr)
>>>> sample rate, e.g. 24khz and the decoder applies SBR
>>>> and returns 48kHz. I had to fix my player to switch to the decoder
>>>> returned sample rate too...
>>> ok, it is more the fact that avctx->sample_rate is 0
>>> after we perform avcodec_open(), so SDL defaults to
>>> 22050.
>>
>> i guess unconditionally setting it to 0 in avcodec_open() is not ideal
>>
>>
>>> it is correct before the avcodec_open() call, but that
>>> might not always be the case I guess.
>>>
>>> totally lame patch attached to detects any change in
>>> sample_rate by the decoder and re-open SDL audio...
>>>
>>> (my first patch (yay), more for RFC than an attempt to
>>> get instant fame...)
>>
>>>   ffplay.c |   33 ++++++++++++++++++++++++++++++++-
>>>   1 file changed, 32 insertions(+), 1 deletion(-)
>>> 8951327565cd5e449a94c431caa46767cfc84ae2  ffplay_he_aac_sample_rate.diff
>>> Index: ffplay.c
>>> ===================================================================
>>> --- ffplay.c	(revision 21861)
>>> +++ ffplay.c	(working copy)
>>> @@ -146,6 +146,8 @@
>>>       AVPacket audio_pkt_temp;
>>>       AVPacket audio_pkt;
>>>       enum SampleFormat audio_src_fmt;
>>> +    int audio_sample_rate;
>>> +    int audio_sample_rate_changed;
>>>       AVAudioConvert *reformat_ctx;
>>>
>>>       int show_audio; /* if true, display audio samples */
>>> @@ -1670,7 +1672,10 @@
>>>               pkt_temp->size -= len1;
>>>               if (data_size<= 0)
>>>                   continue;
>>> -
>>> +            if (dec->sample_rate != is->audio_sample_rate) {
>>> +                is->audio_sample_rate = dec->sample_rate;
>>> +                is->audio_sample_rate_changed = 1;
>>> +            }
>>>               if (dec->sample_fmt != is->audio_src_fmt) {
>>>                   if (is->reformat_ctx)
>>>                       av_audio_convert_free(is->reformat_ctx);
>>> @@ -1848,6 +1853,8 @@
>>>           }
>>>           is->audio_hw_buf_size = spec.size;
>>>           is->audio_src_fmt= SAMPLE_FMT_S16;
>>> +        is->audio_sample_rate = spec.freq;
>>> +        is->audio_sample_rate_changed = 0;
>>>       }
>>>
>>>       ic->streams[stream_index]->discard = AVDISCARD_DEFAULT;
>>> @@ -2136,6 +2143,30 @@
>>>               eof= 0;
>>>           }
>>>
>>> +        if( is->audio_sample_rate_changed ) {
>>> +            SDL_AudioSpec wanted_spec, spec;
>>> +fprintf(stderr, "sample rate changed to: %d\n", is->audio_sample_rate);
>>> +            is->audio_sample_rate_changed = 0;
>>> +
>>> +            SDL_CloseAudio();
>>> +	
>>
>> indention is off, trailing whitespace and you maybe could use
>>   stream_component_open()
>
> that I tried 1st, but stream_component_open() drops the whole audio packet
> queue, so the sound is totally off afterwards. But of course I could factor
> out the SDL audio related pieces and use them here and in
> stream_component_open()..

anything is better than duplicating code (with its bugs)

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

If you think the mosad wants you dead since a long time then you are either
wrong or dead since a long time.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20100221/129fdd0d/attachment.pgp>



More information about the ffmpeg-devel mailing list