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
615 },615 },
616};616};
617 617
618#if CONFIG_VPP_QSV_FILTER618#define DEFINE_QSV_FILTER(x, sn, ln, fmts) \
619 619static const AVClass x##_class = { \
620static int query_formats(AVFilterContext *ctx)620 .class_name = #sn "_qsv", \
621{621 .item_name = av_default_item_name, \
622 int ret;622 .option = x##_options, \
623 static const enum AVPixelFormat in_pix_fmts[] = {623 .version = LIBAVUTIL_VERSION_INT, \
624 AV_PIX_FMT_YUV420P,624}; \
625 AV_PIX_FMT_NV12,625const AVFilter ff_vf_##sn##_qsv = { \
626 AV_PIX_FMT_YUYV422,626 .name = #sn "_qsv", \
627 AV_PIX_FMT_RGB32,627 .description = NULL_IF_CONFIG_SMALL("Quick Sync Video " #ln), \
628 AV_PIX_FMT_P010,628 .preinit = x##_preinit, \
629 AV_PIX_FMT_QSV,629 .init = vpp_init, \
630 AV_PIX_FMT_NONE630 .uninit = vpp_uninit, \
631 };631 .priv_size = sizeof(VPPContext), \
632 static const enum AVPixelFormat out_pix_fmts[] = {632 .priv_class = &x##_class, \
633 AV_PIX_FMT_NV12,633 FILTER_INPUTS(vpp_inputs), \
634 AV_PIX_FMT_P010,634 FILTER_OUTPUTS(vpp_outputs), \
635 AV_PIX_FMT_QSV,635 fmts, \
636 AV_PIX_FMT_NONE636 .activate = activate, \
637 };637 .flags_internal = FF_FILTER_FLAG_HWFRAME_AWARE, \
638};
638 639
639 ret = ff_formats_ref(ff_make_format_list(in_pix_fmts),640#if CONFIG_VPP_QSV_FILTER
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}
646 641
647static const AVOption options[] = {642static const AVOption vpp_options[] = {
648 { "deinterlace", "deinterlace mode: 0=off, 1=bob, 2=advanced", OFFSET(deinterlace), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, MFX_DEINTERLACING_ADVANCED, .flags = FLAGS, "deinterlace" },643 { "deinterlace", "deinterlace mode: 0=off, 1=bob, 2=advanced", OFFSET(deinterlace), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, MFX_DEINTERLACING_ADVANCED, .flags = FLAGS, "deinterlace" },
649 { "bob", "Bob deinterlace mode.", 0, AV_OPT_TYPE_CONST, { .i64 = MFX_DEINTERLACING_BOB }, .flags = FLAGS, "deinterlace" },644 { "bob", "Bob deinterlace mode.", 0, AV_OPT_TYPE_CONST, { .i64 = MFX_DEINTERLACING_BOB }, .flags = FLAGS, "deinterlace" },
650 { "advanced", "Advanced deinterlace mode. ", 0, AV_OPT_TYPE_CONST, { .i64 = MFX_DEINTERLACING_ADVANCED }, .flags = FLAGS, "deinterlace" },645 { "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
686 { NULL }681 { NULL }
687};682};
688 683
689static const AVClass vpp_class = {684static int vpp_query_formats(AVFilterContext *ctx)
690 .class_name = "vpp_qsv",685{
691 .item_name = av_default_item_name,686 int ret;
692 .option = options,687 static const enum AVPixelFormat in_pix_fmts[] = {
693 .version = LIBAVUTIL_VERSION_INT,688 AV_PIX_FMT_YUV420P,
694};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 };
695 702
696const AVFilter ff_vf_vpp_qsv = {703 ret = ff_formats_ref(ff_make_format_list(in_pix_fmts),
697 .name = "vpp_qsv",704 &ctx->inputs[0]->outcfg.formats);
698 .description = NULL_IF_CONFIG_SMALL("Quick Sync Video VPP."),705 if (ret < 0)
699 .priv_size = sizeof(VPPContext),706 return ret;
700 .preinit = vpp_preinit,707 return ff_formats_ref(ff_make_format_list(out_pix_fmts),
701 .init = vpp_init,708 &ctx->outputs[0]->incfg.formats);
702 .uninit = vpp_uninit,709}
703 FILTER_INPUTS(vpp_inputs),710
704 FILTER_OUTPUTS(vpp_outputs),711DEFINE_QSV_FILTER(vpp, vpp, "VPP", FILTER_QUERY_FUNC(vpp_query_formats));
705 FILTER_QUERY_FUNC(query_formats),
706 .activate = activate,
707 .priv_class = &vpp_class,
708 .flags_internal = FF_FILTER_FLAG_HWFRAME_AWARE,
709};
710 712
711#endif713#endif
712 714
@@ -734,32 +736,6 @@ static av_cold int qsvscale_preinit(AVFilterContext *ctx) · 21 unmodified lines
734 return 0;736 return 0;
735}737}
736 738
737static const AVClass qsvscale_class = {739DEFINE_QSV_FILTER(qsvscale, scale, "scaling and format conversion", FILTER_SINGLE_PIXFMT(AV_PIX_FMT_QSV));
738 .class_name = "scale_qsv",
739 .item_name = av_default_item_name,
740 .option = qsvscale_options,
741 .version = LIBAVUTIL_VERSION_INT,
742};
743
744const 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};
764 740
765#endif741#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