diff options
Diffstat (limited to 'content')
-rw-r--r-- | content/renderer/media/capture_video_decoder.cc | 34 | ||||
-rw-r--r-- | content/renderer/media/capture_video_decoder.h | 32 |
2 files changed, 31 insertions, 35 deletions
diff --git a/content/renderer/media/capture_video_decoder.cc b/content/renderer/media/capture_video_decoder.cc index 0933b1f..e1d2db4 100644 --- a/content/renderer/media/capture_video_decoder.cc +++ b/content/renderer/media/capture_video_decoder.cc @@ -7,6 +7,11 @@ #include "content/renderer/media/video_capture_impl_manager.h" #include "media/base/filter_host.h" #include "media/base/limits.h" +#include "media/base/video_util.h" + +using media::CopyYPlane; +using media::CopyUPlane; +using media::CopyVPlane; CaptureVideoDecoder::CaptureVideoDecoder( base::MessageLoopProxy* message_loop_proxy, @@ -241,26 +246,15 @@ void CaptureVideoDecoder::OnBufferReadyOnDecoderThread( uint8* buffer = buf->memory_pointer; - // TODO(wjia): de-duplicating pixel date copying code. - uint8* y_plane = video_frame->data(media::VideoFrame::kYPlane); - for (size_t row = 0; row < video_frame->height(); ++row) { - memcpy(y_plane, buffer, capability_.width); - y_plane += video_frame->stride(media::VideoFrame::kYPlane); - buffer += capability_.width; - } - size_t uv_width = capability_.width / 2; - uint8* u_plane = video_frame->data(media::VideoFrame::kUPlane); - for (size_t row = 0; row < video_frame->height(); row += 2) { - memcpy(u_plane, buffer, uv_width); - u_plane += video_frame->stride(media::VideoFrame::kUPlane); - buffer += uv_width; - } - uint8* v_plane = video_frame->data(media::VideoFrame::kVPlane); - for (size_t row = 0; row < video_frame->height(); row += 2) { - memcpy(v_plane, buffer, uv_width); - v_plane += video_frame->stride(media::VideoFrame::kVPlane); - buffer += uv_width; - } + int y_width = capability_.width; + int y_height = capability_.height; + int uv_width = capability_.width / 2; + int uv_height = capability_.height / 2; // YV12 format. + CopyYPlane(buffer, y_width, y_height, video_frame); + buffer += y_width * y_height; + CopyUPlane(buffer, uv_width, uv_height, video_frame); + buffer += uv_width * uv_height; + CopyVPlane(buffer, uv_width, uv_height, video_frame); VideoFrameReady(video_frame); capture->FeedBuffer(buf); diff --git a/content/renderer/media/capture_video_decoder.h b/content/renderer/media/capture_video_decoder.h index 8e2f7e0..5391481 100644 --- a/content/renderer/media/capture_video_decoder.h +++ b/content/renderer/media/capture_video_decoder.h @@ -31,31 +31,33 @@ class CaptureVideoDecoder virtual ~CaptureVideoDecoder(); // Filter implementation. - virtual void Play(media::FilterCallback* callback); - virtual void Seek(base::TimeDelta time, const media::FilterStatusCB& cb); - virtual void Pause(media::FilterCallback* callback); - virtual void Stop(media::FilterCallback* callback); + virtual void Play(media::FilterCallback* callback) OVERRIDE; + virtual void Seek(base::TimeDelta time, + const media::FilterStatusCB& cb) OVERRIDE; + virtual void Pause(media::FilterCallback* callback) OVERRIDE; + virtual void Stop(media::FilterCallback* callback) OVERRIDE; // Decoder implementation. virtual void Initialize(media::DemuxerStream* demuxer_stream, media::FilterCallback* filter_callback, - media::StatisticsCallback* stat_callback); - virtual void ProduceVideoFrame(scoped_refptr<media::VideoFrame> video_frame); - virtual bool ProvidesBuffer(); - virtual int width(); - virtual int height(); + media::StatisticsCallback* stat_callback) OVERRIDE; + virtual void ProduceVideoFrame( + scoped_refptr<media::VideoFrame> video_frame) OVERRIDE; + virtual bool ProvidesBuffer() OVERRIDE; + virtual int width() OVERRIDE; + virtual int height() OVERRIDE; // VideoCapture::EventHandler implementation. - virtual void OnStarted(media::VideoCapture* capture); - virtual void OnStopped(media::VideoCapture* capture); - virtual void OnPaused(media::VideoCapture* capture); - virtual void OnError(media::VideoCapture* capture, int error_code); + virtual void OnStarted(media::VideoCapture* capture) OVERRIDE; + virtual void OnStopped(media::VideoCapture* capture) OVERRIDE; + virtual void OnPaused(media::VideoCapture* capture) OVERRIDE; + virtual void OnError(media::VideoCapture* capture, int error_code) OVERRIDE; virtual void OnBufferReady( media::VideoCapture* capture, - scoped_refptr<media::VideoCapture::VideoFrameBuffer> buf); + scoped_refptr<media::VideoCapture::VideoFrameBuffer> buf) OVERRIDE; virtual void OnDeviceInfoReceived( media::VideoCapture* capture, - const media::VideoCaptureParams& device_info); + const media::VideoCaptureParams& device_info) OVERRIDE; private: friend class CaptureVideoDecoderTest; |