diff options
author | perkj@chromium.org <perkj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-14 12:25:48 +0000 |
---|---|---|
committer | perkj@chromium.org <perkj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-14 12:25:48 +0000 |
commit | d869cf2c8da8b6ffbdcc78b16659a641a6581cba (patch) | |
tree | 4dfd646784b734c8d4d6dd3ccda15f5edead118d /content/renderer/media | |
parent | f1c8312aad8aebd7382d9e00a46343bed43e41ea (diff) | |
download | chromium_src-d869cf2c8da8b6ffbdcc78b16659a641a6581cba.zip chromium_src-d869cf2c8da8b6ffbdcc78b16659a641a6581cba.tar.gz chromium_src-d869cf2c8da8b6ffbdcc78b16659a641a6581cba.tar.bz2 |
MediaStreamVideoSource: don't crop NATIVE_TEXTURE-backed frames.
The use of VideoFrame::WrapVideoFrame() is not supported for NATIVE_TEXTURES, The problem is tracked in crbug/362521
Also:
- use Rect::ClampToCenteredSize() instead of reinventing the wheel.
BUG=362007,362521
Review URL: https://codereview.chromium.org/233733006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@263614 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/renderer/media')
-rw-r--r-- | content/renderer/media/media_stream_video_source.cc | 31 |
1 files changed, 12 insertions, 19 deletions
diff --git a/content/renderer/media/media_stream_video_source.cc b/content/renderer/media/media_stream_video_source.cc index 31448b4..28d47d2 100644 --- a/content/renderer/media/media_stream_video_source.cc +++ b/content/renderer/media/media_stream_video_source.cc @@ -291,7 +291,7 @@ MediaStreamVideoSource* MediaStreamVideoSource::GetVideoSource( return static_cast<MediaStreamVideoSource*>(source.extraData()); } -//static +// static bool MediaStreamVideoSource::IsConstraintSupported(const std::string& name) { for (size_t i = 0; i < arraysize(kSupportedConstraints); ++i) { if (kSupportedConstraints[i] == name) @@ -395,26 +395,20 @@ void MediaStreamVideoSource::DeliverVideoFrame( if (frame->visible_rect().size().width() > max_frame_output_size_.width() || frame->visible_rect().size().height() > max_frame_output_size_.height()) { - // If |frame| is not the size that is expected, we need to crop it by // providing a new |visible_rect|. The new visible rect must be within the // original |visible_rect|. - const int visible_width = std::min(max_frame_output_size_.width(), - frame->visible_rect().width()); - - const int visible_height = std::min(max_frame_output_size_.height(), - frame->visible_rect().height()); - - // Find a new horizontal offset within |frame|. - const int horiz_crop = frame->visible_rect().x() + - ((frame->visible_rect().width() - visible_width) / 2); - // Find a new vertical offset within |frame|. - const int vert_crop = frame->visible_rect().y() + - ((frame->visible_rect().height() - visible_height) / 2); - - gfx::Rect rect(horiz_crop, vert_crop, visible_width, visible_height); - video_frame = media::VideoFrame::WrapVideoFrame( - frame, rect, rect.size(), base::Bind(&ReleaseOriginalFrame, frame)); + gfx::Rect output_rect = frame->visible_rect(); + output_rect.ClampToCenteredSize(max_frame_output_size_); + // TODO(perkj): Allow cropping of textures once http://crbug/362521 is + // fixed. + if (frame->format() != media::VideoFrame::NATIVE_TEXTURE) { + video_frame = media::VideoFrame::WrapVideoFrame( + frame, + output_rect, + output_rect.size(), + base::Bind(&ReleaseOriginalFrame, frame)); + } } if ((frame->format() == media::VideoFrame::I420 || @@ -506,7 +500,6 @@ void MediaStreamVideoSource::FinalizeAddTrack() { callbacks.swap(requested_constraints_); for (std::vector<RequestedConstraints>::iterator it = callbacks.begin(); it != callbacks.end(); ++it) { - bool success = state_ == STARTED && !FilterFormats(it->constraints, formats).empty(); DVLOG(3) << "FinalizeAddTrack() success " << success; |