| OLD | NEW |
| (Empty) |
| 1 // Copyright 2015 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 <memory> | |
| 6 | |
| 7 #include "base/single_thread_task_runner.h" | |
| 8 #include "base/threading/thread_task_runner_handle.h" | |
| 9 #include "build/build_config.h" | |
| 10 #include "chromecast/base/task_runner_impl.h" | |
| 11 #include "chromecast/media/cma/backend/media_pipeline_backend_default.h" | |
| 12 #include "chromecast/public/cast_media_shlib.h" | |
| 13 #include "chromecast/public/graphics_types.h" | |
| 14 #include "chromecast/public/media/media_capabilities_shlib.h" | |
| 15 #include "chromecast/public/media/media_pipeline_device_params.h" | |
| 16 #include "chromecast/public/media_codec_support_shlib.h" | |
| 17 #include "chromecast/public/video_plane.h" | |
| 18 | |
| 19 namespace chromecast { | |
| 20 namespace media { | |
| 21 namespace { | |
| 22 | |
| 23 class DefaultVideoPlane : public VideoPlane { | |
| 24 public: | |
| 25 ~DefaultVideoPlane() override {} | |
| 26 | |
| 27 void SetGeometry(const RectF& display_rect, | |
| 28 Transform transform) override {} | |
| 29 }; | |
| 30 | |
| 31 DefaultVideoPlane* g_video_plane = nullptr; | |
| 32 base::ThreadTaskRunnerHandle* g_thread_task_runner_handle = nullptr; | |
| 33 | |
| 34 } // namespace | |
| 35 | |
| 36 void CastMediaShlib::Initialize(const std::vector<std::string>& argv) { | |
| 37 g_video_plane = new DefaultVideoPlane(); | |
| 38 } | |
| 39 | |
| 40 void CastMediaShlib::Finalize() { | |
| 41 delete g_video_plane; | |
| 42 g_video_plane = nullptr; | |
| 43 delete g_thread_task_runner_handle; | |
| 44 g_thread_task_runner_handle = nullptr; | |
| 45 } | |
| 46 | |
| 47 VideoPlane* CastMediaShlib::GetVideoPlane() { | |
| 48 return g_video_plane; | |
| 49 } | |
| 50 | |
| 51 MediaPipelineBackend* CastMediaShlib::CreateMediaPipelineBackend( | |
| 52 const MediaPipelineDeviceParams& params) { | |
| 53 // Set up the static reference in base::ThreadTaskRunnerHandle::Get | |
| 54 // for the media thread in this shared library. We can extract the | |
| 55 // SingleThreadTaskRunner passed in from cast_shell for this. | |
| 56 if (!base::ThreadTaskRunnerHandle::IsSet()) { | |
| 57 DCHECK(!g_thread_task_runner_handle); | |
| 58 const scoped_refptr<base::SingleThreadTaskRunner> task_runner = | |
| 59 static_cast<TaskRunnerImpl*>(params.task_runner)->runner(); | |
| 60 DCHECK(task_runner->BelongsToCurrentThread()); | |
| 61 g_thread_task_runner_handle = new base::ThreadTaskRunnerHandle(task_runner); | |
| 62 } | |
| 63 | |
| 64 return new MediaPipelineBackendDefault(); | |
| 65 } | |
| 66 | |
| 67 MediaCodecSupportShlib::CodecSupport MediaCodecSupportShlib::IsSupported( | |
| 68 const std::string& codec) { | |
| 69 #if defined(OS_ANDROID) | |
| 70 // TODO(servolk): Find a way to reuse IsCodecSupportedOnAndroid. | |
| 71 | |
| 72 // Theora is not supported | |
| 73 if (codec == "theora") | |
| 74 return kNotSupported; | |
| 75 | |
| 76 // MPEG-2 variants of AAC are not supported on Android. | |
| 77 // MPEG2_AAC_MAIN / MPEG2_AAC_LC / MPEG2_AAC_SSR | |
| 78 if (codec == "mp4a.66" || codec == "mp4a.67" || codec == "mp4a.68") | |
| 79 return kNotSupported; | |
| 80 | |
| 81 // VP9 is guaranteed supported but is often software-decode only. | |
| 82 // TODO(gunsch/servolk): look into querying for hardware decode support. | |
| 83 if (codec == "vp9" || codec == "vp9.0") | |
| 84 return kNotSupported; | |
| 85 #endif | |
| 86 | |
| 87 return kDefault; | |
| 88 } | |
| 89 | |
| 90 double CastMediaShlib::GetMediaClockRate() { | |
| 91 return 0.0; | |
| 92 } | |
| 93 | |
| 94 double CastMediaShlib::MediaClockRatePrecision() { | |
| 95 return 0.0; | |
| 96 } | |
| 97 | |
| 98 void CastMediaShlib::MediaClockRateRange(double* minimum_rate, | |
| 99 double* maximum_rate) {} | |
| 100 | |
| 101 bool CastMediaShlib::SetMediaClockRate(double new_rate) { | |
| 102 return false; | |
| 103 } | |
| 104 | |
| 105 bool CastMediaShlib::SupportsMediaClockRateChange() { | |
| 106 return false; | |
| 107 } | |
| 108 | |
| 109 bool MediaCapabilitiesShlib::IsSupportedVideoConfig(VideoCodec codec, | |
| 110 VideoProfile profile, | |
| 111 int level) { | |
| 112 return (codec == kCodecH264 || codec == kCodecVP8); | |
| 113 } | |
| 114 | |
| 115 } // namespace media | |
| 116 } // namespace chromecast | |
| OLD | NEW |