[FFmpeg-devel] [PATCH] Fix distortion problem in MPEG1/2 video

Michael Niedermayer michaelni at gmx.at
Wed May 15 23:52:03 CEST 2013


On Fri, May 10, 2013 at 03:13:51PM +0900, Heesuk Jung wrote:
> In some MPEG1/2 AVI files, there are video distortion problem in bottom of screen.
> (I just test files using ffplay)
> 
> 1. MPEG1 video problematic file link
>  - https://docs.google.com/open?id=0B6r7ZfWFIypCMkltZHJDY0pQN1U
> 2. MPEG2 video problematic file link
>  - https://docs.google.com/open?id=0B6r7ZfWFIypCM0ZremxpbXc1N3c
> 
> Root cause of this problem is wrong frame size based on header information.
> Suggests to use full parsing option after checking frame size within some frames in order
> to prevent performance loss.
> 
> Please refer the concern of performance loss at my previous patch.
> (http://ffmpeg.org/pipermail/ffmpeg-devel/2012-November/134186.html)
> ---
>  libavcodec/mpegvideo_parser.c | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
> 
> diff --git a/libavcodec/mpegvideo_parser.c b/libavcodec/mpegvideo_parser.c
> index f127218..dddc11f 100644
> --- a/libavcodec/mpegvideo_parser.c
> +++ b/libavcodec/mpegvideo_parser.c
> @@ -24,6 +24,10 @@
>  #include "mpeg12.h"
>  #include "internal.h"
>  
> +#define MAX_RETRY_FULL_PARSING 7
> +
> +static uint8_t retry_num = 0;

breaks multiple decoders and multiple threads


> +
>  struct MpvParseContext {
>      ParseContext pc;
>      AVRational frame_rate;
> @@ -160,6 +164,16 @@ static int mpegvideo_parse(AVCodecParserContext *s,
>      ParseContext *pc= &pc1->pc;
>      int next;
>  
> +    if (retry_num < MAX_RETRY_FULL_PARSING &&
> +        s->flags & PARSER_FLAG_COMPLETE_FRAMES) {
> +        int measured_buf_size;
> +        measured_buf_size = ff_mpeg1_find_frame_end(pc, buf, buf_size, s);
> +
> +        if (measured_buf_size > 0 && measured_buf_size < buf_size)
> +            s->flags &= ~PARSER_FLAG_COMPLETE_FRAMES;

this code breaks decoding of
http://samples.ffmpeg.org/V-codecs/BW10/cartonfold.avi
also the code could trigger on damaged files that do not need full
parsing


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

The bravest are surely those who have the clearest vision
of what is before them, glory and danger alike, and yet
notwithstanding go out to meet it. -- Thucydides
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20130515/b5bc59dc/attachment.asc>


More information about the ffmpeg-devel mailing list