[FFmpeg-devel] [PATCH 1/4] avfilter/vf_transpose_vulkan: add cclock option
Wu Jianhua
jianhua.wu at intel.com
Fri Dec 10 21:05:00 EET 2021
The following command is on how to apply cclock option:
ffmpeg -init_hw_device vulkan -i input.264 -vf \
hwupload=extra_hw_frames=16,transpose_vulkan=dir=cclock,hwdownload,format=yuv420p \
output.264
Signed-off-by: Wu Jianhua <jianhua.wu at intel.com>
---
libavfilter/vf_transpose_vulkan.c | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/libavfilter/vf_transpose_vulkan.c b/libavfilter/vf_transpose_vulkan.c
index c9bae413c3..59a548a12f 100644
--- a/libavfilter/vf_transpose_vulkan.c
+++ b/libavfilter/vf_transpose_vulkan.c
@@ -21,6 +21,7 @@
#include "libavutil/opt.h"
#include "vulkan_filter.h"
#include "internal.h"
+#include "transpose.h"
#define CGS 32
@@ -33,6 +34,7 @@ typedef struct TransposeVulkanContext {
VkDescriptorImageInfo input_images[3];
VkDescriptorImageInfo output_images[3];
+ int dir;
int initialized;
} TransposeVulkanContext;
@@ -89,10 +91,13 @@ static av_cold int init_filter(AVFilterContext *ctx, AVFrame *in)
GLSLC(1, const ivec2 pos = ivec2(gl_GlobalInvocationID.xy); );
for (int i = 0; i < planes; i++) {
GLSLC(0, );
- GLSLF(1, size = imageSize(output_images[%i]); ,i);
+ GLSLF(1, size = imageSize(output_images[%i]); ,i);
GLSLC(1, if (IS_WITHIN(pos, size)) { );
- GLSLF(2, vec4 res = texture(input_images[%i], pos.yx); ,i);
- GLSLF(2, imageStore(output_images[%i], pos, res); ,i);
+ if (s->dir == TRANSPOSE_CCLOCK)
+ GLSLF(2, vec4 res = texture(input_images[%i], ivec2(size.y - pos.y, pos.x)); ,i);
+ else
+ GLSLF(2, vec4 res = texture(input_images[%i], pos.yx); ,i);
+ GLSLF(2, imageStore(output_images[%i], pos, res); ,i);
GLSLC(1, } );
}
GLSLC(0, } );
@@ -279,7 +284,13 @@ fail:
return err;
}
+#define OFFSET(x) offsetof(TransposeVulkanContext, x)
+#define FLAGS (AV_OPT_FLAG_FILTERING_PARAM | AV_OPT_FLAG_VIDEO_PARAM)
+
static const AVOption transpose_vulkan_options[] = {
+ { "dir", "set transpose direction", OFFSET(dir), AV_OPT_TYPE_INT, { .i64 = TRANSPOSE_CCLOCK_FLIP }, 0, 7, FLAGS, "dir" },
+ { "cclock_flip", "rotate counter-clockwise with vertical flip", 0, AV_OPT_TYPE_CONST, { .i64 = TRANSPOSE_CCLOCK_FLIP }, .flags=FLAGS, .unit = "dir" },
+ { "cclock", "rotate counter-clockwise", 0, AV_OPT_TYPE_CONST, { .i64 = TRANSPOSE_CCLOCK }, .flags=FLAGS, .unit = "dir" },
{ NULL }
};
--
2.25.1
More information about the ffmpeg-devel
mailing list