Chromium Code Reviews| Index: content/renderer/media/video_track_recorder.cc |
| diff --git a/content/renderer/media/video_track_recorder.cc b/content/renderer/media/video_track_recorder.cc |
| index a29af2fc5b0c8caae761d6aa1cc4febcd8764aee..ae4ad429e81ad5f72b7abd1ecd65a59b48b38350 100644 |
| --- a/content/renderer/media/video_track_recorder.cc |
| +++ b/content/renderer/media/video_track_recorder.cc |
| @@ -166,7 +166,7 @@ class VideoTrackRecorder::Encoder : public base::RefCountedThreadSafe<Encoder> { |
| } |
| virtual void EncodeOnEncodingTaskRunner( |
| - const scoped_refptr<VideoFrame>& frame, |
| + scoped_refptr<VideoFrame> frame, |
| base::TimeTicks capture_timestamp) = 0; |
| virtual void ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size) = 0; |
| @@ -338,13 +338,13 @@ typedef std::unique_ptr<vpx_codec_ctx_t, VpxCodecDeleter> ScopedVpxCodecCtxPtr; |
| static void OnFrameEncodeCompleted( |
| const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_cb, |
| - const scoped_refptr<VideoFrame>& frame, |
| + const media::WebmMuxer::VideoParameters& params, |
| std::unique_ptr<std::string> data, |
| base::TimeTicks capture_timestamp, |
| bool keyframe) { |
| DVLOG(1) << (keyframe ? "" : "non ") << "keyframe "<< data->length() << "B, " |
| << capture_timestamp << " ms"; |
| - on_encoded_video_cb.Run(frame, std::move(data), capture_timestamp, keyframe); |
| + on_encoded_video_cb.Run(params, std::move(data), capture_timestamp, keyframe); |
| } |
| static int GetNumberOfThreadsForEncoding() { |
| @@ -378,14 +378,16 @@ class VEAEncoder final : public VideoTrackRecorder::Encoder, |
| private: |
| using VideoFrameAndTimestamp = |
| - std::pair<scoped_refptr<VideoFrame>, base::TimeTicks>; |
| + std::pair<scoped_refptr<media::VideoFrame>, base::TimeTicks>; |
| + using VideoParamsAndTimestamp = |
| + std::pair<media::WebmMuxer::VideoParameters, base::TimeTicks>; |
| void UseOutputBitstreamBufferId(int32_t bitstream_buffer_id); |
| void FrameFinished(std::unique_ptr<base::SharedMemory> shm); |
| // VideoTrackRecorder::Encoder implementation. |
| ~VEAEncoder() override; |
| - void EncodeOnEncodingTaskRunner(const scoped_refptr<VideoFrame>& frame, |
| + void EncodeOnEncodingTaskRunner(scoped_refptr<VideoFrame> frame, |
| base::TimeTicks capture_timestamp) override; |
| void ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size) override; |
| @@ -415,7 +417,7 @@ class VEAEncoder final : public VideoTrackRecorder::Encoder, |
| gfx::Size vea_requested_input_size_; |
| // Frames and corresponding timestamps in encode as FIFO. |
| - std::queue<VideoFrameAndTimestamp> frames_in_encode_; |
| + std::queue<VideoParamsAndTimestamp> frames_in_encode_; |
| }; |
| // Class encapsulating all libvpx interactions for VP8/VP9 encoding. |
| @@ -432,7 +434,7 @@ class VpxEncoder final : public VideoTrackRecorder::Encoder { |
| private: |
| // VideoTrackRecorder::Encoder implementation. |
| ~VpxEncoder() override; |
| - void EncodeOnEncodingTaskRunner(const scoped_refptr<VideoFrame>& frame, |
| + void EncodeOnEncodingTaskRunner(scoped_refptr<VideoFrame> frame, |
| base::TimeTicks capture_timestamp) override; |
| void ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size) override; |
| @@ -484,7 +486,7 @@ class H264Encoder final : public VideoTrackRecorder::Encoder { |
| private: |
| // VideoTrackRecorder::Encoder implementation. |
| ~H264Encoder() override; |
| - void EncodeOnEncodingTaskRunner(const scoped_refptr<VideoFrame>& frame, |
| + void EncodeOnEncodingTaskRunner(scoped_refptr<VideoFrame> frame, |
| base::TimeTicks capture_timestamp) override; |
| void ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size) override; |
| @@ -596,7 +598,7 @@ void VEAEncoder::FrameFinished(std::unique_ptr<base::SharedMemory> shm) { |
| } |
| void VEAEncoder::EncodeOnEncodingTaskRunner( |
| - const scoped_refptr<VideoFrame>& frame, |
| + scoped_refptr<VideoFrame> frame, |
| base::TimeTicks capture_timestamp) { |
| DVLOG(3) << __func__; |
| DCHECK(encoding_task_runner_->BelongsToCurrentThread()); |
| @@ -680,7 +682,8 @@ void VEAEncoder::EncodeOnEncodingTaskRunner( |
| video_frame->stride(media::VideoFrame::kVPlane), |
| input_size_.width(), input_size_.height()); |
| } |
| - frames_in_encode_.push(std::make_pair(video_frame, capture_timestamp)); |
| + frames_in_encode_.push(std::make_pair( |
| + media::WebmMuxer::VideoParameters(frame), capture_timestamp)); |
| encoding_task_runner_->PostTask( |
| FROM_HERE, |
| @@ -728,7 +731,7 @@ VpxEncoder::~VpxEncoder() { |
| } |
| void VpxEncoder::EncodeOnEncodingTaskRunner( |
| - const scoped_refptr<VideoFrame>& frame, |
| + scoped_refptr<VideoFrame> frame, |
| base::TimeTicks capture_timestamp) { |
| TRACE_EVENT0("video", "VpxEncoder::EncodeOnEncodingTaskRunner"); |
| DCHECK(encoding_task_runner_->BelongsToCurrentThread()); |
| @@ -768,6 +771,9 @@ void VpxEncoder::EncodeOnEncodingTaskRunner( |
| << vpx_codec_error(encoder_.get()) << " -" |
| << vpx_codec_error_detail(encoder_.get()); |
| + media::WebmMuxer::VideoParameters video_params(frame); |
|
mcasas
2017/01/06 01:04:55
const? Also in l.970
emircan
2017/01/06 01:19:13
Done.
|
| + frame = nullptr; |
| + |
| std::unique_ptr<std::string> data(new std::string); |
| bool keyframe = false; |
| vpx_codec_iter_t iter = NULL; |
| @@ -782,7 +788,7 @@ void VpxEncoder::EncodeOnEncodingTaskRunner( |
| origin_task_runner_->PostTask(FROM_HERE, |
| base::Bind(OnFrameEncodeCompleted, |
| on_encoded_video_callback_, |
| - frame, |
| + video_params, |
| base::Passed(&data), |
| capture_timestamp, |
| keyframe)); |
| @@ -932,7 +938,7 @@ H264Encoder::~H264Encoder() { |
| } |
| void H264Encoder::EncodeOnEncodingTaskRunner( |
| - const scoped_refptr<VideoFrame>& frame, |
| + scoped_refptr<VideoFrame> frame, |
| base::TimeTicks capture_timestamp) { |
| TRACE_EVENT0("video", "H264Encoder::EncodeOnEncodingTaskRunner"); |
| DCHECK(encoding_task_runner_->BelongsToCurrentThread()); |
| @@ -961,6 +967,8 @@ void H264Encoder::EncodeOnEncodingTaskRunner( |
| NOTREACHED() << "OpenH264 encoding failed"; |
| return; |
| } |
| + media::WebmMuxer::VideoParameters video_params(frame); |
| + frame = nullptr; |
| std::unique_ptr<std::string> data(new std::string); |
| const uint8_t kNALStartCode[4] = {0, 0, 0, 1}; |
| @@ -984,9 +992,9 @@ void H264Encoder::EncodeOnEncodingTaskRunner( |
| const bool is_key_frame = info.eFrameType == videoFrameTypeIDR; |
| origin_task_runner_->PostTask( |
| - FROM_HERE, |
| - base::Bind(OnFrameEncodeCompleted, on_encoded_video_callback_, frame, |
| - base::Passed(&data), capture_timestamp, is_key_frame)); |
| + FROM_HERE, base::Bind(OnFrameEncodeCompleted, on_encoded_video_callback_, |
| + video_params, base::Passed(&data), |
| + capture_timestamp, is_key_frame)); |
| } |
| void H264Encoder::ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size) { |