[FFmpeg-devel] TrueHD track in EVO not playable/testable with ffplay

Ramiro Polla ramiro.polla
Fri Sep 11 18:02:24 CEST 2009


Hi,

On Thu, Jul 23, 2009 at 6:17 PM, Baptiste Coudurier
<baptiste.coudurier at gmail.com> wrote:
> On 07/23/2009 02:01 PM, Ramiro Polla wrote:
>>
>> On Mon, Jul 20, 2009 at 7:30 PM, Justin Ruggles<justin.ruggles at gmail.com>
>>  wrote:
>>>
>>> Baptiste Coudurier wrote:
>>>>
>>>> On 7/18/2009 3:15 PM, Ramiro Polla wrote:
>>>>>
>>>>> On Tue, Jul 14, 2009 at 5:26 PM, Michael Niedermayer<michaelni at gmx.at>
>>>>>  wrote:
>>>>>>
>>>>>> On Tue, Jul 14, 2009 at 02:59:13PM -0300, Ramiro Polla wrote:
>>>>>>>
>>>>>>> On Mon, Jul 13, 2009 at 6:02 PM, Justin
>>>>>>> Ruggles<justin.ruggles at gmail.com>  wrote:
>>>>>>>>
>>>>>>>> If you decide on using channels + request_channels +
>>>>>>>> output_channels,
>>>>>>>> here is what I think should happen.
>>>>>>>>
>>>>>>>> demuxer/parser : set channels to the number of source channels,
>>>>>>>> completely ignoring request_channels.
>>>>>>>>
>>>>>>>> decoder : during init(), set channels to the number of source
>>>>>>>> channels,
>>>>>>>> set output_channels to what it will output, trying if it can to
>>>>>>>> honor
>>>>>>>> request_channels.
>>>>>>>>
>>>>>>>> The user can see if output_channels matches request_channels after
>>>>>>>> decoder init.
>>>>>>>
>>>>>>> And what shall the user do if output_channels has no value after
>>>>>>> decoder init?
>>>>>>
>>>>>> he should call av_find_stream_info() either way and that should fill
>>>>>> it in,
>>>>>> in theory ...
>>>>>
>>>>> I have a few more ideas:
>>>>> - av_find_stream_info() tests for output_channels if request_channels
>>>>> is set. this would require request_channels to be set before even
>>>>> opening the codec;
>>>>> - av_find_stream_info() fills possible channel combinations in
>>>>> coded_channels[] and the user chooses from that to set
>>>>> request_channels. In this case it would set coded_channels[0] = 2;
>>>>> coded_channels[1] = 6; coded_channels[2] = 0; or something like that.
>>>>
>>>> I really don't think av_find_stream_info you touch output_channels at
>>>> all, this is a decoding problem not a stream info problem.
>>>
>>> +1
>>
>> Hmm... Now we have Michael who thinks av_find_stream_info() should get
>> information about request_channels, and Justin and Baptiste who think
>> otherwise.
>>
>> Justin and Baptiste, you haven't answered this question:
>>>>>>>
>>>>>>> And what shall the user do if output_channels has no value after
>>>>>>> decoder init?
>
> It must wait for it IMHO, like it must wait to get sample_fmt to be set,
> which might happen after decoding the first frame.
> I believe the same applies to output_channels.

FFplay will use av_find_stream_info() to find the number of channels,
then set request_channels, open the codec, and open SDL with
avctx->channels. MLP can't know if it's possible to downmix before
reading an access unit. And FFplay the way it is wouldn't wait for
channels to be set. I don't see how adding a new field would help for
this issue.

Ramiro Polla



More information about the ffmpeg-devel mailing list