diff mbox

[FFmpeg-devel] avdevice/decklink_dec: set field order via codecpar

Message ID 20170724211005.10668-1-cus@passwd.hu
State Accepted
Commit e433497160bd8997f461851419b5c86e6095d21d
Headers show

Commit Message

Marton Balint July 24, 2017, 9:10 p.m. UTC
Signed-off-by: Marton Balint <cus@passwd.hu>
---
 libavdevice/decklink_dec.cpp | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

Comments

Marton Balint July 30, 2017, 12:29 p.m. UTC | #1
On Mon, 24 Jul 2017, Marton Balint wrote:

> Signed-off-by: Marton Balint <cus@passwd.hu>
> ---
> libavdevice/decklink_dec.cpp | 20 +++++++++++++-------
> 1 file changed, 13 insertions(+), 7 deletions(-)
>
> diff --git a/libavdevice/decklink_dec.cpp b/libavdevice/decklink_dec.cpp
> index 8b5c1a20c1..72449a8eca 100644
> --- a/libavdevice/decklink_dec.cpp
> +++ b/libavdevice/decklink_dec.cpp
> @@ -731,6 +731,19 @@ av_cold int ff_decklink_read_header(AVFormatContext *avctx)
>         st->codecpar->bit_rate    = av_rescale(ctx->bmd_width * ctx->bmd_height * 16, st->time_base.den, st->time_base.num);
>     }
> 
> +    switch (ctx->bmd_field_dominance) {
> +    case bmdUpperFieldFirst:
> +        st->codecpar->field_order = AV_FIELD_TT;
> +        break;
> +    case bmdLowerFieldFirst:
> +        st->codecpar->field_order = AV_FIELD_BB;
> +        break;
> +    case bmdProgressiveFrame:
> +    case bmdProgressiveSegmentedFrame:
> +        st->codecpar->field_order = AV_FIELD_PROGRESSIVE;
> +        break;
> +    }
> +
>     avpriv_set_pts_info(st, 64, 1, 1000000);  /* 64 bits pts in us */
>
>     ctx->video_st=st;
> @@ -788,15 +801,8 @@ int ff_decklink_read_packet(AVFormatContext *avctx, AVPacket *pkt)
> {
>     struct decklink_cctx *cctx = (struct decklink_cctx *)avctx->priv_data;
>     struct decklink_ctx *ctx = (struct decklink_ctx *)cctx->ctx;
> -    AVFrame *frame = ctx->video_st->codec->coded_frame;
>
>     avpacket_queue_get(&ctx->queue, pkt, 1);
> -    if (frame && (ctx->bmd_field_dominance == bmdUpperFieldFirst || ctx->bmd_field_dominance == bmdLowerFieldFirst)) {
> -        frame->interlaced_frame = 1;
> -        if (ctx->bmd_field_dominance == bmdUpperFieldFirst) {
> -            frame->top_field_first = 1;
> -        }
> -    }
>
>     return 0;
> }
> --

Pushed.

Regards,
Marton
diff mbox

Patch

diff --git a/libavdevice/decklink_dec.cpp b/libavdevice/decklink_dec.cpp
index 8b5c1a20c1..72449a8eca 100644
--- a/libavdevice/decklink_dec.cpp
+++ b/libavdevice/decklink_dec.cpp
@@ -731,6 +731,19 @@  av_cold int ff_decklink_read_header(AVFormatContext *avctx)
         st->codecpar->bit_rate    = av_rescale(ctx->bmd_width * ctx->bmd_height * 16, st->time_base.den, st->time_base.num);
     }
 
+    switch (ctx->bmd_field_dominance) {
+    case bmdUpperFieldFirst:
+        st->codecpar->field_order = AV_FIELD_TT;
+        break;
+    case bmdLowerFieldFirst:
+        st->codecpar->field_order = AV_FIELD_BB;
+        break;
+    case bmdProgressiveFrame:
+    case bmdProgressiveSegmentedFrame:
+        st->codecpar->field_order = AV_FIELD_PROGRESSIVE;
+        break;
+    }
+
     avpriv_set_pts_info(st, 64, 1, 1000000);  /* 64 bits pts in us */
 
     ctx->video_st=st;
@@ -788,15 +801,8 @@  int ff_decklink_read_packet(AVFormatContext *avctx, AVPacket *pkt)
 {
     struct decklink_cctx *cctx = (struct decklink_cctx *)avctx->priv_data;
     struct decklink_ctx *ctx = (struct decklink_ctx *)cctx->ctx;
-    AVFrame *frame = ctx->video_st->codec->coded_frame;
 
     avpacket_queue_get(&ctx->queue, pkt, 1);
-    if (frame && (ctx->bmd_field_dominance == bmdUpperFieldFirst || ctx->bmd_field_dominance == bmdLowerFieldFirst)) {
-        frame->interlaced_frame = 1;
-        if (ctx->bmd_field_dominance == bmdUpperFieldFirst) {
-            frame->top_field_first = 1;
-        }
-    }
 
     return 0;
 }