[FFmpeg-devel,v4,1/3] speedhq: fix behavior of single-field decoding

Submitted by Steinar H. Gunderson on Aug. 2, 2017, 4:08 p.m.

Details

Message ID E1dcwDk-0009o0-BO@pannekake.samfundet.no
State Superseded
Headers show

Commit Message

Steinar H. Gunderson Aug. 2, 2017, 4:08 p.m.
The height convention for decoding frames with only a single field made sense
for compatibility with legacy decoders, but doesn't really match the convention
used by NDI, which is the primary (only?) user. Thus, change it to simply
assuming that if the two fields overlap, the frame is meant to be a single
field and the frame height matches the field height.

Also add simple FATE tests, based on output produced by the NDI SDK.
---
 libavcodec/speedhq.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

Comments

Michael Niedermayer Aug. 3, 2017, 1:22 a.m.
On Wed, Aug 02, 2017 at 06:08:28PM +0200, Steinar H. Gunderson wrote:
> The height convention for decoding frames with only a single field made sense
> for compatibility with legacy decoders, but doesn't really match the convention
> used by NDI, which is the primary (only?) user. Thus, change it to simply
> assuming that if the two fields overlap, the frame is meant to be a single
> field and the frame height matches the field height.
> 

> Also add simple FATE tests, based on output produced by the NDI SDK.

this line belongs to the ther patch


> ---
>  libavcodec/speedhq.c | 15 +++++++++------
>  1 file changed, 9 insertions(+), 6 deletions(-)
> 
> diff --git a/libavcodec/speedhq.c b/libavcodec/speedhq.c
> index 60efb0222b..eca45beb67 100644
> --- a/libavcodec/speedhq.c
> +++ b/libavcodec/speedhq.c
> @@ -448,12 +448,15 @@ static int speedhq_decode_frame(AVCodecContext *avctx,
>      frame->key_frame = 1;
>  
>      if (second_field_offset == 4) {
> -        /*
> -         * Overlapping first and second fields is used to signal
> -         * encoding only a single field (the second field then comes
> -         * as a separate, later frame).
> -         */
> -        frame->height >>= 1;
> +	/*

tabs are not allowed in ffmpeg git (except makefiles)

[...]

Patch hide | download patch | download mbox

diff --git a/libavcodec/speedhq.c b/libavcodec/speedhq.c
index 60efb0222b..eca45beb67 100644
--- a/libavcodec/speedhq.c
+++ b/libavcodec/speedhq.c
@@ -448,12 +448,15 @@  static int speedhq_decode_frame(AVCodecContext *avctx,
     frame->key_frame = 1;
 
     if (second_field_offset == 4) {
-        /*
-         * Overlapping first and second fields is used to signal
-         * encoding only a single field (the second field then comes
-         * as a separate, later frame).
-         */
-        frame->height >>= 1;
+	/*
+	 * Overlapping first and second fields is used to signal
+	 * encoding only a single field. In this case, "height"
+	 * is ambiguous; it could mean either the height of the
+	 * frame as a whole, or of the field. The former would make
+	 * more sense for compatibility with legacy decoders,
+	 * but this matches the convention used in NDI, which is
+	 * the primary user of this trick.
+	 */
         if ((ret = decode_speedhq_field(s, buf, buf_size, frame, 0, 4, buf_size, 1)) < 0)
             return ret;
     } else {