| Index: webrtc/media/devices/gdivideorenderer.cc
|
| diff --git a/webrtc/media/devices/gdivideorenderer.cc b/webrtc/media/devices/gdivideorenderer.cc
|
| index 78cba3ff26862a4b8cf63aa20eccc062947a06dd..f9472e5a6ed1399739a916558baf50039ec7cc39 100644
|
| --- a/webrtc/media/devices/gdivideorenderer.cc
|
| +++ b/webrtc/media/devices/gdivideorenderer.cc
|
| @@ -30,25 +30,27 @@ class GdiVideoRenderer::VideoWindow : public rtc::Win32Window {
|
| VideoWindow(int x, int y, int width, int height);
|
| virtual ~VideoWindow();
|
|
|
| - // Called when the video size changes. If it is called the first time, we
|
| - // create and start the thread. Otherwise, we send kSetSizeMsg to the thread.
|
| - // Context: non-worker thread.
|
| - bool SetSize(int width, int height);
|
| -
|
| // Called when a new frame is available. Upon this call, we send
|
| // kRenderFrameMsg to the window thread. Context: non-worker thread. It may be
|
| // better to pass RGB bytes to VideoWindow. However, we pass VideoFrame to put
|
| // all the thread synchronization within VideoWindow.
|
| - bool RenderFrame(const VideoFrame* frame);
|
| + void OnFrame(const VideoFrame& frame);
|
|
|
| protected:
|
| // Override virtual method of rtc::Win32Window. Context: worker Thread.
|
| - virtual bool OnMessage(UINT uMsg, WPARAM wParam, LPARAM lParam,
|
| - LRESULT& result);
|
| + bool OnMessage(UINT uMsg,
|
| + WPARAM wParam,
|
| + LPARAM lParam,
|
| + LRESULT& result) override;
|
|
|
| private:
|
| enum { kSetSizeMsg = WM_USER, kRenderFrameMsg};
|
|
|
| + // Called when the video size changes. If it is called the first time, we
|
| + // create and start the thread. Otherwise, we send kSetSizeMsg to the thread.
|
| + // Context: non-worker thread.
|
| + bool SetSize(int width, int height);
|
| +
|
| class WindowThread : public rtc::Thread {
|
| public:
|
| explicit WindowThread(VideoWindow* window) : window_(window) {}
|
| @@ -128,20 +130,17 @@ bool GdiVideoRenderer::VideoWindow::SetSize(int width, int height) {
|
| return true;
|
| }
|
|
|
| -bool GdiVideoRenderer::VideoWindow::RenderFrame(const VideoFrame* video_frame) {
|
| +void GdiVideoRenderer::VideoWindow::OnFrame(const VideoFrame& video_frame) {
|
| if (!handle()) {
|
| - return false;
|
| + return;
|
| }
|
|
|
| - const VideoFrame* frame = video_frame->GetCopyWithRotationApplied();
|
| + const VideoFrame* frame = video_frame.GetCopyWithRotationApplied();
|
|
|
| - if (!SetSize(static_cast<int>(frame->GetWidth()),
|
| - static_cast<int>(frame->GetHeight()))) {
|
| - return false;
|
| + if (SetSize(static_cast<int>(frame->GetWidth()),
|
| + static_cast<int>(frame->GetHeight()))) {
|
| + SendMessage(handle(), kRenderFrameMsg, reinterpret_cast<WPARAM>(frame), 0);
|
| }
|
| -
|
| - SendMessage(handle(), kRenderFrameMsg, reinterpret_cast<WPARAM>(frame), 0);
|
| - return true;
|
| }
|
|
|
| bool GdiVideoRenderer::VideoWindow::OnMessage(UINT uMsg, WPARAM wParam,
|
| @@ -243,18 +242,13 @@ GdiVideoRenderer::GdiVideoRenderer(int x, int y)
|
| }
|
| GdiVideoRenderer::~GdiVideoRenderer() {}
|
|
|
| -bool GdiVideoRenderer::SetSize(int width, int height, int reserved) {
|
| - if (!window_.get()) { // Create the window for the first frame
|
| - window_.reset(new VideoWindow(initial_x_, initial_y_, width, height));
|
| - }
|
| - return window_->SetSize(width, height);
|
| -}
|
| -
|
| -bool GdiVideoRenderer::RenderFrame(const VideoFrame* frame) {
|
| - if (!frame || !window_.get()) {
|
| - return false;
|
| +void GdiVideoRenderer::OnFrame(const VideoFrame& frame) {
|
| + if (!window_.get()) { // Create the window for the first frame
|
| + window_.reset(new VideoWindow(initial_x_, initial_y_,
|
| + static_cast<int>(frame.GetWidth()),
|
| + static_cast<int>(frame.GetHeight())));
|
| }
|
| - return window_->RenderFrame(frame);
|
| + window_->OnFrame(frame);
|
| }
|
|
|
| } // namespace cricket
|
|
|