diff mbox series

[FFmpeg-devel] avcodec/avcodec: Allow up to seven codec ids per parser

Message ID AM7PR03MB66603DA69F14C28770EC1B048FCD9@AM7PR03MB6660.eurprd03.prod.outlook.com
State Accepted
Headers show
Series [FFmpeg-devel] avcodec/avcodec: Allow up to seven codec ids per parser | expand

Checks

Context Check Description
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished
andriy/make_ppc success Make finished
andriy/make_fate_ppc success Make fate finished

Commit Message

Andreas Rheinhardt Sept. 1, 2021, 11:28 a.m. UTC
ff_pnm_parser and ff_vp3_parser already hit the current limit;
an addition to the former (to handle pfm) is planned.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
If this API were not intended to be deprecated soon, I would make
the codec_ids an array of enum AVCodecID and change av_parser_init()
accordingly. Furthermore, AVCodecParser needs a public-private
demarkation line. Finally, some AVCodecParserContext are marked as
private despite not being at the end of said context.

Missing version bump.

 doc/APIchanges       | 3 +++
 libavcodec/avcodec.h | 2 +-
 libavcodec/parser.c  | 8 ++++++--
 3 files changed, 10 insertions(+), 3 deletions(-)

Comments

Paul B Mahol Sept. 1, 2021, 4:20 p.m. UTC | #1
lgtm
Andreas Rheinhardt Sept. 1, 2021, 8:29 p.m. UTC | #2
Andreas Rheinhardt:
> ff_pnm_parser and ff_vp3_parser already hit the current limit;
> an addition to the former (to handle pfm) is planned.
> 
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
> ---
> If this API were not intended to be deprecated soon, I would make
> the codec_ids an array of enum AVCodecID and change av_parser_init()
> accordingly. Furthermore, AVCodecParser needs a public-private
> demarkation line. Finally, some AVCodecParserContext are marked as
> private despite not being at the end of said context.
> 
> Missing version bump.
> 
>  doc/APIchanges       | 3 +++
>  libavcodec/avcodec.h | 2 +-
>  libavcodec/parser.c  | 8 ++++++--
>  3 files changed, 10 insertions(+), 3 deletions(-)
> 
> diff --git a/doc/APIchanges b/doc/APIchanges
> index 63bf95233f..5c0113a2ea 100644
> --- a/doc/APIchanges
> +++ b/doc/APIchanges
> @@ -14,6 +14,9 @@ libavutil:     2021-04-27
>  
>  API changes, most recent first:
>  
> +2021-09-01 - xxxxxxxxxx - lavc 59.yyyyy - avcodec.h
> +  Incremented the number of elements of AVCodecParser.codec_ids to seven.
> +
>  2021-08-24 - xxxxxxxxxx - lavc 59.6.100 - avcodec.h
>    Add FF_CODEC_PROPERTY_FILM_GRAIN
>  
> diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
> index f3f401871b..ffd58c333f 100644
> --- a/libavcodec/avcodec.h
> +++ b/libavcodec/avcodec.h
> @@ -2927,7 +2927,7 @@ typedef struct AVCodecParserContext {
>  } AVCodecParserContext;
>  
>  typedef struct AVCodecParser {
> -    int codec_ids[5]; /* several codec IDs are permitted */
> +    int codec_ids[7]; /* several codec IDs are permitted */
>      int priv_data_size;
>      int (*parser_init)(AVCodecParserContext *s);
>      /* This callback never returns an error, a negative value means that
> diff --git a/libavcodec/parser.c b/libavcodec/parser.c
> index fc57246965..3b459cc125 100644
> --- a/libavcodec/parser.c
> +++ b/libavcodec/parser.c
> @@ -46,7 +46,9 @@ AVCodecParserContext *av_parser_init(int codec_id)
>              parser->codec_ids[1] == codec_id ||
>              parser->codec_ids[2] == codec_id ||
>              parser->codec_ids[3] == codec_id ||
> -            parser->codec_ids[4] == codec_id)
> +            parser->codec_ids[4] == codec_id ||
> +            parser->codec_ids[5] == codec_id ||
> +            parser->codec_ids[6] == codec_id)
>              goto found;
>      }
>      return NULL;
> @@ -127,7 +129,9 @@ int av_parser_parse2(AVCodecParserContext *s, AVCodecContext *avctx,
>                 avctx->codec_id == s->parser->codec_ids[1] ||
>                 avctx->codec_id == s->parser->codec_ids[2] ||
>                 avctx->codec_id == s->parser->codec_ids[3] ||
> -               avctx->codec_id == s->parser->codec_ids[4]);
> +               avctx->codec_id == s->parser->codec_ids[4] ||
> +               avctx->codec_id == s->parser->codec_ids[5] ||
> +               avctx->codec_id == s->parser->codec_ids[6]);
>  
>      if (!(s->flags & PARSER_FLAG_FETCHED_OFFSET)) {
>          s->next_frame_offset =
> 
Given that this has been lgtm'ed I will apply it tomorrow unless there
are objections.

- Andreas
diff mbox series

Patch

diff --git a/doc/APIchanges b/doc/APIchanges
index 63bf95233f..5c0113a2ea 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -14,6 +14,9 @@  libavutil:     2021-04-27
 
 API changes, most recent first:
 
+2021-09-01 - xxxxxxxxxx - lavc 59.yyyyy - avcodec.h
+  Incremented the number of elements of AVCodecParser.codec_ids to seven.
+
 2021-08-24 - xxxxxxxxxx - lavc 59.6.100 - avcodec.h
   Add FF_CODEC_PROPERTY_FILM_GRAIN
 
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index f3f401871b..ffd58c333f 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -2927,7 +2927,7 @@  typedef struct AVCodecParserContext {
 } AVCodecParserContext;
 
 typedef struct AVCodecParser {
-    int codec_ids[5]; /* several codec IDs are permitted */
+    int codec_ids[7]; /* several codec IDs are permitted */
     int priv_data_size;
     int (*parser_init)(AVCodecParserContext *s);
     /* This callback never returns an error, a negative value means that
diff --git a/libavcodec/parser.c b/libavcodec/parser.c
index fc57246965..3b459cc125 100644
--- a/libavcodec/parser.c
+++ b/libavcodec/parser.c
@@ -46,7 +46,9 @@  AVCodecParserContext *av_parser_init(int codec_id)
             parser->codec_ids[1] == codec_id ||
             parser->codec_ids[2] == codec_id ||
             parser->codec_ids[3] == codec_id ||
-            parser->codec_ids[4] == codec_id)
+            parser->codec_ids[4] == codec_id ||
+            parser->codec_ids[5] == codec_id ||
+            parser->codec_ids[6] == codec_id)
             goto found;
     }
     return NULL;
@@ -127,7 +129,9 @@  int av_parser_parse2(AVCodecParserContext *s, AVCodecContext *avctx,
                avctx->codec_id == s->parser->codec_ids[1] ||
                avctx->codec_id == s->parser->codec_ids[2] ||
                avctx->codec_id == s->parser->codec_ids[3] ||
-               avctx->codec_id == s->parser->codec_ids[4]);
+               avctx->codec_id == s->parser->codec_ids[4] ||
+               avctx->codec_id == s->parser->codec_ids[5] ||
+               avctx->codec_id == s->parser->codec_ids[6]);
 
     if (!(s->flags & PARSER_FLAG_FETCHED_OFFSET)) {
         s->next_frame_offset =