Message ID | E1dcwDk-0009o0-BO@pannekake.samfundet.no |
---|---|
State | Superseded |
Headers | show |
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) [...]
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 {