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 3 // found in the LICENSE file. 4 5 #include "media/cast/video_receiver/video_decoder.h" 6 7 #include "base/bind.h" 8 #include "base/logging.h" 9 #include "base/message_loop/message_loop.h" 10 #include "media/cast/video_receiver/codecs/vp8/vp8_decoder.h" 11 12 namespace media { 13 namespace cast { 14 15 VideoDecoder::VideoDecoder(const VideoReceiverConfig& video_config, 16 scoped_refptr<CastEnvironment> cast_environment) 17 : codec_(video_config.codec), 18 vp8_decoder_() { 19 switch (video_config.codec) { 20 case kVp8: 21 vp8_decoder_.reset(new Vp8Decoder(cast_environment)); 22 break; 23 case kH264: 24 NOTIMPLEMENTED(); 25 break; 26 case kExternalVideo: 27 DCHECK(false) << "Invalid codec"; 28 break; 29 } 30 } 31 32 VideoDecoder::~VideoDecoder() {} 33 34 bool VideoDecoder::DecodeVideoFrame(const EncodedVideoFrame* encoded_frame, 35 const base::TimeTicks render_time, 36 const VideoFrameDecodedCallback& 37 frame_decoded_cb) { 38 DCHECK(encoded_frame->codec == codec_) << "Invalid codec"; 39 DCHECK_GT(encoded_frame->data.size(), GG_UINT64_C(0)) << "Empty video frame"; 40 return vp8_decoder_->Decode(encoded_frame, render_time, frame_decoded_cb); 41 } 42 43 } // namespace cast 44 } // namespace media 45