X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=ffmpeg_filter.c;h=10b2f5f72208f8c32d942f45561849c55eb2e791;hb=fd6b38bed7818687a850811bf056c75adf4cdaa1;hp=950e4d02e92f51e09df2cd32ad2850d9b1327475;hpb=59b009411fcc8531d661a381bbd2608e36c20bd0;p=ffmpeg diff --git a/ffmpeg_filter.c b/ffmpeg_filter.c index 950e4d02e92..10b2f5f7220 100644 --- a/ffmpeg_filter.c +++ b/ffmpeg_filter.c @@ -85,7 +85,7 @@ void choose_sample_fmt(AVStream *st, AVCodec *codec) break; } if (*p == -1) { - if((codec->capabilities & CODEC_CAP_LOSSLESS) && av_get_sample_fmt_name(st->codec->sample_fmt) > av_get_sample_fmt_name(codec->sample_fmts[0])) + if((codec->capabilities & AV_CODEC_CAP_LOSSLESS) && av_get_sample_fmt_name(st->codec->sample_fmt) > av_get_sample_fmt_name(codec->sample_fmts[0])) av_log(NULL, AV_LOG_ERROR, "Conversion will not be lossless.\n"); if(av_get_sample_fmt_name(st->codec->sample_fmt)) av_log(NULL, AV_LOG_WARNING, @@ -423,11 +423,17 @@ static int configure_output_video_filter(FilterGraph *fg, OutputFilter *ofilter, if (codec->width || codec->height) { char args[255]; AVFilterContext *filter; + AVDictionaryEntry *e = NULL; - snprintf(args, sizeof(args), "%d:%d:0x%X", + snprintf(args, sizeof(args), "%d:%d", codec->width, - codec->height, - (unsigned)ost->sws_flags); + codec->height); + + while ((e = av_dict_get(ost->sws_dict, "", e, + AV_DICT_IGNORE_SUFFIX))) { + av_strlcatf(args, sizeof(args), ":%s=%s", e->key, e->value); + } + snprintf(name, sizeof(name), "scaler for output stream %d:%d", ost->file_index, ost->index); if ((ret = avfilter_graph_create_filter(&filter, avfilter_get_by_name("scale"), @@ -538,7 +544,7 @@ static int configure_output_audio_filter(FilterGraph *fg, OutputFilter *ofilter, av_get_default_channel_layout(ost->audio_channels_mapped)); for (i = 0; i < ost->audio_channels_mapped; i++) if (ost->audio_channels_map[i] != -1) - av_bprintf(&pan_buf, ":c%d=c%d", i, ost->audio_channels_map[i]); + av_bprintf(&pan_buf, "|c%d=c%d", i, ost->audio_channels_map[i]); AUTO_INSERT_FILTER("-map_channel", "pan", pan_buf.str); av_bprint_finalize(&pan_buf, NULL); @@ -676,8 +682,8 @@ static int sub2video_prepare(InputStream *ist) } av_log(avf, AV_LOG_INFO, "sub2video: using %dx%d canvas\n", w, h); } - ist->sub2video.w = ist->dec_ctx->width = ist->resample_width = w; - ist->sub2video.h = ist->dec_ctx->height = ist->resample_height = h; + ist->sub2video.w = ist->resample_width = w; + ist->sub2video.h = ist->resample_height = h; /* rectangles are AV_PIX_FMT_PAL8, but we have no guarantee that the palettes for all rectangles are identical or compatible */ @@ -732,7 +738,7 @@ static int configure_input_video_filter(FilterGraph *fg, InputFilter *ifilter, ist->resample_height, ist->hwaccel_retrieve_data ? ist->hwaccel_retrieved_pix_fmt : ist->resample_pix_fmt, tb.num, tb.den, sar.num, sar.den, - SWS_BILINEAR + ((ist->dec_ctx->flags&CODEC_FLAG_BITEXACT) ? SWS_BITEXACT:0)); + SWS_BILINEAR + ((ist->dec_ctx->flags&AV_CODEC_FLAG_BITEXACT) ? SWS_BITEXACT:0)); if (fr.num && fr.den) av_bprintf(&args, ":frame_rate=%d/%d", fr.num, fr.den); snprintf(name, sizeof(name), "graph %d input from stream %d:%d", fg->index, @@ -961,7 +967,13 @@ int configure_filtergraph(FilterGraph *fg) char args[512]; AVDictionaryEntry *e = NULL; - snprintf(args, sizeof(args), "flags=0x%X", (unsigned)ost->sws_flags); + args[0] = 0; + while ((e = av_dict_get(ost->sws_dict, "", e, + AV_DICT_IGNORE_SUFFIX))) { + av_strlcatf(args, sizeof(args), "%s=%s:", e->key, e->value); + } + if (strlen(args)) + args[strlen(args)-1] = 0; fg->graph->scale_sws_opts = av_strdup(args); args[0] = 0; @@ -1036,7 +1048,7 @@ int configure_filtergraph(FilterGraph *fg) OutputStream *ost = fg->outputs[i]->ost; if (ost && ost->enc->type == AVMEDIA_TYPE_AUDIO && - !(ost->enc->capabilities & CODEC_CAP_VARIABLE_FRAME_SIZE)) + !(ost->enc->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE)) av_buffersink_set_frame_size(ost->filter->filter, ost->enc_ctx->frame_size); }