From 626535f6a169e2d821b969e0ea77125ba7482113 Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt Date: Thu, 25 Feb 2021 07:45:51 +0100 Subject: [PATCH] avcodec/codec, allcodecs: Constify the AVCodec API Signed-off-by: Andreas Rheinhardt Signed-off-by: James Almer --- doc/APIchanges | 5 +++++ doc/examples/demuxing_decoding.c | 2 +- doc/examples/muxing.c | 10 ++++++---- doc/examples/transcode_aac.c | 4 ++-- doc/examples/transcoding.c | 4 ++-- doc/examples/vaapi_encode.c | 2 +- doc/examples/vaapi_transcode.c | 4 ++-- libavcodec/allcodecs.c | 18 +++++++++--------- libavcodec/codec.h | 8 ++++---- libavdevice/dshow.c | 2 +- tests/api/api-band-test.c | 2 +- tests/api/api-flac-test.c | 10 +++++----- tests/api/api-h264-test.c | 2 +- tests/api/api-seek-test.c | 2 +- tools/target_dec_fuzzer.c | 8 ++++---- 15 files changed, 45 insertions(+), 38 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index 63434ef635..9b7a2d4b99 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -14,6 +14,11 @@ libavutil: 2017-10-21 API changes, most recent first: +2021-04-27 - xxxxxxxxxx - lavc yyyyyyyyy - codec.h + avcodec_find_encoder_by_name(), avcodec_find_encoder(), + avcodec_find_decoder_by_name() and avcodec_find_decoder() + now return a pointer to const AVCodec. + 2021-04-27 - xxxxxxxxxx - lavf yyyyyyyyy - avformat.h Constified AVFormatContext.*_codec. diff --git a/doc/examples/demuxing_decoding.c b/doc/examples/demuxing_decoding.c index db5e0cb951..55fdb2555c 100644 --- a/doc/examples/demuxing_decoding.c +++ b/doc/examples/demuxing_decoding.c @@ -149,7 +149,7 @@ static int open_codec_context(int *stream_idx, { int ret, stream_index; AVStream *st; - AVCodec *dec = NULL; + const AVCodec *dec = NULL; AVDictionary *opts = NULL; ret = av_find_best_stream(fmt_ctx, type, -1, -1, NULL, 0); diff --git a/doc/examples/muxing.c b/doc/examples/muxing.c index 014359e2ca..fe1b9ded21 100644 --- a/doc/examples/muxing.c +++ b/doc/examples/muxing.c @@ -121,7 +121,7 @@ static int write_frame(AVFormatContext *fmt_ctx, AVCodecContext *c, /* Add an output stream. */ static void add_stream(OutputStream *ost, AVFormatContext *oc, - AVCodec **codec, + const AVCodec **codec, enum AVCodecID codec_id) { AVCodecContext *c; @@ -242,7 +242,8 @@ static AVFrame *alloc_audio_frame(enum AVSampleFormat sample_fmt, return frame; } -static void open_audio(AVFormatContext *oc, AVCodec *codec, OutputStream *ost, AVDictionary *opt_arg) +static void open_audio(AVFormatContext *oc, const AVCodec *codec, + OutputStream *ost, AVDictionary *opt_arg) { AVCodecContext *c; int nb_samples; @@ -405,7 +406,8 @@ static AVFrame *alloc_picture(enum AVPixelFormat pix_fmt, int width, int height) return picture; } -static void open_video(AVFormatContext *oc, AVCodec *codec, OutputStream *ost, AVDictionary *opt_arg) +static void open_video(AVFormatContext *oc, const AVCodec *codec, + OutputStream *ost, AVDictionary *opt_arg) { int ret; AVCodecContext *c = ost->enc; @@ -539,7 +541,7 @@ int main(int argc, char **argv) const AVOutputFormat *fmt; const char *filename; AVFormatContext *oc; - AVCodec *audio_codec, *video_codec; + const AVCodec *audio_codec, *video_codec; int ret; int have_video = 0, have_audio = 0; int encode_video = 0, encode_audio = 0; diff --git a/doc/examples/transcode_aac.c b/doc/examples/transcode_aac.c index 73786ab59b..711076b5a5 100644 --- a/doc/examples/transcode_aac.c +++ b/doc/examples/transcode_aac.c @@ -60,7 +60,7 @@ static int open_input_file(const char *filename, AVCodecContext **input_codec_context) { AVCodecContext *avctx; - AVCodec *input_codec; + const AVCodec *input_codec; int error; /* Open the input file to read from it. */ @@ -144,7 +144,7 @@ static int open_output_file(const char *filename, AVCodecContext *avctx = NULL; AVIOContext *output_io_context = NULL; AVStream *stream = NULL; - AVCodec *output_codec = NULL; + const AVCodec *output_codec = NULL; int error; /* Open the output file to write to it. */ diff --git a/doc/examples/transcoding.c b/doc/examples/transcoding.c index 6ca3089330..3a97426e2c 100644 --- a/doc/examples/transcoding.c +++ b/doc/examples/transcoding.c @@ -77,7 +77,7 @@ static int open_input_file(const char *filename) for (i = 0; i < ifmt_ctx->nb_streams; i++) { AVStream *stream = ifmt_ctx->streams[i]; - AVCodec *dec = avcodec_find_decoder(stream->codecpar->codec_id); + const AVCodec *dec = avcodec_find_decoder(stream->codecpar->codec_id); AVCodecContext *codec_ctx; if (!dec) { av_log(NULL, AV_LOG_ERROR, "Failed to find decoder for stream #%u\n", i); @@ -122,7 +122,7 @@ static int open_output_file(const char *filename) AVStream *out_stream; AVStream *in_stream; AVCodecContext *dec_ctx, *enc_ctx; - AVCodec *encoder; + const AVCodec *encoder; int ret; unsigned int i; diff --git a/doc/examples/vaapi_encode.c b/doc/examples/vaapi_encode.c index 46bca1b3fe..e232fa579a 100644 --- a/doc/examples/vaapi_encode.c +++ b/doc/examples/vaapi_encode.c @@ -105,7 +105,7 @@ int main(int argc, char *argv[]) FILE *fin = NULL, *fout = NULL; AVFrame *sw_frame = NULL, *hw_frame = NULL; AVCodecContext *avctx = NULL; - AVCodec *codec = NULL; + const AVCodec *codec = NULL; const char *enc_name = "h264_vaapi"; if (argc < 5) { diff --git a/doc/examples/vaapi_transcode.c b/doc/examples/vaapi_transcode.c index 5a1a704a8e..e9b33eede0 100644 --- a/doc/examples/vaapi_transcode.c +++ b/doc/examples/vaapi_transcode.c @@ -142,7 +142,7 @@ end: return ret; } -static int dec_enc(AVPacket *pkt, AVCodec *enc_codec) +static int dec_enc(AVPacket *pkt, const AVCodec *enc_codec) { AVFrame *frame; int ret = 0; @@ -226,9 +226,9 @@ fail: int main(int argc, char **argv) { + const AVCodec *enc_codec; int ret = 0; AVPacket *dec_pkt; - AVCodec *enc_codec; if (argc != 4) { fprintf(stderr, "Usage: %s \n" diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c index 92b5d120f3..c33d5a5261 100644 --- a/libavcodec/allcodecs.c +++ b/libavcodec/allcodecs.c @@ -873,7 +873,7 @@ static enum AVCodecID remap_deprecated_codec_id(enum AVCodecID id) } } -static AVCodec *find_codec(enum AVCodecID id, int (*x)(const AVCodec *)) +static const AVCodec *find_codec(enum AVCodecID id, int (*x)(const AVCodec *)) { const AVCodec *p, *experimental = NULL; void *i = 0; @@ -887,24 +887,24 @@ static AVCodec *find_codec(enum AVCodecID id, int (*x)(const AVCodec *)) if (p->capabilities & AV_CODEC_CAP_EXPERIMENTAL && !experimental) { experimental = p; } else - return (AVCodec*)p; + return p; } } - return (AVCodec*)experimental; + return experimental; } -AVCodec *avcodec_find_encoder(enum AVCodecID id) +const AVCodec *avcodec_find_encoder(enum AVCodecID id) { return find_codec(id, av_codec_is_encoder); } -AVCodec *avcodec_find_decoder(enum AVCodecID id) +const AVCodec *avcodec_find_decoder(enum AVCodecID id) { return find_codec(id, av_codec_is_decoder); } -static AVCodec *find_codec_by_name(const char *name, int (*x)(const AVCodec *)) +static const AVCodec *find_codec_by_name(const char *name, int (*x)(const AVCodec *)) { void *i = 0; const AVCodec *p; @@ -916,18 +916,18 @@ static AVCodec *find_codec_by_name(const char *name, int (*x)(const AVCodec *)) if (!x(p)) continue; if (strcmp(name, p->name) == 0) - return (AVCodec*)p; + return p; } return NULL; } -AVCodec *avcodec_find_encoder_by_name(const char *name) +const AVCodec *avcodec_find_encoder_by_name(const char *name) { return find_codec_by_name(name, av_codec_is_encoder); } -AVCodec *avcodec_find_decoder_by_name(const char *name) +const AVCodec *avcodec_find_decoder_by_name(const char *name) { return find_codec_by_name(name, av_codec_is_decoder); } diff --git a/libavcodec/codec.h b/libavcodec/codec.h index c95078491d..c8653e3b31 100644 --- a/libavcodec/codec.h +++ b/libavcodec/codec.h @@ -367,7 +367,7 @@ const AVCodec *av_codec_iterate(void **opaque); * @param id AVCodecID of the requested decoder * @return A decoder if one was found, NULL otherwise. */ -AVCodec *avcodec_find_decoder(enum AVCodecID id); +const AVCodec *avcodec_find_decoder(enum AVCodecID id); /** * Find a registered decoder with the specified name. @@ -375,7 +375,7 @@ AVCodec *avcodec_find_decoder(enum AVCodecID id); * @param name name of the requested decoder * @return A decoder if one was found, NULL otherwise. */ -AVCodec *avcodec_find_decoder_by_name(const char *name); +const AVCodec *avcodec_find_decoder_by_name(const char *name); /** * Find a registered encoder with a matching codec ID. @@ -383,7 +383,7 @@ AVCodec *avcodec_find_decoder_by_name(const char *name); * @param id AVCodecID of the requested encoder * @return An encoder if one was found, NULL otherwise. */ -AVCodec *avcodec_find_encoder(enum AVCodecID id); +const AVCodec *avcodec_find_encoder(enum AVCodecID id); /** * Find a registered encoder with the specified name. @@ -391,7 +391,7 @@ AVCodec *avcodec_find_encoder(enum AVCodecID id); * @param name name of the requested encoder * @return An encoder if one was found, NULL otherwise. */ -AVCodec *avcodec_find_encoder_by_name(const char *name); +const AVCodec *avcodec_find_encoder_by_name(const char *name); /** * @return a non-zero number if codec is an encoder, zero otherwise */ diff --git a/libavdevice/dshow.c b/libavdevice/dshow.c index 73a9a48b20..3f1e9f61d2 100644 --- a/libavdevice/dshow.c +++ b/libavdevice/dshow.c @@ -369,7 +369,7 @@ dshow_cycle_formats(AVFormatContext *avctx, enum dshowDeviceType devtype, enum AVPixelFormat pix_fmt = dshow_pixfmt(bih->biCompression, bih->biBitCount); if (pix_fmt == AV_PIX_FMT_NONE) { enum AVCodecID codec_id = av_codec_get_id(tags, bih->biCompression); - AVCodec *codec = avcodec_find_decoder(codec_id); + const AVCodec *codec = avcodec_find_decoder(codec_id); if (codec_id == AV_CODEC_ID_NONE || !codec) { av_log(avctx, AV_LOG_INFO, " unknown compression type 0x%X", (int) bih->biCompression); } else { diff --git a/tests/api/api-band-test.c b/tests/api/api-band-test.c index 717c9441a4..b00e2927a9 100644 --- a/tests/api/api-band-test.c +++ b/tests/api/api-band-test.c @@ -66,7 +66,7 @@ static void draw_horiz_band(AVCodecContext *ctx, const AVFrame *fr, int offset[4 static int video_decode(const char *input_filename) { - AVCodec *codec = NULL; + const AVCodec *codec = NULL; AVCodecContext *ctx= NULL; AVCodecParameters *origin_par = NULL; uint8_t *byte_buffer = NULL; diff --git a/tests/api/api-flac-test.c b/tests/api/api-flac-test.c index f3bfbc95b5..88b15e8722 100644 --- a/tests/api/api-flac-test.c +++ b/tests/api/api-flac-test.c @@ -48,7 +48,7 @@ static int generate_raw_frame(uint16_t *frame_data, int i, int sample_rate, return 0; } -static int init_encoder(AVCodec *enc, AVCodecContext **enc_ctx, +static int init_encoder(const AVCodec *enc, AVCodecContext **enc_ctx, int64_t ch_layout, int sample_rate) { AVCodecContext *ctx; @@ -78,7 +78,7 @@ static int init_encoder(AVCodec *enc, AVCodecContext **enc_ctx, return 0; } -static int init_decoder(AVCodec *dec, AVCodecContext **dec_ctx, +static int init_decoder(const AVCodec *dec, AVCodecContext **dec_ctx, int64_t ch_layout) { AVCodecContext *ctx; @@ -105,8 +105,8 @@ static int init_decoder(AVCodec *dec, AVCodecContext **dec_ctx, return 0; } -static int run_test(AVCodec *enc, AVCodec *dec, AVCodecContext *enc_ctx, - AVCodecContext *dec_ctx) +static int run_test(const AVCodec *enc, const AVCodec *dec, + AVCodecContext *enc_ctx, AVCodecContext *dec_ctx) { AVPacket *enc_pkt; AVFrame *in_frame, *out_frame; @@ -244,7 +244,7 @@ static int run_test(AVCodec *enc, AVCodec *dec, AVCodecContext *enc_ctx, int main(void) { - AVCodec *enc = NULL, *dec = NULL; + const AVCodec *enc = NULL, *dec = NULL; AVCodecContext *enc_ctx = NULL, *dec_ctx = NULL; uint64_t channel_layouts[] = {AV_CH_LAYOUT_STEREO, AV_CH_LAYOUT_5POINT1_BACK, AV_CH_LAYOUT_SURROUND, AV_CH_LAYOUT_STEREO_DOWNMIX}; int sample_rates[] = {8000, 44100, 48000, 192000}; diff --git a/tests/api/api-h264-test.c b/tests/api/api-h264-test.c index 6f13e773f9..b9230c65cb 100644 --- a/tests/api/api-h264-test.c +++ b/tests/api/api-h264-test.c @@ -32,7 +32,7 @@ static int video_decode_example(const char *input_filename) { - AVCodec *codec = NULL; + const AVCodec *codec = NULL; AVCodecContext *ctx= NULL; AVCodecParameters *origin_par = NULL; AVFrame *fr = NULL; diff --git a/tests/api/api-seek-test.c b/tests/api/api-seek-test.c index bb9f5c89b3..696af9cdfc 100644 --- a/tests/api/api-seek-test.c +++ b/tests/api/api-seek-test.c @@ -184,7 +184,7 @@ static long int read_seek_range(const char *string_with_number) static int seek_test(const char *input_filename, const char *start, const char *end) { - AVCodec *codec = NULL; + const AVCodec *codec = NULL; AVCodecContext *ctx= NULL; AVCodecParameters *origin_par = NULL; AVPacket *pkt = NULL; diff --git a/tools/target_dec_fuzzer.c b/tools/target_dec_fuzzer.c index fad44a4101..2bdf9ea8d5 100644 --- a/tools/target_dec_fuzzer.c +++ b/tools/target_dec_fuzzer.c @@ -59,7 +59,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); -extern AVCodec * codec_list[]; +extern const AVCodec * codec_list[]; static void error(const char *err) { @@ -67,10 +67,10 @@ static void error(const char *err) exit(1); } -static AVCodec *c = NULL; -static AVCodec *AVCodecInitialize(enum AVCodecID codec_id) +static const AVCodec *c = NULL; +static const AVCodec *AVCodecInitialize(enum AVCodecID codec_id) { - AVCodec *res; + const AVCodec *res; res = avcodec_find_decoder(codec_id); if (!res)