On Thu, 28 Nov 2013 15:03:01 +0100, Vittorio Giovara 
<[email protected]> wrote:
> ---
>  libavcodec/mpeg12dec.c |   63 
> +++++++++++++++++++++++++++++++++++++++---------
>  1 file changed, 51 insertions(+), 12 deletions(-)
> 
> diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c
> index 9d0c3be..633bbcf 100644
> --- a/libavcodec/mpeg12dec.c
> +++ b/libavcodec/mpeg12dec.c
> @@ -27,6 +27,7 @@
>  
>  #include "libavutil/attributes.h"
>  #include "libavutil/internal.h"
> +#include "libavutil/stereo3d.h"
>  #include "internal.h"
>  #include "avcodec.h"
>  #include "dsputil.h"
> @@ -2108,18 +2109,56 @@ static void mpeg_decode_user_data(AVCodecContext 
> *avctx,
>      const uint8_t *buf_end = p + buf_size;
>  
>      /* we parse the DTG active format information */
> -    if (buf_end - p >= 5 &&
> -        p[0] == 'D' && p[1] == 'T' && p[2] == 'G' && p[3] == '1') {
> -        int flags = p[4];
> -        p += 5;
> -        if (flags & 0x80) {
> -            /* skip event id */
> -            p += 2;
> -        }
> -        if (flags & 0x40) {
> -            if (buf_end - p < 1)
> -                return;
> -            avctx->dtg_active_format = p[0] & 0x0f;
> +    if (buf_end - p >= 5) {
> +        if (p[0] == 'D' &&
> +            p[1] == 'T' &&
> +            p[2] == 'G' &&
> +            p[3] == '1') {
> +            int flags = p[4];
> +            p += 5;
> +            if (flags & 0x80) {
> +                /* skip event id */
> +                p += 2;
> +            }
> +            if (flags & 0x40) {
> +                if (buf_end - p < 1)
> +                    return;
> +                avctx->dtg_active_format = p[0] & 0x0f;
> +            }
> +        } else if (p[0] == 'J' &&
> +                   p[1] == 'P' &&
> +                   p[2] == '3' &&
> +                   p[3] == 'D') {
> +            if (p[4] == 0x03) { // S3D_video_format_length
> +                // the mask ignores reserved_bit
> +                const uint8_t S3D_video_format_type = p[5] & 0x7F;

You are accessing the 6th byte, but only checked for 5 above.

-- 
Anton Khirnov
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to