static void gst_imx_blitter_video_sink_class_init(GstImxBlitterVideoSinkClass *klass) { GObjectClass *object_class; GstBaseSinkClass *base_class; GstVideoSinkClass *parent_class; GstElementClass *element_class; GST_DEBUG_CATEGORY_INIT(imx_blitter_video_sink_debug, "imxblittervideosink", 0, "Freescale i.MX blitter sink base class"); object_class = G_OBJECT_CLASS(klass); base_class = GST_BASE_SINK_CLASS(klass); parent_class = GST_VIDEO_SINK_CLASS(klass); element_class = GST_ELEMENT_CLASS(klass); object_class->dispose = GST_DEBUG_FUNCPTR(gst_imx_blitter_video_sink_dispose); object_class->set_property = GST_DEBUG_FUNCPTR(gst_imx_blitter_video_sink_set_property); object_class->get_property = GST_DEBUG_FUNCPTR(gst_imx_blitter_video_sink_get_property); element_class->change_state = GST_DEBUG_FUNCPTR(gst_imx_blitter_video_sink_change_state); base_class->set_caps = GST_DEBUG_FUNCPTR(gst_imx_blitter_video_sink_set_caps); base_class->event = GST_DEBUG_FUNCPTR(gst_imx_blitter_video_sink_event); base_class->propose_allocation = GST_DEBUG_FUNCPTR(gst_imx_blitter_video_sink_propose_allocation); parent_class->show_frame = GST_DEBUG_FUNCPTR(gst_imx_blitter_video_sink_show_frame); klass->start = NULL; klass->stop = NULL; klass->create_blitter = NULL; g_object_class_install_property( object_class, PROP_FORCE_ASPECT_RATIO, g_param_spec_boolean( "force-aspect-ratio", "Force aspect ratio", "When enabled, scaling will respect original aspect ratio", DEFAULT_FORCE_ASPECT_RATIO, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS ) ); g_object_class_install_property( object_class, PROP_FBDEV_NAME, g_param_spec_string( "framebuffer", "Framebuffer device name", "The device name of the framebuffer to render to", DEFAULT_FBDEV_NAME, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS ) ); g_object_class_install_property( object_class, PROP_USE_VSYNC, g_param_spec_boolean( "use-vsync", "Use VSync", "Enable and use verticeal synchronization to eliminate tearing", DEFAULT_USE_VSYNC, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS ) ); g_object_class_install_property( object_class, PROP_INPUT_CROP, g_param_spec_boolean( "input-crop", "Input crop", "Whether or not to crop input frames based on their video crop metadata", DEFAULT_INPUT_CROP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS ) ); g_object_class_install_property( object_class, PROP_OUTPUT_ROTATION, g_param_spec_enum( "output-rotation", "Output rotation", "Output rotation in 90-degree steps", gst_imx_canvas_inner_rotation_get_type(), DEFAULT_OUTPUT_ROTATION, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS ) ); g_object_class_install_property( object_class, PROP_WINDOW_X_COORD, g_param_spec_int( "window-x-coord", "Window x coordinate", "X coordinate of the window's top left corner, in pixels", G_MININT, G_MAXINT, DEFAULT_WINDOW_X_COORD, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS ) ); g_object_class_install_property( object_class, PROP_WINDOW_Y_COORD, g_param_spec_int( "window-y-coord", "Window y coordinate", "Y coordinate of the window's top left corner, in pixels", G_MININT, G_MAXINT, DEFAULT_WINDOW_Y_COORD, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS ) ); g_object_class_install_property( object_class, PROP_WINDOW_WIDTH, g_param_spec_uint( "window-width", "Window width", "Window width, in pixels (0 = automatically set to the video input width)", 0, G_MAXINT, DEFAULT_WINDOW_WIDTH, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS ) ); g_object_class_install_property( object_class, PROP_WINDOW_HEIGHT, g_param_spec_uint( "window-height", "Window height", "Window height, in pixels (0 = automatically set to the video input height)", 0, G_MAXINT, DEFAULT_WINDOW_HEIGHT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS ) ); g_object_class_install_property( object_class, PROP_LEFT_MARGIN, g_param_spec_uint( "left-margin", "Left margin", "Left margin", 0, G_MAXUINT, DEFAULT_LEFT_MARGIN, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS ) ); g_object_class_install_property( object_class, PROP_TOP_MARGIN, g_param_spec_uint( "top-margin", "Top margin", "Top margin", 0, G_MAXUINT, DEFAULT_TOP_MARGIN, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS ) ); g_object_class_install_property( object_class, PROP_RIGHT_MARGIN, g_param_spec_uint( "right-margin", "Right margin", "Right margin", 0, G_MAXUINT, DEFAULT_RIGHT_MARGIN, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS ) ); g_object_class_install_property( object_class, PROP_BOTTOM_MARGIN, g_param_spec_uint( "bottom-margin", "Bottom margin", "Bottom margin", 0, G_MAXUINT, DEFAULT_BOTTOM_MARGIN, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS ) ); }
static void gst_imx_compositor_pad_class_init(GstImxCompositorPadClass *klass) { GObjectClass *object_class; GstImxBPAggregatorPadClass *aggregator_pad_class; GstImxBPVideoAggregatorPadClass *videoaggregator_pad_class; object_class = G_OBJECT_CLASS(klass); aggregator_pad_class = GST_IMXBP_AGGREGATOR_PAD_CLASS(klass); videoaggregator_pad_class = GST_IMXBP_VIDEO_AGGREGATOR_PAD_CLASS(klass); object_class->set_property = GST_DEBUG_FUNCPTR(gst_imx_compositor_pad_set_property); object_class->get_property = GST_DEBUG_FUNCPTR(gst_imx_compositor_pad_get_property); aggregator_pad_class->flush = GST_DEBUG_FUNCPTR(gst_imx_compositor_pad_flush); /* Explicitely set these to NULL to force the base class * to not try any software-based colorspace conversions * Subclasses use i.MX blitters, which are capable of * hardware-accelerated colorspace conversions */ videoaggregator_pad_class->set_info = NULL; videoaggregator_pad_class->prepare_frame = NULL; videoaggregator_pad_class->clean_frame = NULL; g_object_class_install_property( object_class, PROP_PAD_XPOS, g_param_spec_int( "xpos", "X position", "Left X coordinate in pixels", G_MININT, G_MAXINT, DEFAULT_PAD_XPOS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_CONTROLLABLE ) ); g_object_class_install_property( object_class, PROP_PAD_YPOS, g_param_spec_int( "ypos", "Y position", "Top Y coordinate in pixels", G_MININT, G_MAXINT, DEFAULT_PAD_YPOS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_CONTROLLABLE ) ); g_object_class_install_property( object_class, PROP_PAD_WIDTH, g_param_spec_int( "width", "Width", "Width in pixels", 0, G_MAXINT, DEFAULT_PAD_WIDTH, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_CONTROLLABLE ) ); g_object_class_install_property( object_class, PROP_PAD_HEIGHT, g_param_spec_int( "height", "Height", "Height in pixels", 0, G_MAXINT, DEFAULT_PAD_HEIGHT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_CONTROLLABLE ) ); g_object_class_install_property( object_class, PROP_PAD_LEFT_MARGIN, g_param_spec_uint( "left-margin", "Left margin", "Left margin", 0, G_MAXUINT, DEFAULT_PAD_LEFT_MARGIN, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_CONTROLLABLE ) ); g_object_class_install_property( object_class, PROP_PAD_TOP_MARGIN, g_param_spec_uint( "top-margin", "Top margin", "Top margin", 0, G_MAXUINT, DEFAULT_PAD_TOP_MARGIN, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_CONTROLLABLE ) ); g_object_class_install_property( object_class, PROP_PAD_RIGHT_MARGIN, g_param_spec_uint( "right-margin", "Right margin", "Right margin", 0, G_MAXUINT, DEFAULT_PAD_RIGHT_MARGIN, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_CONTROLLABLE ) ); g_object_class_install_property( object_class, PROP_PAD_BOTTOM_MARGIN, g_param_spec_uint( "bottom-margin", "Bottom margin", "Bottom margin", 0, G_MAXUINT, DEFAULT_PAD_BOTTOM_MARGIN, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_CONTROLLABLE ) ); g_object_class_install_property( object_class, PROP_PAD_ROTATION, g_param_spec_enum( "rotation", "Rotation", "Rotation that shall be applied to output frames", gst_imx_canvas_inner_rotation_get_type(), DEFAULT_PAD_ROTATION, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_CONTROLLABLE ) ); g_object_class_install_property( object_class, PROP_PAD_KEEP_ASPECT_RATIO, g_param_spec_boolean( "keep-aspect-ratio", "Keep aspect ratio", "Keep aspect ratio", DEFAULT_PAD_KEEP_ASPECT_RATIO, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS ) ); g_object_class_install_property( object_class, PROP_PAD_INPUT_CROP, g_param_spec_boolean( "input-crop", "Input crop", "Whether or not to crop input frames based on their video crop metadata", DEFAULT_PAD_INPUT_CROP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS ) ); g_object_class_install_property( object_class, PROP_PAD_ALPHA, g_param_spec_double( "alpha", "Alpha", "Alpha blending factor (range: 0.0 = fully transparent 1.0 = fully opaque)", 0.0, 1.0, DEFAULT_PAD_ALPHA, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_CONTROLLABLE ) ); g_object_class_install_property( object_class, PROP_PAD_FILL_COLOR, g_param_spec_uint( "fill-color", "Fill color", "Fill color (format: 0xAABBGGRR)", 0, 0xFFFFFFFF, DEFAULT_PAD_FILL_COLOR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_CONTROLLABLE ) ); }