Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH] avcodec/mjpegdec: Continue if a block fails to decode correctly
@ 2022-07-27 22:18 Mohammad AlSaleh
  2022-07-28 14:49 ` Michael Niedermayer
  0 siblings, 1 reply; 2+ messages in thread
From: Mohammad AlSaleh @ 2022-07-27 22:18 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Mohammad AlSaleh

 Don't give up on the whole frame just because a block failed to
 decode correctly.

 Try to continue decoding if the AV_EF_EXPLODE flag is not set.

Signed-off-by: Mohammad AlSaleh <CE.Mohammad.AlSaleh@gmail.com>
---
 libavcodec/mjpegdec.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c
index 816eb1ce5d..edefc35cb3 100644
--- a/libavcodec/mjpegdec.c
+++ b/libavcodec/mjpegdec.c
@@ -1504,7 +1504,8 @@ static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int Ah,
                                              s->quant_matrixes[s->quant_sindex[i]]) < 0) {
                                 av_log(s->avctx, AV_LOG_ERROR,
                                        "error y=%d x=%d\n", mb_y, mb_x);
-                                return AVERROR_INVALIDDATA;
+                                if (s->avctx->err_recognition & AV_EF_EXPLODE)
+                                    return AVERROR_INVALIDDATA;
                             }
                             if (ptr) {
                                 s->idsp.idct_put(ptr, linesize[c], s->block);
-- 
2.37.1

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

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [FFmpeg-devel] [PATCH] avcodec/mjpegdec: Continue if a block fails to decode correctly
  2022-07-27 22:18 [FFmpeg-devel] [PATCH] avcodec/mjpegdec: Continue if a block fails to decode correctly Mohammad AlSaleh
@ 2022-07-28 14:49 ` Michael Niedermayer
  0 siblings, 0 replies; 2+ messages in thread
From: Michael Niedermayer @ 2022-07-28 14:49 UTC (permalink / raw)
  To: FFmpeg development discussions and patches


[-- Attachment #1.1: Type: text/plain, Size: 2367 bytes --]

On Thu, Jul 28, 2022 at 01:18:07AM +0300, Mohammad AlSaleh wrote:
>  Don't give up on the whole frame just because a block failed to
>  decode correctly.
> 
>  Try to continue decoding if the AV_EF_EXPLODE flag is not set.
> 
> Signed-off-by: Mohammad AlSaleh <CE.Mohammad.AlSaleh@gmail.com>
> ---
>  libavcodec/mjpegdec.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c
> index 816eb1ce5d..edefc35cb3 100644
> --- a/libavcodec/mjpegdec.c
> +++ b/libavcodec/mjpegdec.c
> @@ -1504,7 +1504,8 @@ static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int Ah,
>                                               s->quant_matrixes[s->quant_sindex[i]]) < 0) {
>                                  av_log(s->avctx, AV_LOG_ERROR,
>                                         "error y=%d x=%d\n", mb_y, mb_x);
> -                                return AVERROR_INVALIDDATA;
> +                                if (s->avctx->err_recognition & AV_EF_EXPLODE)
> +                                    return AVERROR_INVALIDDATA;
>                              }
>                              if (ptr) {
>                                  s->idsp.idct_put(ptr, linesize[c], s->block);

decoding should stop at an error and resume at a reset marker or some other 
marker where resync is possible otherwise chances are there will be alot of random
trash.

If there are no reset markers, it may be possible to match the end of decoding
up to the frame end, this would be difficult but could allow a bit extra recovery
of image data.

also bit errors tend to be uncommon so if you encounter something looking like a
bit error, consider that may be a encoder or decoder bug. I dont know what your
case is but if it is a encoder bug or some odd quirk of some encoder it may be
possible to add some special case and decode that better than just handling it like
an error

If you really have a file that benefits still after all above from continued
blind decoding after an error then something like your patch can be considered
iam not against it.
Can you share the jpeg this helps ?

thx

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Opposition brings concord. Out of discord comes the fairest harmony.
-- Heraclitus

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

[-- Attachment #2: Type: text/plain, Size: 251 bytes --]

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

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-07-28 14:49 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-27 22:18 [FFmpeg-devel] [PATCH] avcodec/mjpegdec: Continue if a block fails to decode correctly Mohammad AlSaleh
2022-07-28 14:49 ` Michael Niedermayer

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git