* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
**************************************************************************/
-
- #include <vdpau/vdpau.h>
- #include <util/u_memory.h>
- #include <util/u_debug.h>
- #include "vdpau_private.h"
-
-
- VdpStatus
- vlVdpVideoMixerCreate (VdpDevice device,
- uint32_t feature_count,
- VdpVideoMixerFeature const *features,
- uint32_t parameter_count,
- VdpVideoMixerParameter const *parameters,
- void const *const *parameter_values,
- VdpVideoMixer *mixer)
+
+#include <vdpau/vdpau.h>
+#include <util/u_memory.h>
+#include <util/u_debug.h>
+#include "vdpau_private.h"
+
+VdpStatus
+vlVdpVideoMixerCreate(VdpDevice device,
+ uint32_t feature_count,
+ VdpVideoMixerFeature const *features,
+ uint32_t parameter_count,
+ VdpVideoMixerParameter const *parameters,
+ void const *const *parameter_values,
+ VdpVideoMixer *mixer)
{
- VdpStatus ret;
- vlVdpVideoMixer *vmixer = NULL;
-
- debug_printf("[VDPAU] Creating VideoMixer\n");
-
- vlVdpDevice *dev = vlGetDataHTAB(device);
- if (!dev)
+ vlVdpVideoMixer *vmixer = NULL;
+ struct pipe_video_context *context;
+ VdpStatus ret;
+
+ debug_printf("[VDPAU] Creating VideoMixer\n");
+
+ vlVdpDevice *dev = vlGetDataHTAB(device);
+ if (!dev)
return VDP_STATUS_INVALID_HANDLE;
-
- vmixer = CALLOC(1, sizeof(vlVdpVideoMixer));
- if (!vmixer)
+
+ context = dev->context->vpipe;
+
+ vmixer = CALLOC(1, sizeof(vlVdpVideoMixer));
+ if (!vmixer)
return VDP_STATUS_RESOURCES;
-
- vmixer->device = dev;
- /*
- * TODO: Handle features and parameters
- * */
-
- *mixer = vlAddDataHTAB(vmixer);
- if (*mixer == 0) {
+
+ vmixer->device = dev;
+ vmixer->compositor = context->create_compositor(context);
+
+ /*
+ * TODO: Handle features and parameters
+ * */
+
+ *mixer = vlAddDataHTAB(vmixer);
+ if (*mixer == 0) {
ret = VDP_STATUS_ERROR;
goto no_handle;
- }
-
-
+ }
+
return VDP_STATUS_OK;
- no_handle:
+no_handle:
return ret;
}
VdpStatus
-vlVdpVideoMixerSetFeatureEnables (
- VdpVideoMixer mixer,
- uint32_t feature_count,
- VdpVideoMixerFeature const *features,
- VdpBool const *feature_enables)
+vlVdpVideoMixerSetFeatureEnables(VdpVideoMixer mixer,
+ uint32_t feature_count,
+ VdpVideoMixerFeature const *features,
+ VdpBool const *feature_enables)
{
- debug_printf("[VDPAU] Setting VideoMixer features\n");
-
- if (!(features && feature_enables))
- return VDP_STATUS_INVALID_POINTER;
-
- vlVdpVideoMixer *vmixer = vlGetDataHTAB(mixer);
- if (!vmixer)
- return VDP_STATUS_INVALID_HANDLE;
-
- /*
- * TODO: Set features
- * */
-
-
- return VDP_STATUS_OK;
+ debug_printf("[VDPAU] Setting VideoMixer features\n");
+
+ if (!(features && feature_enables))
+ return VDP_STATUS_INVALID_POINTER;
+
+ vlVdpVideoMixer *vmixer = vlGetDataHTAB(mixer);
+ if (!vmixer)
+ return VDP_STATUS_INVALID_HANDLE;
+
+ /*
+ * TODO: Set features
+ * */
+
+ return VDP_STATUS_OK;
}
-VdpStatus vlVdpVideoMixerRender (
- VdpVideoMixer mixer,
- VdpOutputSurface background_surface,
- VdpRect const *background_source_rect,
- VdpVideoMixerPictureStructure current_picture_structure,
- uint32_t video_surface_past_count,
- VdpVideoSurface const *video_surface_past,
- VdpVideoSurface video_surface_current,
- uint32_t video_surface_future_count,
- VdpVideoSurface const *video_surface_future,
- VdpRect const *video_source_rect,
- VdpOutputSurface destination_surface,
- VdpRect const *destination_rect,
- VdpRect const *destination_video_rect,
- uint32_t layer_count,
- VdpLayer const *layers)
+VdpStatus vlVdpVideoMixerRender(VdpVideoMixer mixer,
+ VdpOutputSurface background_surface,
+ VdpRect const *background_source_rect,
+ VdpVideoMixerPictureStructure current_picture_structure,
+ uint32_t video_surface_past_count,
+ VdpVideoSurface const *video_surface_past,
+ VdpVideoSurface video_surface_current,
+ uint32_t video_surface_future_count,
+ VdpVideoSurface const *video_surface_future,
+ VdpRect const *video_source_rect,
+ VdpOutputSurface destination_surface,
+ VdpRect const *destination_rect,
+ VdpRect const *destination_video_rect,
+ uint32_t layer_count,
+ VdpLayer const *layers)
{
- if (!(background_source_rect && video_surface_past && video_surface_future && video_source_rect && destination_rect && destination_video_rect && layers))
- return VDP_STATUS_INVALID_POINTER;
+ vlVdpVideoMixer *vmixer;
+ vlVdpSurface *surf;
+ vlVdpOutputSurface *dst;
+
+ vmixer = vlGetDataHTAB(mixer);
+ if (!vmixer)
+ return VDP_STATUS_INVALID_HANDLE;
+
+ surf = vlGetDataHTAB(video_surface_current);
+ if (!surf)
+ return VDP_STATUS_INVALID_HANDLE;
+
+ dst = vlGetDataHTAB(destination_surface);
+ 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);
- return VDP_STATUS_NO_IMPLEMENTATION;
+ return VDP_STATUS_OK;
}
VdpStatus
-vlVdpVideoMixerSetAttributeValues (
- VdpVideoMixer mixer,
- uint32_t attribute_count,
- VdpVideoMixerAttribute const *attributes,
- void const *const *attribute_values)
+vlVdpVideoMixerSetAttributeValues(VdpVideoMixer mixer,
+ uint32_t attribute_count,
+ VdpVideoMixerAttribute const *attributes,
+ void const *const *attribute_values)
{
- if (!(attributes && attribute_values))
- return VDP_STATUS_INVALID_POINTER;
-
- vlVdpVideoMixer *vmixer = vlGetDataHTAB(mixer);
- if (!vmixer)
- return VDP_STATUS_INVALID_HANDLE;
-
- /*
- * TODO: Implement the function
- *
- * */
-
- return VDP_STATUS_OK;
-}
\ No newline at end of file
+ if (!(attributes && attribute_values))
+ return VDP_STATUS_INVALID_POINTER;
+
+ vlVdpVideoMixer *vmixer = vlGetDataHTAB(mixer);
+ if (!vmixer)
+ return VDP_STATUS_INVALID_HANDLE;
+
+ /*
+ * TODO: Implement the function
+ *
+ * */
+
+ return VDP_STATUS_OK;
+}