diff options
-rw-r--r-- | ffmpeg_opt.c | 13 | ||||
-rw-r--r-- | libavcodec/libvpx.c | 4 | ||||
-rw-r--r-- | libavcodec/libvpxenc.c | 24 |
3 files changed, 38 insertions, 3 deletions
diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c index a8d433eac1..aa0f3db69d 100644 --- a/ffmpeg_opt.c +++ b/ffmpeg_opt.c @@ -111,6 +111,7 @@ static int do_psnr = 0; static int input_sync; static int override_ffserver = 0; static int input_stream_potentially_available = 0; +static int ignore_unknown_streams = 0; static void uninit_options(OptionsContext *o) { @@ -2018,9 +2019,15 @@ loop_end: case AVMEDIA_TYPE_DATA: ost = new_data_stream (o, oc, src_idx); break; case AVMEDIA_TYPE_ATTACHMENT: ost = new_attachment_stream(o, oc, src_idx); break; default: - av_log(NULL, AV_LOG_FATAL, "Cannot map stream #%d:%d - unsupported type.\n", + av_log(NULL, ignore_unknown_streams ? AV_LOG_WARNING : AV_LOG_FATAL, + "Cannot map stream #%d:%d - unsupported type.\n", map->file_index, map->stream_index); - exit_program(1); + if (!ignore_unknown_streams) { + av_log(NULL, AV_LOG_FATAL, + "If you want unsupported types ignored instead" + "of failing, please use the -ignore_unknown option\n"); + exit_program(1); + } } } } @@ -2855,6 +2862,8 @@ const OptionDef options[] = { "overwrite output files" }, { "n", OPT_BOOL, { &no_file_overwrite }, "never overwrite output files" }, + { "ignore_unknown", OPT_BOOL, { &ignore_unknown_streams }, + "Ignore unknown stream types" }, { "c", HAS_ARG | OPT_STRING | OPT_SPEC | OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(codec_names) }, "codec name", "codec" }, diff --git a/libavcodec/libvpx.c b/libavcodec/libvpx.c index b432fe9671..e0f9df3caa 100644 --- a/libavcodec/libvpx.c +++ b/libavcodec/libvpx.c @@ -36,6 +36,7 @@ static const enum AVPixelFormat vp9_pix_fmts_def[] = { static const enum AVPixelFormat vp9_pix_fmts_highcol[] = { AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, + AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_NONE }; @@ -43,12 +44,15 @@ static const enum AVPixelFormat vp9_pix_fmts_highcol[] = { static const enum AVPixelFormat vp9_pix_fmts_highbd[] = { AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, + AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV420P10LE, AV_PIX_FMT_YUV422P10LE, + AV_PIX_FMT_YUV440P10LE, AV_PIX_FMT_YUV444P10LE, AV_PIX_FMT_YUV420P12LE, AV_PIX_FMT_YUV422P12LE, + AV_PIX_FMT_YUV440P12LE, AV_PIX_FMT_YUV444P12LE, AV_PIX_FMT_NONE }; diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c index c2408a5174..adf4b2e2f6 100644 --- a/libavcodec/libvpxenc.c +++ b/libavcodec/libvpxenc.c @@ -280,9 +280,18 @@ static int set_pix_fmt(AVCodecContext *avctx, vpx_codec_caps_t codec_caps, *img_fmt = VPX_IMG_FMT_I420; return 0; case AV_PIX_FMT_YUV422P: + enccfg->g_profile = 1; + *img_fmt = VPX_IMG_FMT_I422; + return 0; +#if VPX_IMAGE_ABI_VERSION >= 3 + case AV_PIX_FMT_YUV440P: + enccfg->g_profile = 1; + *img_fmt = VPX_IMG_FMT_I440; + return 0; +#endif case AV_PIX_FMT_YUV444P: enccfg->g_profile = 1; - *img_fmt = avctx->pix_fmt == AV_PIX_FMT_YUV422P ? VPX_IMG_FMT_I422 : VPX_IMG_FMT_I444; + *img_fmt = VPX_IMG_FMT_I444; return 0; #ifdef VPX_IMG_FMT_HIGHBITDEPTH case AV_PIX_FMT_YUV420P10LE: @@ -307,6 +316,19 @@ static int set_pix_fmt(AVCodecContext *avctx, vpx_codec_caps_t codec_caps, return 0; } break; +#if VPX_IMAGE_ABI_VERSION >= 3 + case AV_PIX_FMT_YUV440P10LE: + case AV_PIX_FMT_YUV440P12LE: + if (codec_caps & VPX_CODEC_CAP_HIGHBITDEPTH) { + enccfg->g_bit_depth = enccfg->g_input_bit_depth = + avctx->pix_fmt == AV_PIX_FMT_YUV440P10LE ? 10 : 12; + enccfg->g_profile = 3; + *img_fmt = VPX_IMG_FMT_I44016; + *flags |= VPX_CODEC_USE_HIGHBITDEPTH; + return 0; + } + break; +#endif case AV_PIX_FMT_YUV444P10LE: case AV_PIX_FMT_YUV444P12LE: if (codec_caps & VPX_CODEC_CAP_HIGHBITDEPTH) { |