OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/renderer/media/ipc_video_decoder.h" | 5 #include "content/renderer/media/ipc_video_decoder.h" |
6 | 6 |
7 #include "base/task.h" | 7 #include "base/task.h" |
8 #include "content/common/child_process.h" | 8 #include "content/common/child_process.h" |
9 #include "content/renderer/renderer_gl_context.h" | 9 #include "content/renderer/renderer_gl_context.h" |
10 #include "media/base/callback.h" | 10 #include "media/base/callback.h" |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 callback->Run(); | 95 callback->Run(); |
96 delete callback; | 96 delete callback; |
97 } | 97 } |
98 | 98 |
99 void IpcVideoDecoder::Flush(media::FilterCallback* callback) { | 99 void IpcVideoDecoder::Flush(media::FilterCallback* callback) { |
100 flush_callback_.reset(callback); | 100 flush_callback_.reset(callback); |
101 decode_engine_->Flush(); | 101 decode_engine_->Flush(); |
102 } | 102 } |
103 | 103 |
104 void IpcVideoDecoder::Seek(base::TimeDelta time, | 104 void IpcVideoDecoder::Seek(base::TimeDelta time, |
105 media::FilterCallback* callback) { | 105 const media::FilterStatusCB& cb) { |
106 seek_callback_.reset(callback); | 106 seek_cb_ = cb; |
107 decode_engine_->Seek(); | 107 decode_engine_->Seek(); |
108 } | 108 } |
109 | 109 |
110 void IpcVideoDecoder::OnInitializeComplete(const media::VideoCodecInfo& info) { | 110 void IpcVideoDecoder::OnInitializeComplete(const media::VideoCodecInfo& info) { |
111 DCHECK_EQ(ChildProcess::current()->io_message_loop(), MessageLoop::current()); | 111 DCHECK_EQ(ChildProcess::current()->io_message_loop(), MessageLoop::current()); |
112 | 112 |
113 if (info.success) { | 113 if (info.success) { |
114 media_format_.SetAsInteger(media::MediaFormat::kSurfaceType, | 114 media_format_.SetAsInteger(media::MediaFormat::kSurfaceType, |
115 media::VideoFrame::TYPE_GL_TEXTURE); | 115 media::VideoFrame::TYPE_GL_TEXTURE); |
116 media_format_.SetAsInteger(media::MediaFormat::kSurfaceFormat, | 116 media_format_.SetAsInteger(media::MediaFormat::kSurfaceFormat, |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
148 } | 148 } |
149 | 149 |
150 void IpcVideoDecoder::OnFlushComplete() { | 150 void IpcVideoDecoder::OnFlushComplete() { |
151 DCHECK_EQ(ChildProcess::current()->io_message_loop(), MessageLoop::current()); | 151 DCHECK_EQ(ChildProcess::current()->io_message_loop(), MessageLoop::current()); |
152 flush_callback_->Run(); | 152 flush_callback_->Run(); |
153 flush_callback_.reset(); | 153 flush_callback_.reset(); |
154 } | 154 } |
155 | 155 |
156 void IpcVideoDecoder::OnSeekComplete() { | 156 void IpcVideoDecoder::OnSeekComplete() { |
157 DCHECK_EQ(ChildProcess::current()->io_message_loop(), MessageLoop::current()); | 157 DCHECK_EQ(ChildProcess::current()->io_message_loop(), MessageLoop::current()); |
158 seek_callback_->Run(); | 158 ResetAndRunCB(&seek_cb_, media::PIPELINE_OK); |
159 seek_callback_.reset(); | |
160 } | 159 } |
161 | 160 |
162 void IpcVideoDecoder::OnError() { | 161 void IpcVideoDecoder::OnError() { |
163 DCHECK_EQ(ChildProcess::current()->io_message_loop(), MessageLoop::current()); | 162 DCHECK_EQ(ChildProcess::current()->io_message_loop(), MessageLoop::current()); |
164 host()->SetError(media::PIPELINE_ERROR_DECODE); | 163 host()->SetError(media::PIPELINE_ERROR_DECODE); |
165 } | 164 } |
166 | 165 |
167 // This methid is called by Demuxer after a demuxed packet is produced. | 166 // This methid is called by Demuxer after a demuxed packet is produced. |
168 void IpcVideoDecoder::OnReadComplete(media::Buffer* buffer) { | 167 void IpcVideoDecoder::OnReadComplete(media::Buffer* buffer) { |
169 decode_engine_->ConsumeVideoSample(buffer); | 168 decode_engine_->ConsumeVideoSample(buffer); |
(...skipping 24 matching lines...) Expand all Loading... |
194 statistics_callback_->Run(statistics); | 193 statistics_callback_->Run(statistics); |
195 | 194 |
196 VideoFrameReady(video_frame); | 195 VideoFrameReady(video_frame); |
197 } | 196 } |
198 | 197 |
199 // This method is called by VideoDecodeEngine to request a video frame. The | 198 // This method is called by VideoDecodeEngine to request a video frame. The |
200 // request is passed to demuxer. | 199 // request is passed to demuxer. |
201 void IpcVideoDecoder::ProduceVideoSample(scoped_refptr<media::Buffer> buffer) { | 200 void IpcVideoDecoder::ProduceVideoSample(scoped_refptr<media::Buffer> buffer) { |
202 demuxer_stream_->Read(base::Bind(&IpcVideoDecoder::OnReadComplete, this)); | 201 demuxer_stream_->Read(base::Bind(&IpcVideoDecoder::OnReadComplete, this)); |
203 } | 202 } |
OLD | NEW |