mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
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>
This commit is contained in:
parent
c17915fd64
commit
988deae6da
@ -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 &&
|
((priv_class = codec->priv_class) &&
|
||||||
av_opt_find(&codec->priv_class, t->key, NULL, flags,
|
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 &&
|
||||||
|
@ -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().
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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…
Reference in New Issue
Block a user