[FFmpeg-devel] [PATCH 2/4] avdevice/decklink_enc: add support to specify field order

Marton Balint cus at passwd.hu
Sat Feb 25 20:59:58 EET 2017


On Fri, 24 Feb 2017, Matthias Hunstock wrote:

> Am 24.02.2017 um 00:32 schrieb Marton Balint:
>> 
>> On Thu, 23 Feb 2017, Matthias Hunstock wrote:
>> 
>>> Am 23.02.2017 um 17:24 schrieb Marton Balint:
>>>>> The "@mode" syntax does not work for output devices. Let me add a
>>>>> patch,
>>>>> I will send it tonight.
>>>>
>>>> Please don't. The @mode syntax is insane. You need a different @mode for
>>>> different hardware to get the same output format. @mode may even be
>>>> different across driver versions.
>>>
>>> I know... the numbers are really a mess.
>>>
>>> What about supporting the mode strings? They are constant:
>>>
>>> bmdModeHD1080i50 = /* 'Hi50' */ 0x48693530
>>>
>>> At least for capture this is IMO a benefit:
>>>
>>> ffmpeg -f decklink -i 'DeckLink Duo at Hi50'
>>>
>>> For playout... well if the automatic detection works and interlaced flag
>>> is always correct, fps is always correct (30 vs 29.97)... to be honest:
>>> if I'd do a setup, I'd sleep better with an explicit mode. But yeah, not
>>> those numbers.
>> 
>> Specifying the mode based on the decklink fourcc makes more sense.
>> 
>> On the other hand, for output, you'd still have to check if the stream
>> parameters are correct and if they are corresponding to the wanted mode.
>> So if the user specify the mode with a decklink mode fourcc, you could
>> only do a check like this (with &&):
>>
>>         if ((bmd_width == width &&
>>              bmd_height == height &&
>>              !av_cmp_q(mode_tb, target_tb) &&
>>              field_order_eq(field_order, bmd_field_dominance) &&
>>              mode == bmd_mode) || i == num) {
>
>
> This disallows "hacks" like doing interlaced playout of progressive
> content or playout 30 fps with 29.97fps.
>
> Maybe it should just check widht and height for a given mode? Like:
>
>         if ((bmd_width == width &&
>              bmd_height == height &&
>              mode == bmd_mode)
>              ||
>              (!mode &&
>              !av_cmp_q(mode_tb, target_tb) &&
>              bmd_width == width &&
>              bmd_height == height &&
>              field_order_eq(field_order, bmd_field_dominance))
>              ||
>              i == num /* deprecated */) {
>
>
> (ORs seperated for readability)
>
> Or would you suggest that a user forces such situation e.g. with -vf
> setfields or -r ?

Yeah, I think that is somewhat cleaner.

>
>
>> For input, using a decklink fourcc to specify a mode would be definitely
>> useful.
>> 
>> However, I don't like the @anything part in the device name. If you add
>> this feature, I'd very much prefer a separate option of the device,
>> 'format' maybe. I'd even deprecate @mode in the device name later.
>
> ACK
>
> For the time being, I'd like to see your patches pushed since they
> improve the situation and the patchset does lots of other things.
>

Ok, will push in 1-2 days.

Regards,
Marton


More information about the ffmpeg-devel mailing list