OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "base/string_util.h" | 5 #include "base/string_util.h" |
6 #include "media/base/filters.h" | 6 #include "media/base/filters.h" |
7 #include "media/ffmpeg/ffmpeg_common.h" | 7 #include "media/ffmpeg/ffmpeg_common.h" |
8 #include "media/filters/ffmpeg_glue.h" | 8 #include "media/filters/ffmpeg_glue.h" |
9 | 9 |
10 namespace { | 10 namespace { |
11 | 11 |
12 media::FFmpegURLProtocol* ToProtocol(void* data) { | 12 media::FFmpegURLProtocol* ToProtocol(void* data) { |
13 return reinterpret_cast<media::FFmpegURLProtocol*>(data); | 13 return reinterpret_cast<media::FFmpegURLProtocol*>(data); |
14 } | 14 } |
15 | 15 |
16 // FFmpeg protocol interface. | 16 // FFmpeg protocol interface. |
17 int OpenContext(URLContext* h, const char* filename, int flags) { | 17 int OpenContext(URLContext* h, const char* filename, int flags) { |
18 media::FFmpegURLProtocol* protocol; | 18 media::FFmpegURLProtocol* protocol; |
19 media::FFmpegGlue::get()->GetProtocol(filename, &protocol); | 19 media::FFmpegGlue::GetInstance()->GetProtocol(filename, &protocol); |
20 if (!protocol) | 20 if (!protocol) |
21 return AVERROR_IO; | 21 return AVERROR_IO; |
22 | 22 |
23 h->priv_data = protocol; | 23 h->priv_data = protocol; |
24 h->flags = URL_RDONLY; | 24 h->flags = URL_RDONLY; |
25 h->is_streamed = protocol->IsStreaming(); | 25 h->is_streamed = protocol->IsStreaming(); |
26 return 0; | 26 return 0; |
27 } | 27 } |
28 | 28 |
29 int ReadContext(URLContext* h, unsigned char* buf, int size) { | 29 int ReadContext(URLContext* h, unsigned char* buf, int size) { |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
138 av_lockmgr_register(&LockManagerOperation); | 138 av_lockmgr_register(&LockManagerOperation); |
139 | 139 |
140 // Now register the rest of FFmpeg. | 140 // Now register the rest of FFmpeg. |
141 av_register_all(); | 141 av_register_all(); |
142 } | 142 } |
143 | 143 |
144 FFmpegGlue::~FFmpegGlue() { | 144 FFmpegGlue::~FFmpegGlue() { |
145 av_lockmgr_register(NULL); | 145 av_lockmgr_register(NULL); |
146 } | 146 } |
147 | 147 |
| 148 // static |
| 149 FFmpegGlue* FFmpegGlue::GetInstance() { |
| 150 return Singleton<FFmpegGlue>::get(); |
| 151 } |
| 152 |
148 std::string FFmpegGlue::AddProtocol(FFmpegURLProtocol* protocol) { | 153 std::string FFmpegGlue::AddProtocol(FFmpegURLProtocol* protocol) { |
149 AutoLock auto_lock(lock_); | 154 AutoLock auto_lock(lock_); |
150 std::string key = GetProtocolKey(protocol); | 155 std::string key = GetProtocolKey(protocol); |
151 if (protocols_.find(key) == protocols_.end()) { | 156 if (protocols_.find(key) == protocols_.end()) { |
152 protocols_[key] = protocol; | 157 protocols_[key] = protocol; |
153 } | 158 } |
154 return key; | 159 return key; |
155 } | 160 } |
156 | 161 |
157 void FFmpegGlue::RemoveProtocol(FFmpegURLProtocol* protocol) { | 162 void FFmpegGlue::RemoveProtocol(FFmpegURLProtocol* protocol) { |
(...skipping 20 matching lines...) Expand all Loading... |
178 } | 183 } |
179 | 184 |
180 std::string FFmpegGlue::GetProtocolKey(FFmpegURLProtocol* protocol) { | 185 std::string FFmpegGlue::GetProtocolKey(FFmpegURLProtocol* protocol) { |
181 // Use the FFmpegURLProtocol's memory address to generate the unique string. | 186 // Use the FFmpegURLProtocol's memory address to generate the unique string. |
182 // This also has the nice property that adding the same FFmpegURLProtocol | 187 // This also has the nice property that adding the same FFmpegURLProtocol |
183 // reference will not generate duplicate entries. | 188 // reference will not generate duplicate entries. |
184 return StringPrintf("%s://%p", kProtocol, static_cast<void*>(protocol)); | 189 return StringPrintf("%s://%p", kProtocol, static_cast<void*>(protocol)); |
185 } | 190 } |
186 | 191 |
187 } // namespace media | 192 } // namespace media |
OLD | NEW |