[FFmpeg-devel] [PATCH 2/2][RFC] avcodec/g729: add g729_parser

Michael Niedermayer michael at niedermayer.cc
Tue Aug 11 17:02:29 CEST 2015


On Mon, Aug 10, 2015 at 09:51:43PM -0400, Ganesh Ajjanagadde wrote:
> Add trivial g729 parser; fixes Ticket4753
> 
> Signed-off-by: Ganesh Ajjanagadde <gajjanagadde at gmail.com>
> ---
>  libavcodec/Makefile      |  1 +
>  libavcodec/allcodecs.c   |  1 +
>  libavcodec/g729.h        |  4 +++
>  libavcodec/g729_parser.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++++
>  4 files changed, 96 insertions(+)
>  create mode 100644 libavcodec/g729_parser.c
> 
> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
> index e61b9cd..31b8ceb 100644
> --- a/libavcodec/Makefile
> +++ b/libavcodec/Makefile
> @@ -847,6 +847,7 @@ OBJS-$(CONFIG_DVD_NAV_PARSER)          += dvd_nav_parser.o
>  OBJS-$(CONFIG_DVDSUB_PARSER)           += dvdsub_parser.o
>  OBJS-$(CONFIG_FLAC_PARSER)             += flac_parser.o flacdata.o flac.o \
>                                            vorbis_data.o
> +OBJS-$(CONFIG_G729_PARSER)             += g729_parser.o
>  OBJS-$(CONFIG_GSM_PARSER)              += gsm_parser.o
>  OBJS-$(CONFIG_H261_PARSER)             += h261_parser.o
>  OBJS-$(CONFIG_H263_PARSER)             += h263_parser.o
> diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
> index ed0975e..04a83d4 100644
> --- a/libavcodec/allcodecs.c
> +++ b/libavcodec/allcodecs.c
> @@ -602,6 +602,7 @@ void avcodec_register_all(void)
>      REGISTER_PARSER(DVDSUB,             dvdsub);
>      REGISTER_PARSER(DVD_NAV,            dvd_nav);
>      REGISTER_PARSER(FLAC,               flac);
> +    REGISTER_PARSER(G729,               g729);
>      REGISTER_PARSER(GSM,                gsm);
>      REGISTER_PARSER(H261,               h261);
>      REGISTER_PARSER(H263,               h263);
> diff --git a/libavcodec/g729.h b/libavcodec/g729.h
> index 6168313..7c5f693 100644
> --- a/libavcodec/g729.h
> +++ b/libavcodec/g729.h
> @@ -26,4 +26,8 @@
>   */
>  #define SUBFRAME_SIZE 40
>  
> +/* bytes per block */
> +#define G729_8K_BLOCK_SIZE     10
> +#define G729D_6K4_BLOCK_SIZE   8
> +
>  #endif // AVCODEC_G729_H
> diff --git a/libavcodec/g729_parser.c b/libavcodec/g729_parser.c
> new file mode 100644
> index 0000000..203c787
> --- /dev/null
> +++ b/libavcodec/g729_parser.c
> @@ -0,0 +1,90 @@
> +/*
> + * Copyright (c) 2015  Ganesh Ajjanagadde
> + *
> + * This file is part of FFmpeg.
> + *
> + * FFmpeg is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * FFmpeg is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with FFmpeg; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> + */
> +
> +/**
> + * @file
> + * G.729 audio parser
> + *
> + * Splits packets into individual blocks.
> + */
> +
> +#include "parser.h"
> +#include "g729.h"
> +#include "g729dec.h"
> +
> +typedef struct G729ParseContext {
> +    ParseContext pc;
> +    int block_size;
> +    int duration;
> +    int remaining;
> +} G729ParseContext;
> +
> +static int g729_parse(AVCodecParserContext *s1, AVCodecContext *avctx,
> +                     const uint8_t **poutbuf, int *poutbuf_size,
> +                     const uint8_t *buf, int buf_size)
> +{
> +    G729ParseContext *s = s1->priv_data;
> +    ParseContext *pc = &s->pc;

> +    G729Context *ctx = avctx->priv_data;

this is not safe.
theres no gurantee that there even is a decoder decoding the output
from the parser, there might be none, or 2 or it might be a binary
decoder using a different struct, an application can use anything
or nothing after a parser

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

The real ebay dictionary, page 2
"100% positive feedback" - "All either got their money back or didnt complain"
"Best seller ever, very honest" - "Seller refunded buyer after failed scam"
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20150811/13c9a1bb/attachment.sig>


More information about the ffmpeg-devel mailing list