Hi Marton,

> As far as I remember ffmpeg.c has code for this around line 1220:
> 
>  if (in_picture->interlaced_frame) {
>     if (enc->codec->id == AV_CODEC_ID_MJPEG)
>        mux_par->field_order = in_picture->top_field_first ? 
> AV_FIELD_TT:AV_FIELD_BB;
>     else
>        mux_par->field_order = in_picture->top_field_first ? 
> AV_FIELD_TB:AV_FIELD_BT;
>  } else
>     mux_par->field_order = AV_FIELD_PROGRESSIVE;
> 
> Isn't this supposed to set the muxer field order prior to calling 
> write_header? Why doesn't this work for decklink?

I saw this code and thought that as well, until I added a printf() inside the 
decklink module and realized that the code path never got hit until after 
write_header() was already called.

> 
>> Hence I would need to defer setting the output format and enabling the 
>> output until we have received the first frame of real video (relying on the 
>> AVFrame’s interlaced property), moving the functionality from the 
>> write_header() callback to write_packet().  Alternatively I could let 
>> write_header() enable the output, and then be prepared to reconfigure the 
>> output if I receive a frame where the interlaced property differs.
>> 
>> Thoughts?
> 
> As I said, ffmpeg.c should handle this properly. Delayed initialization of 
> the video device might be an option, but generally I'd avoid it unless we 
> have a very good reason for it.

Agreed.  I don’t want to do it unless it’s necessary, and then it becomes a 
question of whether we don’t enable it at all until we get the first packet, or 
we go through the.existing sequence where it gets enabled at the call to 
write_header() and then we reconfigure the output if something changes after 
that.

Devin
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to