| // Copyright 2015 Google Inc. All Rights Reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| #ifndef STARBOARD_SHARED_X11_WINDOW_INTERNAL_H_ |
| #define STARBOARD_SHARED_X11_WINDOW_INTERNAL_H_ |
| |
| #include <X11/extensions/Xrender.h> |
| #include <X11/Xlib.h> |
| |
| #include "starboard/configuration.h" |
| #include "starboard/shared/internal_only.h" |
| #include "starboard/shared/starboard/player/video_frame_internal.h" |
| #include "starboard/window.h" |
| |
| struct SbWindowPrivate { |
| SbWindowPrivate(Display* display, const SbWindowOptions* options); |
| ~SbWindowPrivate(); |
| |
| Window window; |
| |
| typedef ::starboard::shared::starboard::player::VideoFrame VideoFrame; |
| |
| // The following functions composite graphics and the given video frame video |
| // for this window. In kSbPlayerOutputModePunchOut mode, this is the only way |
| // any graphics or video is presented in the window. The video frame will be |
| // rendered according to boundaries specified by the parameters. |
| // CompositeVideoFrame() can be called multiple times in between |
| // BeginComposite() and EndComposite() to display frames from multiple videos. |
| void BeginComposite(); |
| void CompositeVideoFrame(int bounds_x, |
| int bounds_y, |
| int bounds_width, |
| int bounds_height, |
| const starboard::scoped_refptr<VideoFrame>& frame); |
| void EndComposite(); |
| |
| // The cached XRender Picture that represents the window that is the |
| // destination of the composition. |
| Picture window_picture; |
| |
| // This pixmap is used to composite video and graphics before rendering onto |
| // the actual window. This is necessary to avoid horrible flickering. |
| Pixmap composition_pixmap; |
| |
| // A cached XRender Picture wrapper for |composition_pixmap|. |
| Picture composition_picture; |
| |
| // This pixmap is used to load the video frame before stretching it onto the |
| // |composition_pixmap|. This is done so that we can stretch it with XRender. |
| Pixmap video_pixmap; |
| |
| // The width of the |video_pixmap|. |
| int video_pixmap_width; |
| |
| // The height of the allocated |video_pixmap|. |
| int video_pixmap_height; |
| |
| // A cached GC for the |video_pixmap| to upload the frame. |
| GC video_pixmap_gc; |
| |
| // A cached XRender Picture wrapper for |video_pixmap|. |
| Picture video_picture; |
| |
| // This mapped, but invisible window is bound to EGL and used to get the GL |
| // graphics output into an XRender Picture that can be manually composited |
| // with video. |
| Window gl_window; |
| |
| // A cached XRender Picture wrapper for |gl_window|. |
| Picture gl_picture; |
| |
| // The display that this window was created from. |
| Display* display; |
| |
| // The width of this window. |
| int width; |
| |
| // The height of this window. |
| int height; |
| }; |
| |
| #endif // STARBOARD_SHARED_X11_WINDOW_INTERNAL_H_ |