1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*
2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *
4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Use of this source code is governed by a BSD-style license
5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  that can be found in the LICENSE file in the root of the source
6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  tree. An additional intellectual property rights grant can be found
7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  in the file PATENTS.  All contributing project authors may
8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */
10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_LINUX_VIDEO_X11_RENDER_H_
12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_LINUX_VIDEO_X11_RENDER_H_
13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
147e5dc8741fbd5f07a709e6fd4d2cd8b08b7cee94pbos@webrtc.org#include "webrtc/modules/video_render/include/video_render_defines.h"
15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <X11/Xlib.h>
17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <map>
18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc {
20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass CriticalSectionWrapper;
21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass VideoX11Channel;
23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass VideoX11Render
25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic:
28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    VideoX11Render(Window window);
29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ~VideoX11Render();
30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
31e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    int32_t Init();
32e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    int32_t ChangeWindow(Window window);
33e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org
34e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    VideoX11Channel* CreateX11RenderChannel(int32_t streamId,
35e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                                            int32_t zOrder,
36e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                                            const float left,
37e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                                            const float top,
38e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                                            const float right,
39e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                                            const float bottom);
40e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org
41e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    int32_t DeleteX11RenderChannel(int32_t streamId);
42e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org
43e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    int32_t GetIncomingStreamProperties(int32_t streamId,
44e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                                        uint32_t& zOrder,
45e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                                        float& left, float& top,
46e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                                        float& right, float& bottom);
47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate:
49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    Window _window;
50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    CriticalSectionWrapper& _critSect;
51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    std::map<int, VideoX11Channel*> _streamIdToX11ChannelMap;
52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
563b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org}  // namespace webrtc
57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_LINUX_VIDEO_X11_RENDER_H_
59