Browse Source

fftools: Switch to const AVCodec * where possible

The obstacle to do so was in filter_codec_opts: It uses searches
the AVCodec for options via the AV_OPT_SEARCH_FAKE_OBJ method, which
requires using a void * that points to a pointer to a const AVClass.
When using const AVCodec *, one can not simply use a pointer that points
to the AVCodec's pointer to its AVClass, as said pointer is const, too.
This is fixed by using a temporary pointer to the AVClass.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
tags/n4.4
Andreas Rheinhardt 4 years ago
parent
commit
988deae6da
7 changed files with 14 additions and 13 deletions
  1. +4
    -3
      fftools/cmdutils.c
  2. +1
    -1
      fftools/cmdutils.h
  3. +3
    -3
      fftools/ffmpeg.c
  4. +2
    -2
      fftools/ffmpeg.h
  5. +2
    -2
      fftools/ffmpeg_opt.c
  6. +1
    -1
      fftools/ffplay.c
  7. +1
    -1
      fftools/ffprobe.c

+ 4
- 3
fftools/cmdutils.c View File

@@ -2101,7 +2101,7 @@ int check_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec)
} }


AVDictionary *filter_codec_opts(AVDictionary *opts, enum AVCodecID codec_id, AVDictionary *filter_codec_opts(AVDictionary *opts, enum AVCodecID codec_id,
AVFormatContext *s, AVStream *st, AVCodec *codec)
AVFormatContext *s, AVStream *st, const AVCodec *codec)
{ {
AVDictionary *ret = NULL; AVDictionary *ret = NULL;
AVDictionaryEntry *t = NULL; AVDictionaryEntry *t = NULL;
@@ -2130,6 +2130,7 @@ AVDictionary *filter_codec_opts(AVDictionary *opts, enum AVCodecID codec_id,
} }


while (t = av_dict_get(opts, "", t, AV_DICT_IGNORE_SUFFIX)) { while (t = av_dict_get(opts, "", t, AV_DICT_IGNORE_SUFFIX)) {
const AVClass *priv_class;
char *p = strchr(t->key, ':'); char *p = strchr(t->key, ':');


/* check stream specification in opt name */ /* check stream specification in opt name */
@@ -2142,8 +2143,8 @@ AVDictionary *filter_codec_opts(AVDictionary *opts, enum AVCodecID codec_id,


if (av_opt_find(&cc, t->key, NULL, flags, AV_OPT_SEARCH_FAKE_OBJ) || if (av_opt_find(&cc, t->key, NULL, flags, AV_OPT_SEARCH_FAKE_OBJ) ||
!codec || !codec ||
(codec->priv_class &&
av_opt_find(&codec->priv_class, t->key, NULL, flags,
((priv_class = codec->priv_class) &&
av_opt_find(&priv_class, t->key, NULL, flags,
AV_OPT_SEARCH_FAKE_OBJ))) AV_OPT_SEARCH_FAKE_OBJ)))
av_dict_set(&ret, t->key, t->value, 0); av_dict_set(&ret, t->key, t->value, 0);
else if (t->key[0] == prefix && else if (t->key[0] == prefix &&


+ 1
- 1
fftools/cmdutils.h View File

@@ -414,7 +414,7 @@ int check_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec);
* @return a pointer to the created dictionary * @return a pointer to the created dictionary
*/ */
AVDictionary *filter_codec_opts(AVDictionary *opts, enum AVCodecID codec_id, AVDictionary *filter_codec_opts(AVDictionary *opts, enum AVCodecID codec_id,
AVFormatContext *s, AVStream *st, AVCodec *codec);
AVFormatContext *s, AVStream *st, const AVCodec *codec);


/** /**
* Setup AVCodecContext options for avformat_find_stream_info(). * Setup AVCodecContext options for avformat_find_stream_info().


+ 3
- 3
fftools/ffmpeg.c View File

@@ -688,7 +688,7 @@ void assert_avoptions(AVDictionary *m)
} }
} }


static void abort_codec_experimental(AVCodec *c, int encoder)
static void abort_codec_experimental(const AVCodec *c, int encoder)
{ {
exit_program(1); exit_program(1);
} }
@@ -2943,7 +2943,7 @@ static int init_input_stream(int ist_index, char *error, int error_len)
InputStream *ist = input_streams[ist_index]; InputStream *ist = input_streams[ist_index];


if (ist->decoding_needed) { if (ist->decoding_needed) {
AVCodec *codec = ist->dec;
const AVCodec *codec = ist->dec;
if (!codec) { if (!codec) {
snprintf(error, error_len, "Decoder (codec %s) not found for input stream #%d:%d", snprintf(error, error_len, "Decoder (codec %s) not found for input stream #%d:%d",
avcodec_get_name(ist->dec_ctx->codec_id), ist->file_index, ist->st->index); avcodec_get_name(ist->dec_ctx->codec_id), ist->file_index, ist->st->index);
@@ -3522,7 +3522,7 @@ static int init_output_stream(OutputStream *ost, AVFrame *frame,
int ret = 0; int ret = 0;


if (ost->encoding_needed) { if (ost->encoding_needed) {
AVCodec *codec = ost->enc;
const AVCodec *codec = ost->enc;
AVCodecContext *dec = NULL; AVCodecContext *dec = NULL;
InputStream *ist; InputStream *ist;




+ 2
- 2
fftools/ffmpeg.h View File

@@ -307,7 +307,7 @@ typedef struct InputStream {
#define DECODING_FOR_FILTER 2 #define DECODING_FOR_FILTER 2


AVCodecContext *dec_ctx; AVCodecContext *dec_ctx;
AVCodec *dec;
const AVCodec *dec;
AVFrame *decoded_frame; AVFrame *decoded_frame;
AVFrame *filter_frame; /* a ref of decoded_frame, to be sent to filters */ AVFrame *filter_frame; /* a ref of decoded_frame, to be sent to filters */


@@ -470,7 +470,7 @@ typedef struct OutputStream {


AVCodecContext *enc_ctx; AVCodecContext *enc_ctx;
AVCodecParameters *ref_par; /* associated input codec parameters with encoders options applied */ AVCodecParameters *ref_par; /* associated input codec parameters with encoders options applied */
AVCodec *enc;
const AVCodec *enc;
int64_t max_frames; int64_t max_frames;
AVFrame *filtered_frame; AVFrame *filtered_frame;
AVFrame *last_frame; AVFrame *last_frame;


+ 2
- 2
fftools/ffmpeg_opt.c View File

@@ -766,13 +766,13 @@ static AVCodec *find_codec_or_die(const char *name, enum AVMediaType type, int e
return codec; return codec;
} }


static AVCodec *choose_decoder(OptionsContext *o, AVFormatContext *s, AVStream *st)
static const AVCodec *choose_decoder(OptionsContext *o, AVFormatContext *s, AVStream *st)
{ {
char *codec_name = NULL; char *codec_name = NULL;


MATCH_PER_STREAM_OPT(codec_names, str, codec_name, s, st); MATCH_PER_STREAM_OPT(codec_names, str, codec_name, s, st);
if (codec_name) { if (codec_name) {
AVCodec *codec = find_codec_or_die(codec_name, st->codecpar->codec_type, 0);
const AVCodec *codec = find_codec_or_die(codec_name, st->codecpar->codec_type, 0);
st->codecpar->codec_id = codec->id; st->codecpar->codec_id = codec->id;
return codec; return codec;
} else } else


+ 1
- 1
fftools/ffplay.c View File

@@ -2573,7 +2573,7 @@ static int stream_component_open(VideoState *is, int stream_index)
{ {
AVFormatContext *ic = is->ic; AVFormatContext *ic = is->ic;
AVCodecContext *avctx; AVCodecContext *avctx;
AVCodec *codec;
const AVCodec *codec;
const char *forced_codec_name = NULL; const char *forced_codec_name = NULL;
AVDictionary *opts = NULL; AVDictionary *opts = NULL;
AVDictionaryEntry *t = NULL; AVDictionaryEntry *t = NULL;


+ 1
- 1
fftools/ffprobe.c View File

@@ -2996,7 +2996,7 @@ static int open_input_file(InputFile *ifile, const char *filename,
for (i = 0; i < fmt_ctx->nb_streams; i++) { for (i = 0; i < fmt_ctx->nb_streams; i++) {
InputStream *ist = &ifile->streams[i]; InputStream *ist = &ifile->streams[i];
AVStream *stream = fmt_ctx->streams[i]; AVStream *stream = fmt_ctx->streams[i];
AVCodec *codec;
const AVCodec *codec;


ist->st = stream; ist->st = stream;




Loading…
Cancel
Save