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

Side by Side Diff: media/filters/ffmpeg_glue.cc

Issue 9317096: Fix media code to work with new ffmpeg. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix deprecated methods. Created 8 years, 10 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 (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "media/filters/ffmpeg_glue.h" 5 #include "media/filters/ffmpeg_glue.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/stringprintf.h" 8 #include "base/stringprintf.h"
9 #include "media/base/filters.h" 9 #include "media/base/filters.h"
10 #include "media/ffmpeg/ffmpeg_common.h" 10 #include "media/ffmpeg/ffmpeg_common.h"
11 11
12 namespace media { 12 namespace media {
13 13
14 static FFmpegURLProtocol* ToProtocol(void* data) { 14 static FFmpegURLProtocol* ToProtocol(void* data) {
15 return reinterpret_cast<FFmpegURLProtocol*>(data); 15 return reinterpret_cast<FFmpegURLProtocol*>(data);
16 } 16 }
17 17
18 // FFmpeg protocol interface. 18 // FFmpeg protocol interface.
19 static int OpenContext(URLContext* h, const char* filename, int flags) { 19 static int OpenContext(URLContext* h, const char* filename, int flags) {
20 FFmpegURLProtocol* protocol; 20 FFmpegURLProtocol* protocol;
21 FFmpegGlue::GetInstance()->GetProtocol(filename, &protocol); 21 FFmpegGlue::GetInstance()->GetProtocol(filename, &protocol);
22 if (!protocol) 22 if (!protocol)
23 return AVERROR(EIO); 23 return AVERROR(EIO);
24 24
25 h->priv_data = protocol; 25 h->priv_data = protocol;
26 h->flags = URL_RDONLY; 26 h->flags = AVIO_FLAG_READ;
27 h->is_streamed = protocol->IsStreaming(); 27 h->is_streamed = protocol->IsStreaming();
28 return 0; 28 return 0;
29 } 29 }
30 30
31 static int Open2Context(URLContext* h, const char* filename, int flags,
32 AVDictionary **options) {
33 // TODO(dalecurtis): This is probably not right...
34 return OpenContext(h, filename, flags);
35 }
36
31 static int ReadContext(URLContext* h, unsigned char* buf, int size) { 37 static int ReadContext(URLContext* h, unsigned char* buf, int size) {
32 FFmpegURLProtocol* protocol = ToProtocol(h->priv_data); 38 FFmpegURLProtocol* protocol = ToProtocol(h->priv_data);
33 int result = protocol->Read(size, buf); 39 int result = protocol->Read(size, buf);
34 if (result < 0) 40 if (result < 0)
35 result = AVERROR(EIO); 41 result = AVERROR(EIO);
36 return result; 42 return result;
37 } 43 }
38 44
39 #if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(52, 68, 0) 45 #if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(52, 68, 0)
40 static int WriteContext(URLContext* h, const unsigned char* buf, int size) { 46 static int WriteContext(URLContext* h, const unsigned char* buf, int size) {
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 return 1; 117 return 1;
112 } 118 }
113 119
114 // Use the HTTP protocol to avoid any file path separator issues. 120 // Use the HTTP protocol to avoid any file path separator issues.
115 static const char kProtocol[] = "http"; 121 static const char kProtocol[] = "http";
116 122
117 // Fill out our FFmpeg protocol definition. 123 // Fill out our FFmpeg protocol definition.
118 static URLProtocol kFFmpegURLProtocol = { 124 static URLProtocol kFFmpegURLProtocol = {
119 kProtocol, 125 kProtocol,
120 &OpenContext, 126 &OpenContext,
127 &Open2Context,
scherkus (not reviewing) 2012/02/06 21:13:49 ditto for NULL here
DaleCurtis 2012/02/07 19:09:13 Done.
121 &ReadContext, 128 &ReadContext,
122 &WriteContext, 129 &WriteContext,
123 &SeekContext, 130 &SeekContext,
124 &CloseContext, 131 &CloseContext,
125 }; 132 };
126 133
127 FFmpegGlue::FFmpegGlue() { 134 FFmpegGlue::FFmpegGlue() {
128 // Before doing anything disable logging as it interferes with layout tests. 135 // Before doing anything disable logging as it interferes with layout tests.
129 av_log_set_level(AV_LOG_QUIET); 136 av_log_set_level(AV_LOG_QUIET);
130 137
131 // Register our protocol glue code with FFmpeg. 138 // Register our protocol glue code with FFmpeg.
132 avcodec_init(); 139 ffurl_register_protocol(&kFFmpegURLProtocol, sizeof(kFFmpegURLProtocol));
133 av_register_protocol2(&kFFmpegURLProtocol, sizeof(kFFmpegURLProtocol));
134 av_lockmgr_register(&LockManagerOperation); 140 av_lockmgr_register(&LockManagerOperation);
135 141
136 // Now register the rest of FFmpeg. 142 // Now register the rest of FFmpeg.
137 av_register_all(); 143 av_register_all();
138 } 144 }
139 145
140 FFmpegGlue::~FFmpegGlue() { 146 FFmpegGlue::~FFmpegGlue() {
141 av_lockmgr_register(NULL); 147 av_lockmgr_register(NULL);
142 } 148 }
143 149
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 } 190 }
185 191
186 std::string FFmpegGlue::GetProtocolKey(FFmpegURLProtocol* protocol) { 192 std::string FFmpegGlue::GetProtocolKey(FFmpegURLProtocol* protocol) {
187 // Use the FFmpegURLProtocol's memory address to generate the unique string. 193 // Use the FFmpegURLProtocol's memory address to generate the unique string.
188 // This also has the nice property that adding the same FFmpegURLProtocol 194 // This also has the nice property that adding the same FFmpegURLProtocol
189 // reference will not generate duplicate entries. 195 // reference will not generate duplicate entries.
190 return base::StringPrintf("%s://%p", kProtocol, static_cast<void*>(protocol)); 196 return base::StringPrintf("%s://%p", kProtocol, static_cast<void*>(protocol));
191 } 197 }
192 198
193 } // namespace media 199 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698