diff --git a/libavcodec/jpeg2000dec.c b/libavcodec/jpeg2000dec.c index 84eebfd1b2..df13bea815 100644 --- a/libavcodec/jpeg2000dec.c +++ b/libavcodec/jpeg2000dec.c @@ -2891,6 +2891,10 @@ static int jpeg2000_decode_frame(AVCodecContext *avctx, AVFrame *picture, } } + for (int x = 0; x < s->ncomponents && s->codsty[x].transform == FF_DWT53;) + if (++x == s->ncomponents) + picture->flags |= AV_FRAME_FLAG_LOSSLESS; + avctx->execute2(avctx, jpeg2000_decode_tile, picture, NULL, s->numXtiles * s->numYtiles); jpeg2000_dec_cleanup(s); diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c index ef4fc075b2..fefa5e7877 100644 --- a/libavcodec/mjpegdec.c +++ b/libavcodec/mjpegdec.c @@ -2561,6 +2561,8 @@ eoi_parser: } if ((ret = av_frame_ref(frame, s->picture_ptr)) < 0) return ret; + if (s->lossless) + frame->flags |= AV_FRAME_FLAG_LOSSLESS; *got_frame = 1; s->got_picture = 0; diff --git a/libavcodec/vp9.c b/libavcodec/vp9.c index c867626b3f..dd0efdc8d1 100644 --- a/libavcodec/vp9.c +++ b/libavcodec/vp9.c @@ -1592,6 +1592,10 @@ static int vp9_decode_frame(AVCodecContext *avctx, AVFrame *frame, f->flags |= AV_FRAME_FLAG_KEY; else f->flags &= ~AV_FRAME_FLAG_KEY; + if (s->s.h.lossless) + f->flags |= AV_FRAME_FLAG_LOSSLESS; + else + f->flags &= ~AV_FRAME_FLAG_LOSSLESS; f->pict_type = (s->s.h.keyframe || s->s.h.intraonly) ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P; // Non-existent frames have the implicit dimension 0x0 != CUR_FRAME diff --git a/libavcodec/webp.c b/libavcodec/webp.c index b624458d67..a965e50ac4 100644 --- a/libavcodec/webp.c +++ b/libavcodec/webp.c @@ -1191,6 +1191,7 @@ static int vp8_lossless_decode_frame(AVCodecContext *avctx, AVFrame *p, *got_frame = 1; p->pict_type = AV_PICTURE_TYPE_I; p->flags |= AV_FRAME_FLAG_KEY; + p->flags |= AV_FRAME_FLAG_LOSSLESS; ret = data_size; free_and_return: