17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// found in the LICENSE file. 47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "content/renderer/media/rtc_video_decoder_factory.h" 67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/location.h" 87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/memory/scoped_ptr.h" 93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "content/renderer/media/renderer_gpu_video_accelerator_factories.h" 107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "content/renderer/media/rtc_video_decoder.h" 117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace content { 137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 147dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochRTCVideoDecoderFactory::RTCVideoDecoderFactory( 153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const scoped_refptr<RendererGpuVideoAcceleratorFactories>& gpu_factories) 16bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch : gpu_factories_(gpu_factories) { 177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DVLOG(2) << "RTCVideoDecoderFactory"; 187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 207dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochRTCVideoDecoderFactory::~RTCVideoDecoderFactory() { 217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DVLOG(2) << "~RTCVideoDecoderFactory"; 227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochwebrtc::VideoDecoder* RTCVideoDecoderFactory::CreateVideoDecoder( 257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch webrtc::VideoCodecType type) { 267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DVLOG(2) << "CreateVideoDecoder"; 273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // GpuVideoAcceleratorFactories is not thread safe. It cannot be shared 28bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch // by different decoders. This method runs on Chrome_libJingle_WorkerThread 29bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch // and the child thread is blocked while this runs. We cannot create new gpu 30bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch // factories here. Clone one instead. 31bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch scoped_ptr<RTCVideoDecoder> decoder = 32bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch RTCVideoDecoder::Create(type, gpu_factories_->Clone()); 33bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return decoder.release(); 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid RTCVideoDecoderFactory::DestroyVideoDecoder( 377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch webrtc::VideoDecoder* decoder) { 387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DVLOG(2) << "DestroyVideoDecoder"; 39bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch gpu_factories_->GetMessageLoop()->DeleteSoon(FROM_HERE, decoder); 407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} // namespace content 43