| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/renderer/media/webmediaplayer_impl.h" | 5 #include "content/renderer/media/webmediaplayer_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 619 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 630 base::AutoLock auto_lock(lock_); | 630 base::AutoLock auto_lock(lock_); |
| 631 video_frame = current_frame_; | 631 video_frame = current_frame_; |
| 632 } | 632 } |
| 633 | 633 |
| 634 TRACE_EVENT0("media", "WebMediaPlayerImpl:copyVideoTextureToPlatformTexture"); | 634 TRACE_EVENT0("media", "WebMediaPlayerImpl:copyVideoTextureToPlatformTexture"); |
| 635 | 635 |
| 636 if (!video_frame) | 636 if (!video_frame) |
| 637 return false; | 637 return false; |
| 638 if (video_frame->format() != media::VideoFrame::NATIVE_TEXTURE) | 638 if (video_frame->format() != media::VideoFrame::NATIVE_TEXTURE) |
| 639 return false; | 639 return false; |
| 640 if (video_frame->texture_target() != GL_TEXTURE_2D) | 640 |
| 641 gpu::MailboxHolder* mailbox_holder = video_frame->mailbox_holder(); |
| 642 if (mailbox_holder->texture_target != GL_TEXTURE_2D) |
| 641 return false; | 643 return false; |
| 642 | 644 |
| 643 // Since this method changes which texture is bound to the TEXTURE_2D target, | 645 // Since this method changes which texture is bound to the TEXTURE_2D target, |
| 644 // ideally it would restore the currently-bound texture before returning. | 646 // ideally it would restore the currently-bound texture before returning. |
| 645 // The cost of getIntegerv is sufficiently high, however, that we want to | 647 // The cost of getIntegerv is sufficiently high, however, that we want to |
| 646 // avoid it in user builds. As a result assume (below) that |texture| is | 648 // avoid it in user builds. As a result assume (below) that |texture| is |
| 647 // bound when this method is called, and only verify this fact when | 649 // bound when this method is called, and only verify this fact when |
| 648 // DCHECK_IS_ON. | 650 // DCHECK_IS_ON. |
| 649 if (DCHECK_IS_ON()) { | 651 if (DCHECK_IS_ON()) { |
| 650 GLint bound_texture = 0; | 652 GLint bound_texture = 0; |
| 651 web_graphics_context->getIntegerv(GL_TEXTURE_BINDING_2D, &bound_texture); | 653 web_graphics_context->getIntegerv(GL_TEXTURE_BINDING_2D, &bound_texture); |
| 652 DCHECK_EQ(static_cast<GLuint>(bound_texture), texture); | 654 DCHECK_EQ(static_cast<GLuint>(bound_texture), texture); |
| 653 } | 655 } |
| 654 | 656 |
| 655 media::VideoFrame::MailboxHolder* mailbox_holder = | |
| 656 video_frame->texture_mailbox(); | |
| 657 | |
| 658 uint32 source_texture = web_graphics_context->createTexture(); | 657 uint32 source_texture = web_graphics_context->createTexture(); |
| 659 | 658 |
| 660 web_graphics_context->waitSyncPoint(mailbox_holder->sync_point()); | 659 web_graphics_context->waitSyncPoint(mailbox_holder->sync_point); |
| 661 web_graphics_context->bindTexture(GL_TEXTURE_2D, source_texture); | 660 web_graphics_context->bindTexture(GL_TEXTURE_2D, source_texture); |
| 662 web_graphics_context->consumeTextureCHROMIUM(GL_TEXTURE_2D, | 661 web_graphics_context->consumeTextureCHROMIUM(GL_TEXTURE_2D, |
| 663 mailbox_holder->mailbox().name); | 662 mailbox_holder->mailbox.name); |
| 664 | 663 |
| 665 // The video is stored in a unmultiplied format, so premultiply | 664 // The video is stored in a unmultiplied format, so premultiply |
| 666 // if necessary. | 665 // if necessary. |
| 667 web_graphics_context->pixelStorei(GL_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM, | 666 web_graphics_context->pixelStorei(GL_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM, |
| 668 premultiply_alpha); | 667 premultiply_alpha); |
| 669 // Application itself needs to take care of setting the right flip_y | 668 // Application itself needs to take care of setting the right flip_y |
| 670 // value down to get the expected result. | 669 // value down to get the expected result. |
| 671 // flip_y==true means to reverse the video orientation while | 670 // flip_y==true means to reverse the video orientation while |
| 672 // flip_y==false means to keep the intrinsic orientation. | 671 // flip_y==false means to keep the intrinsic orientation. |
| 673 web_graphics_context->pixelStorei(GL_UNPACK_FLIP_Y_CHROMIUM, flip_y); | 672 web_graphics_context->pixelStorei(GL_UNPACK_FLIP_Y_CHROMIUM, flip_y); |
| (...skipping 648 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1322 // The |current_frame_| wasn't painted, it is being replaced, and we haven't | 1321 // The |current_frame_| wasn't painted, it is being replaced, and we haven't |
| 1323 // even gotten the chance to request a repaint for it yet. Mark it as dropped. | 1322 // even gotten the chance to request a repaint for it yet. Mark it as dropped. |
| 1324 TRACE_EVENT0("media", "WebMediaPlayerImpl:frameDropped"); | 1323 TRACE_EVENT0("media", "WebMediaPlayerImpl:frameDropped"); |
| 1325 DVLOG(1) << "Frame dropped before being painted: " | 1324 DVLOG(1) << "Frame dropped before being painted: " |
| 1326 << current_frame_->GetTimestamp().InSecondsF(); | 1325 << current_frame_->GetTimestamp().InSecondsF(); |
| 1327 if (frames_dropped_before_paint_ < kuint32max) | 1326 if (frames_dropped_before_paint_ < kuint32max) |
| 1328 frames_dropped_before_paint_++; | 1327 frames_dropped_before_paint_++; |
| 1329 } | 1328 } |
| 1330 | 1329 |
| 1331 } // namespace content | 1330 } // namespace content |
| OLD | NEW |