vdpau: implement and cleanup PresentationQueueTarget destruction

This commit is contained in:
Christian König
2011-04-25 11:39:41 +02:00
parent 7cde6722b0
commit 5aa2641243
4 changed files with 39 additions and 10 deletions
+25 -4
View File
@@ -27,9 +27,12 @@
#include <pipe/p_compiler.h>
#include <pipe/p_video_context.h>
#include <vl_winsys.h>
#include <util/u_memory.h>
#include <util/u_debug.h>
#include <vl_winsys.h>
#include "vdpau_private.h"
PUBLIC VdpStatus
@@ -94,8 +97,8 @@ PUBLIC VdpStatus
vlVdpPresentationQueueTargetCreateX11(VdpDevice device, Drawable drawable,
VdpPresentationQueueTarget *target)
{
VdpStatus ret;
vlVdpPresentationQueueTarget *pqt = NULL;
vlVdpPresentationQueueTarget *pqt;
VdpStatus ret;
debug_printf("[VDPAU] Creating PresentationQueueTarget\n");
@@ -122,10 +125,27 @@ vlVdpPresentationQueueTargetCreateX11(VdpDevice device, Drawable drawable,
return VDP_STATUS_OK;
no_handle:
FREE(dev);
FREE(pqt);
return ret;
}
VdpStatus
vlVdpPresentationQueueTargetDestroy(VdpPresentationQueueTarget presentation_queue_target)
{
vlVdpPresentationQueueTarget *pqt;
debug_printf("[VDPAU] Destroying PresentationQueueTarget\n");
pqt = vlGetDataHTAB(presentation_queue_target);
if (!pqt)
return VDP_STATUS_INVALID_HANDLE;
vlRemoveDataHTAB(presentation_queue_target);
FREE(pqt);
return VDP_STATUS_OK;
}
VdpStatus
vlVdpDeviceDestroy(VdpDevice device)
{
@@ -134,6 +154,7 @@ vlVdpDeviceDestroy(VdpDevice device)
vlVdpDevice *dev = vlGetDataHTAB(device);
if (!dev)
return VDP_STATUS_INVALID_HANDLE;
FREE(dev);
vlDestroyHTAB();
+10
View File
@@ -92,3 +92,13 @@ void* vlGetDataHTAB(vlHandle handle)
return (void*)handle;
#endif
}
void vlRemoveDataHTAB(vlHandle handle)
{
#ifdef VL_HANDLES
pipe_mutex_lock(htab_lock);
if (htab)
handle_table_remove(htab, handle);
pipe_mutex_unlock(htab_lock);
#endif
}
@@ -27,16 +27,12 @@
#include <stdio.h>
#include "vdpau_private.h"
#include <vdpau/vdpau.h>
#include <util/u_debug.h>
#include <util/u_memory.h>
VdpStatus
vlVdpPresentationQueueTargetDestroy(VdpPresentationQueueTarget presentation_queue_target)
{
return VDP_STATUS_NO_IMPLEMENTATION;
}
#include "vdpau_private.h"
VdpStatus
vlVdpPresentationQueueCreate(VdpDevice device,
@@ -222,6 +222,8 @@ boolean vlCreateHTAB(void);
void vlDestroyHTAB(void);
vlHandle vlAddDataHTAB(void *data);
void* vlGetDataHTAB(vlHandle handle);
void vlRemoveDataHTAB(vlHandle handle);
boolean vlGetFuncFTAB(VdpFuncId function_id, void **func);
/* Public functions */