X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fstate_trackers%2Fvdpau%2Fmixer.c;h=8728157e8a5f7cbce5fed143d5af451b0859ba5b;hb=6cf0581159a33f3dc10be38cdc7ab94d9cbacc1e;hp=85f4e1541ab4a92ffc1e6a5c845fb3c74c0dc21d;hpb=aa63ebc48a2ee1ee9afbf2112d4d25e8a9a8d1e8;p=mesa.git diff --git a/src/gallium/state_trackers/vdpau/mixer.c b/src/gallium/state_trackers/vdpau/mixer.c index 85f4e1541ab..8728157e8a5 100644 --- a/src/gallium/state_trackers/vdpau/mixer.c +++ b/src/gallium/state_trackers/vdpau/mixer.c @@ -27,13 +27,16 @@ #include -#include -#include +#include "util/u_memory.h" +#include "util/u_debug.h" -#include +#include "vl/vl_csc.h" #include "vdpau_private.h" +/** + * Create a VdpVideoMixer. + */ VdpStatus vlVdpVideoMixerCreate(VdpDevice device, uint32_t feature_count, @@ -44,7 +47,6 @@ vlVdpVideoMixerCreate(VdpDevice device, VdpVideoMixer *mixer) { vlVdpVideoMixer *vmixer = NULL; - struct pipe_video_context *context; VdpStatus ret; float csc[16]; @@ -54,14 +56,12 @@ vlVdpVideoMixerCreate(VdpDevice device, if (!dev) return VDP_STATUS_INVALID_HANDLE; - context = dev->context->vpipe; - vmixer = CALLOC(1, sizeof(vlVdpVideoMixer)); if (!vmixer) return VDP_STATUS_RESOURCES; vmixer->device = dev; - vmixer->compositor = context->create_compositor(context); + vl_compositor_init(&vmixer->compositor, dev->context->pipe); vl_csc_get_matrix ( @@ -69,11 +69,11 @@ vlVdpVideoMixerCreate(VdpDevice device, VL_CSC_COLOR_STANDARD_IDENTITY : VL_CSC_COLOR_STANDARD_BT_601, NULL, true, csc ); - vmixer->compositor->set_csc_matrix(vmixer->compositor, csc); + vl_compositor_set_csc_matrix(&vmixer->compositor, csc); /* * TODO: Handle features and parameters - * */ + */ *mixer = vlAddDataHTAB(vmixer); if (*mixer == 0) { @@ -82,10 +82,14 @@ vlVdpVideoMixerCreate(VdpDevice device, } return VDP_STATUS_OK; + no_handle: return ret; } +/** + * Destroy a VdpVideoMixer. + */ VdpStatus vlVdpVideoMixerDestroy(VdpVideoMixer mixer) { @@ -97,13 +101,16 @@ vlVdpVideoMixerDestroy(VdpVideoMixer mixer) if (!vmixer) return VDP_STATUS_INVALID_HANDLE; - vmixer->compositor->destroy(vmixer->compositor); + vl_compositor_cleanup(&vmixer->compositor); FREE(vmixer); return VDP_STATUS_OK; } +/** + * Enable or disable features. + */ VdpStatus vlVdpVideoMixerSetFeatureEnables(VdpVideoMixer mixer, uint32_t feature_count, @@ -121,11 +128,14 @@ vlVdpVideoMixerSetFeatureEnables(VdpVideoMixer mixer, /* * TODO: Set features - * */ + */ return VDP_STATUS_OK; } +/** + * Perform a video post-processing and compositing operation. + */ VdpStatus vlVdpVideoMixerRender(VdpVideoMixer mixer, VdpOutputSurface background_surface, VdpRect const *background_source_rect, @@ -142,6 +152,8 @@ VdpStatus vlVdpVideoMixerRender(VdpVideoMixer mixer, uint32_t layer_count, VdpLayer const *layers) { + struct pipe_video_rect src_rect; + vlVdpVideoMixer *vmixer; vlVdpSurface *surf; vlVdpOutputSurface *dst; @@ -158,14 +170,17 @@ VdpStatus vlVdpVideoMixerRender(VdpVideoMixer mixer, if (!dst) return VDP_STATUS_INVALID_HANDLE; - vmixer->compositor->clear_layers(vmixer->compositor); - vmixer->compositor->set_buffer_layer(vmixer->compositor, 0, surf->video_buffer, NULL, NULL); - vmixer->compositor->render_picture(vmixer->compositor, PIPE_MPEG12_PICTURE_TYPE_FRAME, - dst->surface, NULL, NULL); + vl_compositor_clear_layers(&vmixer->compositor); + vl_compositor_set_buffer_layer(&vmixer->compositor, 0, surf->video_buffer, + RectToPipe(video_source_rect, &src_rect), NULL); + vl_compositor_render(&vmixer->compositor, dst->surface, NULL, NULL, false); return VDP_STATUS_OK; } +/** + * Set attribute values. + */ VdpStatus vlVdpVideoMixerSetAttributeValues(VdpVideoMixer mixer, uint32_t attribute_count, @@ -181,12 +196,14 @@ vlVdpVideoMixerSetAttributeValues(VdpVideoMixer mixer, /* * TODO: Implement the function - * - * */ + */ return VDP_STATUS_OK; } +/** + * Retrieve whether features were requested at creation time. + */ VdpStatus vlVdpVideoMixerGetFeatureSupport(VdpVideoMixer mixer, uint32_t feature_count, @@ -196,6 +213,9 @@ vlVdpVideoMixerGetFeatureSupport(VdpVideoMixer mixer, return VDP_STATUS_NO_IMPLEMENTATION; } +/** + * Retrieve whether features are enabled. + */ VdpStatus vlVdpVideoMixerGetFeatureEnables(VdpVideoMixer mixer, uint32_t feature_count, @@ -205,6 +225,9 @@ vlVdpVideoMixerGetFeatureEnables(VdpVideoMixer mixer, return VDP_STATUS_NO_IMPLEMENTATION; } +/** + * Retrieve parameter values given at creation time. + */ VdpStatus vlVdpVideoMixerGetParameterValues(VdpVideoMixer mixer, uint32_t parameter_count, @@ -214,6 +237,9 @@ vlVdpVideoMixerGetParameterValues(VdpVideoMixer mixer, return VDP_STATUS_NO_IMPLEMENTATION; } +/** + * Retrieve current attribute values. + */ VdpStatus vlVdpVideoMixerGetAttributeValues(VdpVideoMixer mixer, uint32_t attribute_count, @@ -223,6 +249,9 @@ vlVdpVideoMixerGetAttributeValues(VdpVideoMixer mixer, return VDP_STATUS_NO_IMPLEMENTATION; } +/** + * Generate a color space conversion matrix. + */ VdpStatus vlVdpGenerateCSCMatrix(VdpProcamp *procamp, VdpColorStandard standard,