| Index: remoting/base/decoder_vp8.cc
|
| diff --git a/remoting/base/decoder_vp8.cc b/remoting/base/decoder_vp8.cc
|
| index 4074691353d3d326428405ed5cdd2c6aa033fd61..fc6670f637e81bfe924df2f171c2c032acf22db2 100644
|
| --- a/remoting/base/decoder_vp8.cc
|
| +++ b/remoting/base/decoder_vp8.cc
|
| @@ -142,71 +142,17 @@ void DecoderVp8::RefreshRegion(const SkRegion& region) {
|
| if (output_size_.height() > static_cast<int>(frame_->height()))
|
| output_size_.set(output_size_.width(), frame_->height());
|
|
|
| - if (!DoScaling()) {
|
| - ConvertRegion(region, &updated_region_);
|
| - } else {
|
| - ScaleAndConvertRegion(region, &updated_region_);
|
| - }
|
| -}
|
| -
|
| -bool DecoderVp8::DoScaling() const {
|
| - DCHECK(last_image_);
|
| - return !output_size_.equals(last_image_->d_w, last_image_->d_h);
|
| -}
|
| -
|
| -void DecoderVp8::ConvertRegion(const SkRegion& input_region,
|
| - SkRegion* output_region) {
|
| if (!last_image_)
|
| return;
|
|
|
| - output_region->setEmpty();
|
| + updated_region_.setEmpty();
|
|
|
| // Clip based on both the output dimensions and Pepper clip rect.
|
| - // ConvertYUVToRGB32WithRect() requires even X and Y coordinates, so we align
|
| - // |clip_rect| to prevent clipping from breaking alignment. We then clamp it
|
| - // to the image dimensions, which may lead to odd width & height, which we
|
| - // can cope with.
|
| + // ConvertAndScaleYUVToRGB32Rect() requires even X and Y coordinates, so we
|
| + // align |clip_rect| to prevent clipping from breaking alignment. We then
|
| + // clamp it to the image dimensions, which may lead to odd width & height,
|
| + // which we can cope with.
|
| SkIRect clip_rect = AlignRect(clip_rect_);
|
| - if (!clip_rect.intersect(SkIRect::MakeWH(last_image_->d_w, last_image_->d_h)))
|
| - return;
|
| -
|
| - uint8* output_rgb_buf = frame_->data(media::VideoFrame::kRGBPlane);
|
| - const int output_stride = frame_->stride(media::VideoFrame::kRGBPlane);
|
| -
|
| - for (SkRegion::Iterator i(input_region); !i.done(); i.next()) {
|
| - // Align the rectangle so the top-left coordinates are even, for
|
| - // ConvertYUVToRGB32WithRect().
|
| - SkIRect dest_rect(AlignRect(i.rect()));
|
| -
|
| - // Clip the rectangle, preserving alignment since |clip_rect| is aligned.
|
| - if (!dest_rect.intersect(clip_rect))
|
| - continue;
|
| -
|
| - ConvertYUVToRGB32WithRect(last_image_->planes[0],
|
| - last_image_->planes[1],
|
| - last_image_->planes[2],
|
| - output_rgb_buf,
|
| - dest_rect,
|
| - last_image_->stride[0],
|
| - last_image_->stride[1],
|
| - output_stride);
|
| -
|
| - output_region->op(dest_rect, SkRegion::kUnion_Op);
|
| - }
|
| -}
|
| -
|
| -void DecoderVp8::ScaleAndConvertRegion(const SkRegion& input_region,
|
| - SkRegion* output_region) {
|
| - if (!last_image_)
|
| - return;
|
| -
|
| - DCHECK(output_size_.width() <= static_cast<int>(frame_->width()));
|
| - DCHECK(output_size_.height() <= static_cast<int>(frame_->height()));
|
| -
|
| - output_region->setEmpty();
|
| -
|
| - // Clip based on both the output dimensions and Pepper clip rect.
|
| - SkIRect clip_rect = clip_rect_;
|
| if (!clip_rect.intersect(SkIRect::MakeSize(output_size_)))
|
| return;
|
|
|
| @@ -214,30 +160,30 @@ void DecoderVp8::ScaleAndConvertRegion(const SkRegion& input_region,
|
| uint8* output_rgb_buf = frame_->data(media::VideoFrame::kRGBPlane);
|
| const int output_stride = frame_->stride(media::VideoFrame::kRGBPlane);
|
|
|
| - for (SkRegion::Iterator i(input_region); !i.done(); i.next()) {
|
| + for (SkRegion::Iterator i(region); !i.done(); i.next()) {
|
| // Determine the scaled area affected by this rectangle changing.
|
| - SkIRect output_rect = ScaleRect(i.rect(), image_size, output_size_);
|
| + // Align the rectangle so the top-left coordinates are even, for
|
| + // ConvertAndScaleYUVToRGB32Rect().
|
| + SkIRect output_rect = ScaleRect(AlignRect(i.rect()),
|
| + image_size, output_size_);
|
| if (!output_rect.intersect(clip_rect))
|
| continue;
|
|
|
| // The scaler will not to read outside the input dimensions.
|
| - media::ScaleYUVToRGB32WithRect(last_image_->planes[0],
|
| - last_image_->planes[1],
|
| - last_image_->planes[2],
|
| - output_rgb_buf,
|
| - image_size.width(),
|
| - image_size.height(),
|
| - output_size_.width(),
|
| - output_size_.height(),
|
| - output_rect.x(),
|
| - output_rect.y(),
|
| - output_rect.right(),
|
| - output_rect.bottom(),
|
| - last_image_->stride[0],
|
| - last_image_->stride[1],
|
| - output_stride);
|
| -
|
| - output_region->op(output_rect, SkRegion::kUnion_Op);
|
| + ConvertAndScaleYUVToRGB32Rect(last_image_->planes[0],
|
| + last_image_->planes[1],
|
| + last_image_->planes[2],
|
| + last_image_->stride[0],
|
| + last_image_->stride[1],
|
| + image_size,
|
| + SkIRect::MakeSize(image_size),
|
| + output_rgb_buf,
|
| + output_stride,
|
| + output_size_,
|
| + SkIRect::MakeSize(output_size_),
|
| + output_rect);
|
| +
|
| + updated_region_.op(output_rect, SkRegion::kUnion_Op);
|
| }
|
| }
|
|
|
|
|