pass d3dvideosink a window id

jacob s jacobhameiri at gmail.com
Wed Jun 26 07:12:45 PDT 2013


I forgot to name the d3dvideosink.
fixed to:
pipeline = gst_parse_launch ("videotestsrc ! videoconvert ! d3dvideosink
name=thed3dvideosink",NULL);
d3dvideosink_element =
gst_bin_get_by_name((GstBin*)pipeline,"thed3dvideosink");

now it doesn't show a window at all ( also no error reported )


2013/6/26 jacob s <jacobhameiri at gmail.com>

> Thanks,
>
> Tried this code, but it still opens the default windows:
>
> #include <gst/gst.h>
> #include <gst/video/videooverlay.h>
> #include "windows.h"
>
> LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
> {
>     switch(msg)
>     {
>         case WM_CLOSE:
>             DestroyWindow(hwnd);
>         break;
>         case WM_DESTROY:
>             PostQuitMessage(0);
>         break;
>         default:
>             return DefWindowProc(hwnd, msg, wParam, lParam);
>     }
>     return 0;
> }
>
>
> int main(int argc, char *argv[]) {
>   GstElement *pipeline;
>   GstBus *bus;
>   GstMessage *msg;
>   GstElement* d3dvideosink_element;
>   HWND video_window;
>   WNDCLASS WndClass;
>   DWORD err = 0 ;
>    WNDCLASSEX wc;
>
>   /* Initialize GStreamer */
>   gst_init (&argc, &argv);
>
>   /* Build the pipeline */
>   pipeline = gst_parse_launch ("videotestsrc ! videoconvert !
> d3dvideosink",NULL);
>   d3dvideosink_element =
> gst_bin_get_by_name((GstBin*)pipeline,"d3dvideosink");
>
>
>     wc.cbSize        = sizeof(WNDCLASSEX);
>     wc.style         = 0;
>     wc.lpfnWndProc   = WndProc;
>     wc.cbClsExtra    = 0;
>     wc.cbWndExtra    = 0;
>     wc.hInstance     = GetModuleHandle(NULL);
>     wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
>     wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
>     wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
>     wc.lpszMenuName  = NULL;
>     wc.lpszClassName =  L"myWindowClass";
>     wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
>
>     if(!RegisterClassEx(&wc))
>     {
>         MessageBox(NULL, L"Window Registration Failed!", L"Error!",
>             MB_ICONEXCLAMATION | MB_OK);
>         return 0;
>     }
>
>
>    video_window = CreateWindowEx(
>         WS_EX_CLIENTEDGE,
>          L"myWindowClass",
>         L"The title of my window",
>         WS_OVERLAPPEDWINDOW,
>         CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
>         NULL, NULL, GetModuleHandle(NULL), NULL);
>
>
>   err = GetLastError();
>
>
> gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(d3dvideosink_element),(guintptr)video_window);
>
>   /* Start playing */
>   gst_element_set_state(pipeline, GST_STATE_PLAYING);
>
>   /* Wait until error or EOS */
>   bus = gst_element_get_bus (pipeline);
>   msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE,
> GST_MESSAGE_EOS);
>
>   /* Free resources */
>   if (msg != NULL)
>     gst_message_unref (msg);
>   gst_object_unref (bus);
>   gst_element_set_state (pipeline, GST_STATE_NULL);
>   gst_object_unref (pipeline);
>
>   return 0;
> }
>
>
>
>
> 2013/6/26 Sebastian Dröge <slomo at circular-chaos.org>
>
>> On Mi, 2013-06-26 at 12:06 +0300, jacob s wrote:
>> > Hi,
>> >
>> >
>> > Is it possible to pass d3dvideosink a windows id ? how ?
>> >
>> > if not what sink should I use to show my own custom window ( version
>> > 1.0 on windows )  and how ?
>>
>> You can use gst_video_overlay_set_window_handle() on the sink, the same
>> way you do it on other platforms. Alternative you can also set it on
>> playbin and it will propagate that value to the sink.
>>
>>
>> _______________________________________________
>> gstreamer-devel mailing list
>> gstreamer-devel at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20130626/ca575c73/attachment.html>


More information about the gstreamer-devel mailing list