#include <vdpau/vdpau.h>
-#include <util/u_memory.h>
-#include <util/u_debug.h>
+#include "util/u_memory.h"
+#include "util/u_debug.h"
-#include <vl/vl_csc.h>
+#include "vl/vl_csc.h"
#include "vdpau_private.h"
+/**
+ * Create a VdpVideoMixer.
+ */
VdpStatus
vlVdpVideoMixerCreate(VdpDevice device,
uint32_t feature_count,
/*
* TODO: Handle features and parameters
- * */
+ */
*mixer = vlAddDataHTAB(vmixer);
if (*mixer == 0) {
}
return VDP_STATUS_OK;
+
no_handle:
return ret;
}
+/**
+ * Destroy a VdpVideoMixer.
+ */
VdpStatus
vlVdpVideoMixerDestroy(VdpVideoMixer mixer)
{
return VDP_STATUS_OK;
}
+/**
+ * Enable or disable features.
+ */
VdpStatus
vlVdpVideoMixerSetFeatureEnables(VdpVideoMixer mixer,
uint32_t feature_count,
/*
* 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,
uint32_t layer_count,
VdpLayer const *layers)
{
+ struct pipe_video_rect src_rect;
+
vlVdpVideoMixer *vmixer;
vlVdpSurface *surf;
vlVdpOutputSurface *dst;
return VDP_STATUS_INVALID_HANDLE;
vl_compositor_clear_layers(&vmixer->compositor);
- vl_compositor_set_buffer_layer(&vmixer->compositor, 0, surf->video_buffer, NULL, NULL);
- vl_compositor_render(&vmixer->compositor, dst->surface, NULL, NULL);
+ 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,
/*
* TODO: Implement the function
- *
- * */
+ */
return VDP_STATUS_OK;
}
+/**
+ * Retrieve whether features were requested at creation time.
+ */
VdpStatus
vlVdpVideoMixerGetFeatureSupport(VdpVideoMixer mixer,
uint32_t feature_count,
return VDP_STATUS_NO_IMPLEMENTATION;
}
+/**
+ * Retrieve whether features are enabled.
+ */
VdpStatus
vlVdpVideoMixerGetFeatureEnables(VdpVideoMixer mixer,
uint32_t feature_count,
return VDP_STATUS_NO_IMPLEMENTATION;
}
+/**
+ * Retrieve parameter values given at creation time.
+ */
VdpStatus
vlVdpVideoMixerGetParameterValues(VdpVideoMixer mixer,
uint32_t parameter_count,
return VDP_STATUS_NO_IMPLEMENTATION;
}
+/**
+ * Retrieve current attribute values.
+ */
VdpStatus
vlVdpVideoMixerGetAttributeValues(VdpVideoMixer mixer,
uint32_t attribute_count,
return VDP_STATUS_NO_IMPLEMENTATION;
}
+/**
+ * Generate a color space conversion matrix.
+ */
VdpStatus
vlVdpGenerateCSCMatrix(VdpProcamp *procamp,
VdpColorStandard standard,
VdpCSCMatrix *csc_matrix)
{
- VDPAU_MSG(VDPAU_TRACE, "[VDPAU] Generating CSCMatrix\n");
+ float matrix[16];
+ enum VL_CSC_COLOR_STANDARD vl_std;
+ struct vl_procamp camp;
+
if (!(csc_matrix && procamp))
return VDP_STATUS_INVALID_POINTER;
+ if (procamp->struct_version > VDP_PROCAMP_VERSION)
+ return VDP_STATUS_INVALID_STRUCT_VERSION;
+
+ switch (standard) {
+ case VDP_COLOR_STANDARD_ITUR_BT_601: vl_std = VL_CSC_COLOR_STANDARD_BT_601; break;
+ case VDP_COLOR_STANDARD_ITUR_BT_709: vl_std = VL_CSC_COLOR_STANDARD_BT_709; break;
+ case VDP_COLOR_STANDARD_SMPTE_240M: vl_std = VL_CSC_COLOR_STANDARD_SMPTE_240M; break;
+ default: return VDP_STATUS_INVALID_COLOR_STANDARD;
+ }
+ camp.brightness = procamp->brightness;
+ camp.contrast = procamp->contrast;
+ camp.saturation = procamp->saturation;
+ camp.hue = procamp->hue;
+ vl_csc_get_matrix(vl_std, &camp, 1, matrix);
+ memcpy(csc_matrix, matrix, sizeof(float)*12);
return VDP_STATUS_OK;
}