History

lavfi/vpp_qsv: factor out the code for filter definition

Haihao Xiang committed 3 years ago

Commit 2d202981 parent 9c09fb21 file · +51 −75Browse files

Showing the changes to libavfilter (1 of 1 file). Show all

Unified · Split

libavfilter/vf_vpp_qsv.c+51−75
@@ -615,36 +615,31 @@ static const AVFilterPad vpp_outputs[] = { · 614 unmodified lines
615615 },
616616 };
617617
618−#if CONFIG_VPP_QSV_FILTER
619−
620−static int query_formats(AVFilterContext *ctx)
621−{
622− int ret;
623− static const enum AVPixelFormat in_pix_fmts[] = {
624− AV_PIX_FMT_YUV420P,
625− AV_PIX_FMT_NV12,
626− AV_PIX_FMT_YUYV422,
627− AV_PIX_FMT_RGB32,
628− AV_PIX_FMT_P010,
629− AV_PIX_FMT_QSV,
630− AV_PIX_FMT_NONE
631− };
632− static const enum AVPixelFormat out_pix_fmts[] = {
633− AV_PIX_FMT_NV12,
634− AV_PIX_FMT_P010,
635− AV_PIX_FMT_QSV,
636− AV_PIX_FMT_NONE
637− };
618+#define DEFINE_QSV_FILTER(x, sn, ln, fmts) \
619+static const AVClass x##_class = { \
620+ .class_name = #sn "_qsv", \
621+ .item_name = av_default_item_name, \
622+ .option = x##_options, \
623+ .version = LIBAVUTIL_VERSION_INT, \
624+}; \
625+const AVFilter ff_vf_##sn##_qsv = { \
626+ .name = #sn "_qsv", \
627+ .description = NULL_IF_CONFIG_SMALL("Quick Sync Video " #ln), \
628+ .preinit = x##_preinit, \
629+ .init = vpp_init, \
630+ .uninit = vpp_uninit, \
631+ .priv_size = sizeof(VPPContext), \
632+ .priv_class = &x##_class, \
633+ FILTER_INPUTS(vpp_inputs), \
634+ FILTER_OUTPUTS(vpp_outputs), \
635+ fmts, \
636+ .activate = activate, \
637+ .flags_internal = FF_FILTER_FLAG_HWFRAME_AWARE, \
638+};
638639
639− ret = ff_formats_ref(ff_make_format_list(in_pix_fmts),
640− &ctx->inputs[0]->outcfg.formats);
641− if (ret < 0)
642− return ret;
643− return ff_formats_ref(ff_make_format_list(out_pix_fmts),
644− &ctx->outputs[0]->incfg.formats);
645−}
640+#if CONFIG_VPP_QSV_FILTER
646641
647−static const AVOption options[] = {
642+static const AVOption vpp_options[] = {
648643 { "deinterlace", "deinterlace mode: 0=off, 1=bob, 2=advanced", OFFSET(deinterlace), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, MFX_DEINTERLACING_ADVANCED, .flags = FLAGS, "deinterlace" },
649644 { "bob", "Bob deinterlace mode.", 0, AV_OPT_TYPE_CONST, { .i64 = MFX_DEINTERLACING_BOB }, .flags = FLAGS, "deinterlace" },
650645 { "advanced", "Advanced deinterlace mode. ", 0, AV_OPT_TYPE_CONST, { .i64 = MFX_DEINTERLACING_ADVANCED }, .flags = FLAGS, "deinterlace" },
@@ -686,27 +681,34 @@ static const AVOption options[] = { · 35 unmodified lines
686681 { NULL }
687682 };
688683
689−static const AVClass vpp_class = {
690− .class_name = "vpp_qsv",
691− .item_name = av_default_item_name,
692− .option = options,
693− .version = LIBAVUTIL_VERSION_INT,
694−};
684+static int vpp_query_formats(AVFilterContext *ctx)
685+{
686+ int ret;
687+ static const enum AVPixelFormat in_pix_fmts[] = {
688+ AV_PIX_FMT_YUV420P,
689+ AV_PIX_FMT_NV12,
690+ AV_PIX_FMT_YUYV422,
691+ AV_PIX_FMT_RGB32,
692+ AV_PIX_FMT_P010,
693+ AV_PIX_FMT_QSV,
694+ AV_PIX_FMT_NONE
695+ };
696+ static const enum AVPixelFormat out_pix_fmts[] = {
697+ AV_PIX_FMT_NV12,
698+ AV_PIX_FMT_P010,
699+ AV_PIX_FMT_QSV,
700+ AV_PIX_FMT_NONE
701+ };
695702
696−const AVFilter ff_vf_vpp_qsv = {
697− .name = "vpp_qsv",
698− .description = NULL_IF_CONFIG_SMALL("Quick Sync Video VPP."),
699− .priv_size = sizeof(VPPContext),
700− .preinit = vpp_preinit,
701− .init = vpp_init,
702− .uninit = vpp_uninit,
703− FILTER_INPUTS(vpp_inputs),
704− FILTER_OUTPUTS(vpp_outputs),
705− FILTER_QUERY_FUNC(query_formats),
706− .activate = activate,
707− .priv_class = &vpp_class,
708− .flags_internal = FF_FILTER_FLAG_HWFRAME_AWARE,
709−};
703+ ret = ff_formats_ref(ff_make_format_list(in_pix_fmts),
704+ &ctx->inputs[0]->outcfg.formats);
705+ if (ret < 0)
706+ return ret;
707+ return ff_formats_ref(ff_make_format_list(out_pix_fmts),
708+ &ctx->outputs[0]->incfg.formats);
709+}
710+
711+DEFINE_QSV_FILTER(vpp, vpp, "VPP", FILTER_QUERY_FUNC(vpp_query_formats));
710712
711713 #endif
712714
@@ -734,32 +736,6 @@ static av_cold int qsvscale_preinit(AVFilterContext *ctx) · 21 unmodified lines
734736 return 0;
735737 }
736738
737−static const AVClass qsvscale_class = {
738− .class_name = "scale_qsv",
739− .item_name = av_default_item_name,
740− .option = qsvscale_options,
741− .version = LIBAVUTIL_VERSION_INT,
742−};
743−
744−const AVFilter ff_vf_scale_qsv = {
745− .name = "scale_qsv",
746− .description = NULL_IF_CONFIG_SMALL("Quick Sync Video scaling and format conversion"),
747−
748− .preinit = qsvscale_preinit,
749− .init = vpp_init,
750− .uninit = vpp_uninit,
751−
752− .priv_size = sizeof(VPPContext),
753− .priv_class = &qsvscale_class,
754−
755− FILTER_INPUTS(vpp_inputs),
756− FILTER_OUTPUTS(vpp_outputs),
757−
758− FILTER_SINGLE_PIXFMT(AV_PIX_FMT_QSV),
759−
760− .activate = activate,
761−
762− .flags_internal = FF_FILTER_FLAG_HWFRAME_AWARE,
763−};
739+DEFINE_QSV_FILTER(qsvscale, scale, "scaling and format conversion", FILTER_SINGLE_PIXFMT(AV_PIX_FMT_QSV));
764740
765741 #endif

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t