| Index: media/filters/video_decoder_impl.cc
|
| diff --git a/media/filters/video_decoder_impl.cc b/media/filters/video_decoder_impl.cc
|
| index 870e1607e15eb592aa0db0126f269f2889f002e9..4bd7abc6f74b3dc6c6ee0227e12557485eb6d07c 100644
|
| --- a/media/filters/video_decoder_impl.cc
|
| +++ b/media/filters/video_decoder_impl.cc
|
| @@ -7,7 +7,7 @@
|
| #include "base/task.h"
|
| #include "media/base/filters.h"
|
| #include "media/base/limits.h"
|
| -#include "media/base/video_frame_impl.h"
|
| +#include "media/base/video_frame.h"
|
| #include "media/ffmpeg/ffmpeg_common.h"
|
| #include "media/filters/ffmpeg_interfaces.h"
|
| #include "media/filters/video_decode_engine.h"
|
| @@ -195,21 +195,21 @@ void VideoDecoderImpl::OnDecodeComplete(AVFrame* yuv_frame, bool* got_frame,
|
| }
|
| }
|
|
|
| -bool VideoDecoderImpl::EnqueueVideoFrame(VideoSurface::Format surface_format,
|
| +bool VideoDecoderImpl::EnqueueVideoFrame(VideoFrame::Format surface_format,
|
| const TimeTuple& time,
|
| const AVFrame* frame) {
|
| // TODO(fbarchard): Work around for FFmpeg http://crbug.com/27675
|
| // The decoder is in a bad state and not decoding correctly.
|
| // Checking for NULL avoids a crash in CopyPlane().
|
| - if (!frame->data[VideoSurface::kYPlane] ||
|
| - !frame->data[VideoSurface::kUPlane] ||
|
| - !frame->data[VideoSurface::kVPlane]) {
|
| + if (!frame->data[VideoFrame::kYPlane] ||
|
| + !frame->data[VideoFrame::kUPlane] ||
|
| + !frame->data[VideoFrame::kVPlane]) {
|
| return true;
|
| }
|
|
|
| scoped_refptr<VideoFrame> video_frame;
|
| - VideoFrameImpl::CreateFrame(surface_format, width_, height_,
|
| - time.timestamp, time.duration, &video_frame);
|
| + VideoFrame::CreateFrame(surface_format, width_, height_,
|
| + time.timestamp, time.duration, &video_frame);
|
| if (!video_frame) {
|
| return false;
|
| }
|
| @@ -219,31 +219,26 @@ bool VideoDecoderImpl::EnqueueVideoFrame(VideoSurface::Format surface_format,
|
| // avcodec_decode_video() call.
|
| // TODO(scherkus): figure out pre-allocation/buffer cycling scheme.
|
| // TODO(scherkus): is there a cleaner way to figure out the # of planes?
|
| - VideoSurface surface;
|
| - if (!video_frame->Lock(&surface)) {
|
| - return false;
|
| - }
|
| - CopyPlane(VideoSurface::kYPlane, surface, frame);
|
| - CopyPlane(VideoSurface::kUPlane, surface, frame);
|
| - CopyPlane(VideoSurface::kVPlane, surface, frame);
|
| - video_frame->Unlock();
|
| + CopyPlane(VideoFrame::kYPlane, *video_frame, frame);
|
| + CopyPlane(VideoFrame::kUPlane, *video_frame, frame);
|
| + CopyPlane(VideoFrame::kVPlane, *video_frame, frame);
|
| EnqueueResult(video_frame);
|
| return true;
|
| }
|
|
|
| void VideoDecoderImpl::CopyPlane(size_t plane,
|
| - const VideoSurface& surface,
|
| + const VideoFrame& video_frame,
|
| const AVFrame* frame) {
|
| - DCHECK(surface.width % 2 == 0);
|
| + DCHECK(video_frame.width() % 2 == 0);
|
| const uint8* source = frame->data[plane];
|
| const size_t source_stride = frame->linesize[plane];
|
| - uint8* dest = surface.data[plane];
|
| - const size_t dest_stride = surface.strides[plane];
|
| - size_t bytes_per_line = surface.width;
|
| - size_t copy_lines = surface.height;
|
| - if (plane != VideoSurface::kYPlane) {
|
| + uint8* dest = video_frame.data(plane);
|
| + const size_t dest_stride = video_frame.stride(plane);
|
| + size_t bytes_per_line = video_frame.width();
|
| + size_t copy_lines = video_frame.height();
|
| + if (plane != VideoFrame::kYPlane) {
|
| bytes_per_line /= 2;
|
| - if (surface.format == VideoSurface::YV12) {
|
| + if (video_frame.format() == VideoFrame::YV12) {
|
| copy_lines = (copy_lines + 1) / 2;
|
| }
|
| }
|
| @@ -257,7 +252,7 @@ void VideoDecoderImpl::CopyPlane(size_t plane,
|
|
|
| void VideoDecoderImpl::EnqueueEmptyFrame() {
|
| scoped_refptr<VideoFrame> video_frame;
|
| - VideoFrameImpl::CreateEmptyFrame(&video_frame);
|
| + VideoFrame::CreateEmptyFrame(&video_frame);
|
| EnqueueResult(video_frame);
|
| }
|
|
|
|
|