You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	avfilter/vsrc_ddagrab: add options for more control over output format fallback
This commit is contained in:
		| @@ -32,7 +32,7 @@ | ||||
| #include "version_major.h" | ||||
|  | ||||
| #define LIBAVFILTER_VERSION_MINOR  46 | ||||
| #define LIBAVFILTER_VERSION_MICRO 102 | ||||
| #define LIBAVFILTER_VERSION_MICRO 103 | ||||
|  | ||||
|  | ||||
| #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ | ||||
|   | ||||
| @@ -98,6 +98,8 @@ typedef struct DdagrabContext { | ||||
|     int        offset_x; | ||||
|     int        offset_y; | ||||
|     int        out_fmt; | ||||
|     int        allow_fallback; | ||||
|     int        force_fmt; | ||||
| } DdagrabContext; | ||||
|  | ||||
| #define OFFSET(x) offsetof(DdagrabContext, x) | ||||
| @@ -117,6 +119,10 @@ static const AVOption ddagrab_options[] = { | ||||
|     { "x2bgr10",    "only output 10 Bit X2BGR10",        0,            AV_OPT_TYPE_CONST,      { .i64 = DXGI_FORMAT_R10G10B10A2_UNORM }, 0, INT_MAX, FLAGS, "output_fmt" }, | ||||
|     { "16bit",      "only output default 16 Bit format", 0,            AV_OPT_TYPE_CONST,      { .i64 = DXGI_FORMAT_R16G16B16A16_FLOAT },0, INT_MAX, FLAGS, "output_fmt" }, | ||||
|     { "rgbaf16",    "only output 16 Bit RGBAF16",        0,            AV_OPT_TYPE_CONST,      { .i64 = DXGI_FORMAT_R16G16B16A16_FLOAT },0, INT_MAX, FLAGS, "output_fmt" }, | ||||
|     { "allow_fallback", "don't error on fallback to default 8 Bit format", | ||||
|                                                    OFFSET(allow_fallback), AV_OPT_TYPE_BOOL,   { .i64 = 0    },       0,       1, FLAGS }, | ||||
|     { "force_fmt",  "exclude BGRA from format list (experimental, discouraged by Microsoft)", | ||||
|                                                    OFFSET(force_fmt),  AV_OPT_TYPE_BOOL,       { .i64 = 0    },       0,       1, FLAGS }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| @@ -226,7 +232,7 @@ static av_cold int init_dxgi_dda(AVFilterContext *avctx) | ||||
|         } else if (dda->out_fmt) { | ||||
|             formats[0] = dda->out_fmt; | ||||
|             formats[1] = DXGI_FORMAT_B8G8R8A8_UNORM; | ||||
|             nb_formats = 2; | ||||
|             nb_formats = dda->force_fmt ? 1 : 2; | ||||
|         } | ||||
|  | ||||
|         IDXGIOutput_Release(dxgi_output); | ||||
| @@ -262,7 +268,7 @@ static av_cold int init_dxgi_dda(AVFilterContext *avctx) | ||||
| #else | ||||
|     { | ||||
| #endif | ||||
|         if (dda->out_fmt && dda->out_fmt != DXGI_FORMAT_B8G8R8A8_UNORM) { | ||||
|         if (dda->out_fmt && dda->out_fmt != DXGI_FORMAT_B8G8R8A8_UNORM && (!dda->allow_fallback || dda->force_fmt)) { | ||||
|             av_log(avctx, AV_LOG_ERROR, "Only 8 bit output supported with legacy API\n"); | ||||
|             return AVERROR(ENOTSUP); | ||||
|         } | ||||
| @@ -733,7 +739,7 @@ static int ddagrab_config_props(AVFilterLink *outlink) | ||||
|     if (ret < 0) | ||||
|         return ret; | ||||
|  | ||||
|     if (dda->out_fmt && dda->raw_format != dda->out_fmt) { | ||||
|     if (dda->out_fmt && dda->raw_format != dda->out_fmt && (!dda->allow_fallback || dda->force_fmt)) { | ||||
|         av_log(avctx, AV_LOG_ERROR, "Requested output format unavailable.\n"); | ||||
|         return AVERROR(ENOTSUP); | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user