summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ffmpeg_opt.c13
-rw-r--r--libavcodec/libvpx.c4
-rw-r--r--libavcodec/libvpxenc.c24
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) {