Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(88)

Side by Side Diff: content/renderer/media/rtc_video_decoder.cc

Issue 457733002: Support for H264 HW offload for webRTC. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Replace quick-n-dirty parser with existing H264 parser. Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/rtc_video_decoder.h" 5 #include "content/renderer/media/rtc_video_decoder.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/memory/ref_counted.h" 9 #include "base/memory/ref_counted.h"
10 #include "base/message_loop/message_loop_proxy.h" 10 #include "base/message_loop/message_loop_proxy.h"
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 scoped_ptr<RTCVideoDecoder> RTCVideoDecoder::Create( 109 scoped_ptr<RTCVideoDecoder> RTCVideoDecoder::Create(
110 webrtc::VideoCodecType type, 110 webrtc::VideoCodecType type,
111 const scoped_refptr<media::GpuVideoAcceleratorFactories>& factories) { 111 const scoped_refptr<media::GpuVideoAcceleratorFactories>& factories) {
112 scoped_ptr<RTCVideoDecoder> decoder; 112 scoped_ptr<RTCVideoDecoder> decoder;
113 // Convert WebRTC codec type to media codec profile. 113 // Convert WebRTC codec type to media codec profile.
114 media::VideoCodecProfile profile; 114 media::VideoCodecProfile profile;
115 switch (type) { 115 switch (type) {
116 case webrtc::kVideoCodecVP8: 116 case webrtc::kVideoCodecVP8:
117 profile = media::VP8PROFILE_MAIN; 117 profile = media::VP8PROFILE_MAIN;
118 break; 118 break;
119 case webrtc::kVideoCodecH264:
120 profile = media::H264PROFILE_MAIN;
121 break;
119 default: 122 default:
120 DVLOG(2) << "Video codec not supported:" << type; 123 DVLOG(2) << "Video codec not supported:" << type;
121 return decoder.Pass(); 124 return decoder.Pass();
122 } 125 }
123 126
124 base::WaitableEvent waiter(true, false); 127 base::WaitableEvent waiter(true, false);
125 decoder.reset(new RTCVideoDecoder(factories)); 128 decoder.reset(new RTCVideoDecoder(factories));
126 decoder->factories_->GetTaskRunner()->PostTask( 129 decoder->factories_->GetTaskRunner()->PostTask(
127 FROM_HERE, 130 FROM_HERE,
128 base::Bind(&RTCVideoDecoder::CreateVDA, 131 base::Bind(&RTCVideoDecoder::CreateVDA,
129 base::Unretained(decoder.get()), 132 base::Unretained(decoder.get()),
130 profile, 133 profile,
131 &waiter)); 134 &waiter));
132 waiter.Wait(); 135 waiter.Wait();
133 // vda can be NULL if VP8 is not supported. 136 // vda can be NULL if VP8 is not supported.
134 if (decoder->vda_ != NULL) { 137 if (decoder->vda_ != NULL) {
135 decoder->state_ = INITIALIZED; 138 decoder->state_ = INITIALIZED;
136 } else { 139 } else {
137 factories->GetTaskRunner()->DeleteSoon(FROM_HERE, decoder.release()); 140 factories->GetTaskRunner()->DeleteSoon(FROM_HERE, decoder.release());
138 } 141 }
139 return decoder.Pass(); 142 return decoder.Pass();
140 } 143 }
141 144
142 int32_t RTCVideoDecoder::InitDecode(const webrtc::VideoCodec* codecSettings, 145 int32_t RTCVideoDecoder::InitDecode(const webrtc::VideoCodec* codecSettings,
143 int32_t /*numberOfCores*/) { 146 int32_t /*numberOfCores*/) {
144 DVLOG(2) << "InitDecode"; 147 DVLOG(2) << "InitDecode";
145 DCHECK_EQ(codecSettings->codecType, webrtc::kVideoCodecVP8); 148 DCHECK(codecSettings->codecType == webrtc::kVideoCodecVP8 ||
Pawel Osciak 2014/08/10 00:30:29 We should verify against the type passed to Create
hshi1 2014/08/12 01:06:55 Done (requires passing |type| to ctor of RTCVD).
146 if (codecSettings->codecSpecific.VP8.feedbackModeOn) { 149 codecSettings->codecType == webrtc::kVideoCodecH264);
150 if (codecSettings->codecType == webrtc::kVideoCodecVP8 &&
151 codecSettings->codecSpecific.VP8.feedbackModeOn) {
147 LOG(ERROR) << "Feedback mode not supported"; 152 LOG(ERROR) << "Feedback mode not supported";
148 return RecordInitDecodeUMA(WEBRTC_VIDEO_CODEC_ERROR); 153 return RecordInitDecodeUMA(WEBRTC_VIDEO_CODEC_ERROR);
149 } 154 }
150 155
151 base::AutoLock auto_lock(lock_); 156 base::AutoLock auto_lock(lock_);
152 if (state_ == UNINITIALIZED || state_ == DECODE_ERROR) { 157 if (state_ == UNINITIALIZED || state_ == DECODE_ERROR) {
153 LOG(ERROR) << "VDA is not initialized. state=" << state_; 158 LOG(ERROR) << "VDA is not initialized. state=" << state_;
154 return RecordInitDecodeUMA(WEBRTC_VIDEO_CODEC_UNINITIALIZED); 159 return RecordInitDecodeUMA(WEBRTC_VIDEO_CODEC_UNINITIALIZED);
155 } 160 }
156 // Create some shared memory if the queue is empty. 161 // Create some shared memory if the queue is empty.
(...skipping 639 matching lines...) Expand 10 before | Expand all | Expand 10 after
796 UMA_HISTOGRAM_BOOLEAN("Media.RTCVideoDecoderInitDecodeSuccess", sample); 801 UMA_HISTOGRAM_BOOLEAN("Media.RTCVideoDecoderInitDecodeSuccess", sample);
797 return status; 802 return status;
798 } 803 }
799 804
800 void RTCVideoDecoder::DCheckGpuVideoAcceleratorFactoriesTaskRunnerIsCurrent() 805 void RTCVideoDecoder::DCheckGpuVideoAcceleratorFactoriesTaskRunnerIsCurrent()
801 const { 806 const {
802 DCHECK(factories_->GetTaskRunner()->BelongsToCurrentThread()); 807 DCHECK(factories_->GetTaskRunner()->BelongsToCurrentThread());
803 } 808 }
804 809
805 } // namespace content 810 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | content/renderer/media/rtc_video_encoder.cc » ('j') | content/renderer/media/rtc_video_encoder.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698