summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
Diffstat (limited to 'content')
-rw-r--r--content/renderer/media/capture_video_decoder.cc34
-rw-r--r--content/renderer/media/capture_video_decoder.h32
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;