FFMPEG: support demuxer specific options.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
pull/2/head
Michael Niedermayer 14 years ago
parent ffdc49df25
commit fa1195227f
  1. 10
      cmdutils.c
  2. 8
      ffmpeg.c

@ -297,6 +297,7 @@ int opt_default(const char *opt, const char *arg){
int opt_types[]={AV_OPT_FLAG_VIDEO_PARAM, AV_OPT_FLAG_AUDIO_PARAM, 0, AV_OPT_FLAG_SUBTITLE_PARAM, 0}; int opt_types[]={AV_OPT_FLAG_VIDEO_PARAM, AV_OPT_FLAG_AUDIO_PARAM, 0, AV_OPT_FLAG_SUBTITLE_PARAM, 0};
AVCodec *p = NULL; AVCodec *p = NULL;
AVOutputFormat *oformat = NULL; AVOutputFormat *oformat = NULL;
AVInputFormat *iformat = NULL;
while ((p = av_codec_next(p))) { while ((p = av_codec_next(p))) {
AVClass *c = p->priv_class; AVClass *c = p->priv_class;
@ -312,6 +313,13 @@ int opt_default(const char *opt, const char *arg){
} }
if (oformat) if (oformat)
goto out; goto out;
while ((iformat = av_iformat_next(iformat))) {
const AVClass *c = iformat->priv_class;
if (c && av_find_opt(&c, opt, NULL, 0, 0))
break;
}
if (iformat)
goto out;
for(type=0; *avcodec_opts && type<AVMEDIA_TYPE_NB && ret>= 0; type++){ for(type=0; *avcodec_opts && type<AVMEDIA_TYPE_NB && ret>= 0; type++){
const AVOption *o2 = av_find_opt(avcodec_opts[0], opt, NULL, opt_types[type], opt_types[type]); const AVOption *o2 = av_find_opt(avcodec_opts[0], opt, NULL, opt_types[type], opt_types[type]);
@ -415,6 +423,8 @@ void set_context_opts(void *ctx, void *opts_ctx, int flags, AVCodec *codec)
AVFormatContext *avctx = ctx; AVFormatContext *avctx = ctx;
if (avctx->oformat && avctx->oformat->priv_class) { if (avctx->oformat && avctx->oformat->priv_class) {
priv_ctx = avctx->priv_data; priv_ctx = avctx->priv_data;
} else if (avctx->iformat && avctx->iformat->priv_class) {
priv_ctx = avctx->priv_data;
} }
} }

@ -3258,10 +3258,16 @@ static void opt_input_file(const char *filename)
ic->subtitle_codec_id= ic->subtitle_codec_id=
find_codec_or_die(subtitle_codec_name, AVMEDIA_TYPE_SUBTITLE, 0, find_codec_or_die(subtitle_codec_name, AVMEDIA_TYPE_SUBTITLE, 0,
avcodec_opts[AVMEDIA_TYPE_SUBTITLE]->strict_std_compliance); avcodec_opts[AVMEDIA_TYPE_SUBTITLE]->strict_std_compliance);
ic->flags |= AVFMT_FLAG_NONBLOCK; ic->flags |= AVFMT_FLAG_NONBLOCK | AVFMT_FLAG_PRIV_OPT;
/* open the input file with generic libav function */ /* open the input file with generic libav function */
err = av_open_input_file(&ic, filename, file_iformat, 0, ap); err = av_open_input_file(&ic, filename, file_iformat, 0, ap);
if(err >= 0){
set_context_opts(ic, avformat_opts, AV_OPT_FLAG_DECODING_PARAM, NULL);
err = av_demuxer_open(ic, ap);
if(err < 0)
avformat_free_context(ic);
}
if (err < 0) { if (err < 0) {
print_error(filename, err); print_error(filename, err);
ffmpeg_exit(1); ffmpeg_exit(1);

Loading…
Cancel
Save