d3dvideosink: avoid duplicated symbols in static links
Rename the DLL entry point the avoid duplicated symbols in static links.
This commit is contained in:
parent
beea4bd161
commit
a55786274d
@ -86,8 +86,7 @@ static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
|
|||||||
GST_STATIC_CAPS ("video/x-raw, "
|
GST_STATIC_CAPS ("video/x-raw, "
|
||||||
"format = (string) { I420, YV12, YUY2, UYVY, BGRx, BGRA, NV12 }, "
|
"format = (string) { I420, YV12, YUY2, UYVY, BGRx, BGRA, NV12 }, "
|
||||||
"framerate = (fraction) [ 0, MAX ], "
|
"framerate = (fraction) [ 0, MAX ], "
|
||||||
"width = (int) [ 1, MAX ], "
|
"width = (int) [ 1, MAX ], " "height = (int) [ 1, MAX ]")
|
||||||
"height = (int) [ 1, MAX ]")
|
|
||||||
);
|
);
|
||||||
|
|
||||||
static void gst_d3dvideosink_navigation_init (GstNavigationInterface * iface);
|
static void gst_d3dvideosink_navigation_init (GstNavigationInterface * iface);
|
||||||
@ -121,7 +120,8 @@ static GstStateChangeReturn gst_d3dvideosink_change_state (GstElement * element,
|
|||||||
static gboolean gst_d3dvideosink_start (GstBaseSink * bsink);
|
static gboolean gst_d3dvideosink_start (GstBaseSink * bsink);
|
||||||
static gboolean gst_d3dvideosink_stop (GstBaseSink * bsink);
|
static gboolean gst_d3dvideosink_stop (GstBaseSink * bsink);
|
||||||
static gboolean gst_d3dvideosink_set_caps (GstBaseSink * bsink, GstCaps * caps);
|
static gboolean gst_d3dvideosink_set_caps (GstBaseSink * bsink, GstCaps * caps);
|
||||||
static GstCaps *gst_d3dvideosink_get_caps (GstBaseSink * bsink, GstCaps * filter);
|
static GstCaps *gst_d3dvideosink_get_caps (GstBaseSink * bsink,
|
||||||
|
GstCaps * filter);
|
||||||
static GstFlowReturn gst_d3dvideosink_show_frame (GstVideoSink * sink,
|
static GstFlowReturn gst_d3dvideosink_show_frame (GstVideoSink * sink,
|
||||||
GstBuffer * buffer);
|
GstBuffer * buffer);
|
||||||
|
|
||||||
@ -157,7 +157,7 @@ static void gst_d3dvideosink_stretch (GstD3DVideoSink * sink,
|
|||||||
LPDIRECT3DSURFACE9 backBuffer);
|
LPDIRECT3DSURFACE9 backBuffer);
|
||||||
|
|
||||||
/* Misc methods */
|
/* Misc methods */
|
||||||
BOOL WINAPI DllMain (HINSTANCE hinstDll, DWORD fdwReason, PVOID fImpLoad);
|
BOOL WINAPI D3dDllMain (HINSTANCE hinstDll, DWORD fdwReason, PVOID fImpLoad);
|
||||||
static void gst_d3dvideosink_remove_window_for_renderer (GstD3DVideoSink *
|
static void gst_d3dvideosink_remove_window_for_renderer (GstD3DVideoSink *
|
||||||
sink);
|
sink);
|
||||||
static gboolean gst_d3dvideosink_initialize_direct3d (GstD3DVideoSink * sink);
|
static gboolean gst_d3dvideosink_initialize_direct3d (GstD3DVideoSink * sink);
|
||||||
@ -198,7 +198,7 @@ static DirectXInitParams directx_init_params = {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
BOOL WINAPI
|
BOOL WINAPI
|
||||||
DllMain (HINSTANCE hinstDll, DWORD fdwReason, PVOID fImpLoad)
|
D3dDllMain (HINSTANCE hinstDll, DWORD fdwReason, PVOID fImpLoad)
|
||||||
{
|
{
|
||||||
switch (fdwReason) {
|
switch (fdwReason) {
|
||||||
case DLL_PROCESS_ATTACH:
|
case DLL_PROCESS_ATTACH:
|
||||||
@ -281,8 +281,8 @@ gst_d3dvideosink_class_init (GstD3DVideoSinkClass * klass)
|
|||||||
gst_element_class_add_pad_template (gstelement_class,
|
gst_element_class_add_pad_template (gstelement_class,
|
||||||
gst_static_pad_template_get (&sink_template));
|
gst_static_pad_template_get (&sink_template));
|
||||||
|
|
||||||
gst_element_class_set_static_metadata (gstelement_class, "Direct3D video sink",
|
gst_element_class_set_static_metadata (gstelement_class,
|
||||||
"Sink/Video",
|
"Direct3D video sink", "Sink/Video",
|
||||||
"Display data using a Direct3D video renderer",
|
"Display data using a Direct3D video renderer",
|
||||||
"David Hoyt <dhoyt@hoytsoft.org>");
|
"David Hoyt <dhoyt@hoytsoft.org>");
|
||||||
|
|
||||||
@ -401,7 +401,7 @@ gst_d3dvideosink_get_property (GObject * object, guint prop_id,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static GstCaps *
|
static GstCaps *
|
||||||
gst_d3dvideosink_get_device_caps (GstBaseSink *basesink, D3DDISPLAYMODE d3ddm)
|
gst_d3dvideosink_get_device_caps (GstBaseSink * basesink, D3DDISPLAYMODE d3ddm)
|
||||||
{
|
{
|
||||||
GstD3DVideoSink *sink = GST_D3DVIDEOSINK (basesink);
|
GstD3DVideoSink *sink = GST_D3DVIDEOSINK (basesink);
|
||||||
gint i;
|
gint i;
|
||||||
@ -409,20 +409,19 @@ gst_d3dvideosink_get_device_caps (GstBaseSink *basesink, D3DDISPLAYMODE d3ddm)
|
|||||||
GstCaps *c;
|
GstCaps *c;
|
||||||
|
|
||||||
caps = gst_caps_new_empty ();
|
caps = gst_caps_new_empty ();
|
||||||
c = gst_caps_normalize (gst_pad_get_pad_template_caps (GST_VIDEO_SINK_PAD (sink)));
|
c = gst_caps_normalize (gst_pad_get_pad_template_caps (GST_VIDEO_SINK_PAD
|
||||||
|
(sink)));
|
||||||
|
|
||||||
for (i = 0; i < gst_caps_get_size (c); i++) {
|
for (i = 0; i < gst_caps_get_size (c); i++) {
|
||||||
GstStructure *stru;
|
GstStructure *stru;
|
||||||
stru = gst_caps_get_structure (c, i);
|
stru = gst_caps_get_structure (c, i);
|
||||||
if (gst_structure_has_name (stru, "video/x-raw"))
|
if (gst_structure_has_name (stru, "video/x-raw")) {
|
||||||
{
|
|
||||||
GstVideoFormat format;
|
GstVideoFormat format;
|
||||||
const gchar *s;
|
const gchar *s;
|
||||||
D3DFORMAT d3dfourcc = 0;
|
D3DFORMAT d3dfourcc = 0;
|
||||||
s = gst_structure_get_string (stru, "format");
|
s = gst_structure_get_string (stru, "format");
|
||||||
format = gst_video_format_from_string (s);
|
format = gst_video_format_from_string (s);
|
||||||
switch (format)
|
switch (format) {
|
||||||
{
|
|
||||||
case GST_VIDEO_FORMAT_YV12:
|
case GST_VIDEO_FORMAT_YV12:
|
||||||
case GST_VIDEO_FORMAT_I420:
|
case GST_VIDEO_FORMAT_I420:
|
||||||
d3dfourcc = (D3DFORMAT) MAKEFOURCC ('Y', 'V', '1', '2');
|
d3dfourcc = (D3DFORMAT) MAKEFOURCC ('Y', 'V', '1', '2');
|
||||||
@ -460,9 +459,8 @@ gst_d3dvideosink_get_device_caps (GstBaseSink *basesink, D3DDISPLAYMODE d3ddm)
|
|||||||
if (d3dfourcc == 0)
|
if (d3dfourcc == 0)
|
||||||
continue;
|
continue;
|
||||||
if (SUCCEEDED (IDirect3D9_CheckDeviceFormat (shared.d3d,
|
if (SUCCEEDED (IDirect3D9_CheckDeviceFormat (shared.d3d,
|
||||||
D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, d3ddm.Format, 0, D3DRTYPE_SURFACE,
|
D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, d3ddm.Format, 0,
|
||||||
d3dfourcc)))
|
D3DRTYPE_SURFACE, d3dfourcc))) {
|
||||||
{
|
|
||||||
/* hw supports this format */
|
/* hw supports this format */
|
||||||
gst_caps_append (caps, gst_caps_copy_nth (c, i));
|
gst_caps_append (caps, gst_caps_copy_nth (c, i));
|
||||||
}
|
}
|
||||||
@ -491,8 +489,7 @@ gst_d3dvideosink_get_caps (GstBaseSink * basesink, GstCaps * filter)
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
caps = gst_pad_get_pad_template_caps (GST_VIDEO_SINK_PAD (sink));
|
caps = gst_pad_get_pad_template_caps (GST_VIDEO_SINK_PAD (sink));
|
||||||
if (filter)
|
if (filter) {
|
||||||
{
|
|
||||||
GstCaps *intersection;
|
GstCaps *intersection;
|
||||||
|
|
||||||
intersection =
|
intersection =
|
||||||
@ -645,7 +642,7 @@ SharedHiddenWndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
shared.device_lost_sink = NULL;
|
shared.device_lost_sink = NULL;
|
||||||
GST_DEBUG ("Initializing Direct3D");
|
GST_DEBUG ("Initializing Direct3D");
|
||||||
if (!gst_d3dvideosink_initialize_d3d_device (sink))
|
if (!gst_d3dvideosink_initialize_d3d_device (sink))
|
||||||
gst_d3dvideosink_notify_device_lost(sink);
|
gst_d3dvideosink_notify_device_lost (sink);
|
||||||
else
|
else
|
||||||
GST_DEBUG ("Direct3D initialization complete");
|
GST_DEBUG ("Direct3D initialization complete");
|
||||||
break;
|
break;
|
||||||
@ -791,7 +788,8 @@ WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
SetWindowLongPtr (hWnd, GWLP_USERDATA, (LONG_PTR) sink);
|
SetWindowLongPtr (hWnd, GWLP_USERDATA, (LONG_PTR) sink);
|
||||||
|
|
||||||
/* signal application we created a window */
|
/* signal application we created a window */
|
||||||
gst_video_overlay_got_window_handle (GST_VIDEO_OVERLAY (sink), (guintptr) hWnd);
|
gst_video_overlay_got_window_handle (GST_VIDEO_OVERLAY (sink),
|
||||||
|
(guintptr) hWnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1065,7 +1063,8 @@ failed:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_d3dvideosink_set_window_handle (GstVideoOverlay * overlay, guintptr window_id)
|
gst_d3dvideosink_set_window_handle (GstVideoOverlay * overlay,
|
||||||
|
guintptr window_id)
|
||||||
{
|
{
|
||||||
GstD3DVideoSink *sink = GST_D3DVIDEOSINK (overlay);
|
GstD3DVideoSink *sink = GST_D3DVIDEOSINK (overlay);
|
||||||
HWND hWnd = (HWND) window_id;
|
HWND hWnd = (HWND) window_id;
|
||||||
@ -1362,17 +1361,17 @@ gst_d3dvideosink_prepare_window (GstD3DVideoSink * sink)
|
|||||||
* and create (and use) our own window, if we didn't create
|
* and create (and use) our own window, if we didn't create
|
||||||
* one before */
|
* one before */
|
||||||
if (sink->window_handle && sink->is_new_window) {
|
if (sink->window_handle && sink->is_new_window) {
|
||||||
GST_D3DVIDEOSINK_D3D_DEVICE_LOCK(sink);
|
GST_D3DVIDEOSINK_D3D_DEVICE_LOCK (sink);
|
||||||
gst_d3dvideosink_release_d3d_device(sink);
|
gst_d3dvideosink_release_d3d_device (sink);
|
||||||
GST_D3DVIDEOSINK_D3D_DEVICE_UNLOCK(sink);
|
GST_D3DVIDEOSINK_D3D_DEVICE_UNLOCK (sink);
|
||||||
} else if (sink->window_handle) {
|
} else if (sink->window_handle) {
|
||||||
gst_d3dvideosink_set_window_for_renderer (sink);
|
gst_d3dvideosink_set_window_for_renderer (sink);
|
||||||
} else {
|
} else {
|
||||||
gst_d3dvideosink_create_default_window (sink);
|
gst_d3dvideosink_create_default_window (sink);
|
||||||
}
|
}
|
||||||
GST_D3DVIDEOSINK_D3D_DEVICE_LOCK(sink);
|
GST_D3DVIDEOSINK_D3D_DEVICE_LOCK (sink);
|
||||||
gst_d3dvideosink_notify_device_init (sink);
|
gst_d3dvideosink_notify_device_init (sink);
|
||||||
GST_D3DVIDEOSINK_D3D_DEVICE_UNLOCK(sink);
|
GST_D3DVIDEOSINK_D3D_DEVICE_UNLOCK (sink);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstStateChangeReturn
|
static GstStateChangeReturn
|
||||||
@ -1438,7 +1437,7 @@ static gboolean
|
|||||||
gst_d3dvideosink_set_caps (GstBaseSink * bsink, GstCaps * caps)
|
gst_d3dvideosink_set_caps (GstBaseSink * bsink, GstCaps * caps)
|
||||||
{
|
{
|
||||||
GstD3DVideoSink *sink;
|
GstD3DVideoSink *sink;
|
||||||
/*GstStructure *structure;*/
|
/*GstStructure *structure; */
|
||||||
GstCaps *sink_caps;
|
GstCaps *sink_caps;
|
||||||
GstVideoInfo info;
|
GstVideoInfo info;
|
||||||
gint video_width, video_height;
|
gint video_width, video_height;
|
||||||
@ -1459,7 +1458,7 @@ gst_d3dvideosink_set_caps (GstBaseSink * bsink, GstCaps * caps)
|
|||||||
if (!gst_video_info_from_caps (&info, caps))
|
if (!gst_video_info_from_caps (&info, caps))
|
||||||
goto invalid_format;
|
goto invalid_format;
|
||||||
|
|
||||||
/*structure = gst_caps_get_structure (caps, 0);*/
|
/*structure = gst_caps_get_structure (caps, 0); */
|
||||||
|
|
||||||
video_width = info.width;
|
video_width = info.width;
|
||||||
video_height = info.height;
|
video_height = info.height;
|
||||||
@ -1654,7 +1653,8 @@ gst_d3dvideosink_show_frame (GstVideoSink * vsink, GstBuffer * buffer)
|
|||||||
case GST_VIDEO_FORMAT_YUY2:
|
case GST_VIDEO_FORMAT_YUY2:
|
||||||
case GST_VIDEO_FORMAT_UYVY:
|
case GST_VIDEO_FORMAT_UYVY:
|
||||||
dststride = lr.Pitch;
|
dststride = lr.Pitch;
|
||||||
srcstride = gst_buffer_get_size (buffer) / GST_VIDEO_SINK_HEIGHT (sink);
|
srcstride =
|
||||||
|
gst_buffer_get_size (buffer) / GST_VIDEO_SINK_HEIGHT (sink);
|
||||||
for (i = 0; i < GST_VIDEO_SINK_HEIGHT (sink); ++i)
|
for (i = 0; i < GST_VIDEO_SINK_HEIGHT (sink); ++i)
|
||||||
memcpy (dest + dststride * i, source + srcstride * i,
|
memcpy (dest + dststride * i, source + srcstride * i,
|
||||||
srcstride);
|
srcstride);
|
||||||
@ -1713,9 +1713,11 @@ gst_d3dvideosink_show_frame (GstVideoSink * vsink, GstBuffer * buffer)
|
|||||||
int component;
|
int component;
|
||||||
dststride = lr.Pitch;
|
dststride = lr.Pitch;
|
||||||
for (component = 0; component < 2; component++) {
|
for (component = 0; component < 2; component++) {
|
||||||
const int compHeight = GST_VIDEO_INFO_COMP_HEIGHT (&sink->info, component);
|
const int compHeight =
|
||||||
guint8 *src = source + GST_VIDEO_INFO_COMP_OFFSET(&sink->info, component);
|
GST_VIDEO_INFO_COMP_HEIGHT (&sink->info, component);
|
||||||
srcstride = GST_VIDEO_INFO_COMP_STRIDE(&sink->info, component);
|
guint8 *src = source + GST_VIDEO_INFO_COMP_OFFSET (&sink->info,
|
||||||
|
component);
|
||||||
|
srcstride = GST_VIDEO_INFO_COMP_STRIDE (&sink->info, component);
|
||||||
for (i = 0; i < compHeight; i++) {
|
for (i = 0; i < compHeight; i++) {
|
||||||
memcpy (dst + dststride * i, src + srcstride * i, srcstride);
|
memcpy (dst + dststride * i, src + srcstride * i, srcstride);
|
||||||
}
|
}
|
||||||
@ -1728,7 +1730,8 @@ gst_d3dvideosink_show_frame (GstVideoSink * vsink, GstBuffer * buffer)
|
|||||||
}
|
}
|
||||||
} else if (GST_VIDEO_INFO_IS_RGB (&sink->info)) {
|
} else if (GST_VIDEO_INFO_IS_RGB (&sink->info)) {
|
||||||
dststride = lr.Pitch;
|
dststride = lr.Pitch;
|
||||||
srcstride = gst_buffer_get_size (buffer) / GST_VIDEO_SINK_HEIGHT (sink);
|
srcstride =
|
||||||
|
gst_buffer_get_size (buffer) / GST_VIDEO_SINK_HEIGHT (sink);
|
||||||
for (i = 0; i < GST_VIDEO_SINK_HEIGHT (sink); ++i)
|
for (i = 0; i < GST_VIDEO_SINK_HEIGHT (sink); ++i)
|
||||||
memcpy (dest + dststride * i, source + srcstride * i, srcstride);
|
memcpy (dest + dststride * i, source + srcstride * i, srcstride);
|
||||||
}
|
}
|
||||||
@ -2122,14 +2125,17 @@ gst_d3dvideosink_initialize_d3d_device (GstD3DVideoSink * sink)
|
|||||||
|
|
||||||
sink->d3ddev = NULL;
|
sink->d3ddev = NULL;
|
||||||
|
|
||||||
hr = IDirect3D9_CreateDevice (shared.d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, d3dcreate, &sink->d3dpp, &sink->d3ddev);
|
hr = IDirect3D9_CreateDevice (shared.d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
|
||||||
if (FAILED (hr))
|
hwnd, d3dcreate, &sink->d3dpp, &sink->d3ddev);
|
||||||
{
|
if (FAILED (hr)) {
|
||||||
GST_WARNING ("Unable to create Direct3D device. Result: %ld (0x%lx)", hr, hr);
|
GST_WARNING ("Unable to create Direct3D device. Result: %ld (0x%lx)", hr,
|
||||||
|
hr);
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
hr = IDirect3DDevice9_CreateOffscreenPlainSurface (sink->d3ddev, GST_VIDEO_SINK_WIDTH (sink), GST_VIDEO_SINK_HEIGHT (sink), d3dfourcc, D3DPOOL_DEFAULT, &sink->d3d_offscreen_surface, NULL);
|
hr = IDirect3DDevice9_CreateOffscreenPlainSurface (sink->d3ddev,
|
||||||
|
GST_VIDEO_SINK_WIDTH (sink), GST_VIDEO_SINK_HEIGHT (sink), d3dfourcc,
|
||||||
|
D3DPOOL_DEFAULT, &sink->d3d_offscreen_surface, NULL);
|
||||||
if (FAILED (hr)) {
|
if (FAILED (hr)) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user