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

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

Issue 854006: Revert 41386 - Removed custom FFmpegLock. Removed ffmpeg headers from third_p... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 10 years, 9 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
« no previous file with comments | « media/filters/ffmpeg_demuxer.cc ('k') | media/filters/ffmpeg_video_decode_engine.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 if (new_offset < 0) 74 if (new_offset < 0)
75 new_offset = AVERROR_IO; 75 new_offset = AVERROR_IO;
76 return new_offset; 76 return new_offset;
77 } 77 }
78 78
79 int CloseContext(URLContext* h) { 79 int CloseContext(URLContext* h) {
80 h->priv_data = NULL; 80 h->priv_data = NULL;
81 return 0; 81 return 0;
82 } 82 }
83 83
84 int LockManagerOperation(void** lock, enum AVLockOp op) {
85 switch (op) {
86 case AV_LOCK_CREATE:
87 *lock = new Lock();
88 if (!*lock)
89 return 1;
90 return 0;
91
92 case AV_LOCK_OBTAIN:
93 static_cast<Lock*>(*lock)->Acquire();
94 return 0;
95
96 case AV_LOCK_RELEASE:
97 static_cast<Lock*>(*lock)->Release();
98 return 0;
99
100 case AV_LOCK_DESTROY:
101 delete static_cast<Lock*>(*lock);
102 *lock = NULL;
103 return 0;
104 }
105 return 1;
106 }
107
108 } // namespace 84 } // namespace
109 85
110 //------------------------------------------------------------------------------ 86 //------------------------------------------------------------------------------
111 87
112 namespace media { 88 namespace media {
113 89
114 // Use the HTTP protocol to avoid any file path separator issues. 90 // Use the HTTP protocol to avoid any file path separator issues.
115 static const char kProtocol[] = "http"; 91 static const char kProtocol[] = "http";
116 92
117 // Fill out our FFmpeg protocol definition. 93 // Fill out our FFmpeg protocol definition.
118 static URLProtocol kFFmpegURLProtocol = { 94 static URLProtocol kFFmpegURLProtocol = {
119 kProtocol, 95 kProtocol,
120 &OpenContext, 96 &OpenContext,
121 &ReadContext, 97 &ReadContext,
122 &WriteContext, 98 &WriteContext,
123 &SeekContext, 99 &SeekContext,
124 &CloseContext, 100 &CloseContext,
125 }; 101 };
126 102
127 FFmpegGlue::FFmpegGlue() { 103 FFmpegGlue::FFmpegGlue() {
128 // Before doing anything disable logging as it interferes with layout tests. 104 // Before doing anything disable logging as it interferes with layout tests.
129 av_log_set_level(AV_LOG_QUIET); 105 av_log_set_level(AV_LOG_QUIET);
130 106
131 // Register our protocol glue code with FFmpeg. 107 // Register our protocol glue code with FFmpeg.
132 avcodec_init(); 108 avcodec_init();
133 av_register_protocol(&kFFmpegURLProtocol); 109 av_register_protocol(&kFFmpegURLProtocol);
134 av_lockmgr_register(&LockManagerOperation);
135 110
136 // Now register the rest of FFmpeg. 111 // Now register the rest of FFmpeg.
137 av_register_all(); 112 av_register_all();
138 } 113 }
139 114
140 FFmpegGlue::~FFmpegGlue() { 115 FFmpegGlue::~FFmpegGlue() {
141 av_lockmgr_register(NULL);
142 } 116 }
143 117
144 std::string FFmpegGlue::AddProtocol(FFmpegURLProtocol* protocol) { 118 std::string FFmpegGlue::AddProtocol(FFmpegURLProtocol* protocol) {
145 AutoLock auto_lock(lock_); 119 AutoLock auto_lock(lock_);
146 std::string key = GetProtocolKey(protocol); 120 std::string key = GetProtocolKey(protocol);
147 if (protocols_.find(key) == protocols_.end()) { 121 if (protocols_.find(key) == protocols_.end()) {
148 protocols_[key] = protocol; 122 protocols_[key] = protocol;
149 } 123 }
150 return key; 124 return key;
151 } 125 }
(...skipping 22 matching lines...) Expand all
174 } 148 }
175 149
176 std::string FFmpegGlue::GetProtocolKey(FFmpegURLProtocol* protocol) { 150 std::string FFmpegGlue::GetProtocolKey(FFmpegURLProtocol* protocol) {
177 // Use the FFmpegURLProtocol's memory address to generate the unique string. 151 // Use the FFmpegURLProtocol's memory address to generate the unique string.
178 // This also has the nice property that adding the same FFmpegURLProtocol 152 // This also has the nice property that adding the same FFmpegURLProtocol
179 // reference will not generate duplicate entries. 153 // reference will not generate duplicate entries.
180 return StringPrintf("%s://%p", kProtocol, static_cast<void*>(protocol)); 154 return StringPrintf("%s://%p", kProtocol, static_cast<void*>(protocol));
181 } 155 }
182 156
183 } // namespace media 157 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/ffmpeg_demuxer.cc ('k') | media/filters/ffmpeg_video_decode_engine.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698