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

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

Issue 6993042: ffmpeg chromium glue (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: once more new test_expectations.txt Created 9 years, 5 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_glue.cc ('k') | media/test/ffmpeg_tests/ffmpeg_tests.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) 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 "base/logging.h" 5 #include "base/logging.h"
6 #include "base/memory/scoped_ptr.h" 6 #include "base/memory/scoped_ptr.h"
7 #include "media/base/mock_ffmpeg.h" 7 #include "media/base/mock_ffmpeg.h"
8 #include "media/base/mock_filters.h" 8 #include "media/base/mock_filters.h"
9 #include "media/ffmpeg/ffmpeg_common.h" 9 #include "media/ffmpeg/ffmpeg_common.h"
10 #include "media/filters/ffmpeg_glue.h" 10 #include "media/filters/ffmpeg_glue.h"
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 scoped_ptr<StrictMock<Destroyable<MockProtocol> > > protocol( 143 scoped_ptr<StrictMock<Destroyable<MockProtocol> > > protocol(
144 new StrictMock<Destroyable<MockProtocol> >()); 144 new StrictMock<Destroyable<MockProtocol> >());
145 EXPECT_CALL(*protocol, IsStreaming()).WillOnce(Return(true)); 145 EXPECT_CALL(*protocol, IsStreaming()).WillOnce(Return(true));
146 std::string key = glue->AddProtocol(protocol.get()); 146 std::string key = glue->AddProtocol(protocol.get());
147 147
148 // Prepare FFmpeg URLContext structure. 148 // Prepare FFmpeg URLContext structure.
149 URLContext context; 149 URLContext context;
150 memset(&context, 0, sizeof(context)); 150 memset(&context, 0, sizeof(context));
151 151
152 // Test opening a URLContext with a protocol that doesn't exist. 152 // Test opening a URLContext with a protocol that doesn't exist.
153 EXPECT_EQ(AVERROR_IO, protocol_->url_open(&context, "foobar", 0)); 153 EXPECT_EQ(AVERROR(EIO), protocol_->url_open(&context, "foobar", 0));
154 154
155 // Test opening a URLContext with our protocol. 155 // Test opening a URLContext with our protocol.
156 EXPECT_EQ(0, protocol_->url_open(&context, key.c_str(), 0)); 156 EXPECT_EQ(0, protocol_->url_open(&context, key.c_str(), 0));
157 EXPECT_EQ(URL_RDONLY, context.flags); 157 EXPECT_EQ(URL_RDONLY, context.flags);
158 EXPECT_EQ(protocol.get(), context.priv_data); 158 EXPECT_EQ(protocol.get(), context.priv_data);
159 EXPECT_TRUE(context.is_streamed); 159 EXPECT_TRUE(context.is_streamed);
160 160
161 // We're going to remove references one by one until the last reference is 161 // We're going to remove references one by one until the last reference is
162 // held by FFmpeg. Once we close the URLContext, the protocol should be 162 // held by FFmpeg. Once we close the URLContext, the protocol should be
163 // destroyed. 163 // destroyed.
(...skipping 19 matching lines...) Expand all
183 TEST_F(FFmpegGlueTest, Write) { 183 TEST_F(FFmpegGlueTest, Write) {
184 scoped_ptr<StrictMock<MockProtocol> > protocol( 184 scoped_ptr<StrictMock<MockProtocol> > protocol(
185 new StrictMock<MockProtocol>()); 185 new StrictMock<MockProtocol>());
186 URLContext context; 186 URLContext context;
187 OpenContext(protocol.get(), &context); 187 OpenContext(protocol.get(), &context);
188 188
189 const int kBufferSize = 16; 189 const int kBufferSize = 16;
190 uint8 buffer[kBufferSize]; 190 uint8 buffer[kBufferSize];
191 191
192 // Writing should always fail and never call the protocol. 192 // Writing should always fail and never call the protocol.
193 EXPECT_EQ(AVERROR_IO, protocol_->url_write(&context, NULL, 0)); 193 EXPECT_EQ(AVERROR(EIO), protocol_->url_write(&context, NULL, 0));
194 EXPECT_EQ(AVERROR_IO, protocol_->url_write(&context, buffer, 0)); 194 EXPECT_EQ(AVERROR(EIO), protocol_->url_write(&context, buffer, 0));
195 EXPECT_EQ(AVERROR_IO, protocol_->url_write(&context, buffer, kBufferSize)); 195 EXPECT_EQ(AVERROR(EIO), protocol_->url_write(&context, buffer, kBufferSize));
196 196
197 // Destroy the protocol. 197 // Destroy the protocol.
198 protocol_->url_close(&context); 198 protocol_->url_close(&context);
199 } 199 }
200 200
201 TEST_F(FFmpegGlueTest, Read) { 201 TEST_F(FFmpegGlueTest, Read) {
202 scoped_ptr<StrictMock<MockProtocol> > protocol( 202 scoped_ptr<StrictMock<MockProtocol> > protocol(
203 new StrictMock<MockProtocol>()); 203 new StrictMock<MockProtocol>());
204 URLContext context; 204 URLContext context;
205 OpenContext(protocol.get(), &context); 205 OpenContext(protocol.get(), &context);
206 206
207 const int kBufferSize = 16; 207 const int kBufferSize = 16;
208 uint8 buffer[kBufferSize]; 208 uint8 buffer[kBufferSize];
209 209
210 // Reads are for the most part straight-through calls to Read(). 210 // Reads are for the most part straight-through calls to Read().
211 InSequence s; 211 InSequence s;
212 EXPECT_CALL(*protocol, Read(0, buffer)) 212 EXPECT_CALL(*protocol, Read(0, buffer))
213 .WillOnce(Return(0)); 213 .WillOnce(Return(0));
214 EXPECT_CALL(*protocol, Read(kBufferSize, buffer)) 214 EXPECT_CALL(*protocol, Read(kBufferSize, buffer))
215 .WillOnce(Return(kBufferSize)); 215 .WillOnce(Return(kBufferSize));
216 EXPECT_CALL(*protocol, Read(kBufferSize, buffer)) 216 EXPECT_CALL(*protocol, Read(kBufferSize, buffer))
217 .WillOnce(Return(DataSource::kReadError)); 217 .WillOnce(Return(DataSource::kReadError));
218 218
219 EXPECT_EQ(0, protocol_->url_read(&context, buffer, 0)); 219 EXPECT_EQ(0, protocol_->url_read(&context, buffer, 0));
220 EXPECT_EQ(kBufferSize, protocol_->url_read(&context, buffer, kBufferSize)); 220 EXPECT_EQ(kBufferSize, protocol_->url_read(&context, buffer, kBufferSize));
221 EXPECT_EQ(AVERROR_IO, protocol_->url_read(&context, buffer, kBufferSize)); 221 EXPECT_EQ(AVERROR(EIO), protocol_->url_read(&context, buffer, kBufferSize));
222 222
223 // Destroy the protocol. 223 // Destroy the protocol.
224 protocol_->url_close(&context); 224 protocol_->url_close(&context);
225 } 225 }
226 226
227 TEST_F(FFmpegGlueTest, Seek) { 227 TEST_F(FFmpegGlueTest, Seek) {
228 scoped_ptr<StrictMock<MockProtocol> > protocol( 228 scoped_ptr<StrictMock<MockProtocol> > protocol(
229 new StrictMock<MockProtocol>()); 229 new StrictMock<MockProtocol>());
230 URLContext context; 230 URLContext context;
231 OpenContext(protocol.get(), &context); 231 OpenContext(protocol.get(), &context);
232 232
233 // SEEK_SET should be a straight-through call to SetPosition(), which when 233 // SEEK_SET should be a straight-through call to SetPosition(), which when
234 // successful will return the result from GetPosition(). 234 // successful will return the result from GetPosition().
235 InSequence s; 235 InSequence s;
236 EXPECT_CALL(*protocol, SetPosition(-16)) 236 EXPECT_CALL(*protocol, SetPosition(-16))
237 .WillOnce(Return(false)); 237 .WillOnce(Return(false));
238 238
239 EXPECT_CALL(*protocol, SetPosition(16)) 239 EXPECT_CALL(*protocol, SetPosition(16))
240 .WillOnce(Return(true)); 240 .WillOnce(Return(true));
241 EXPECT_CALL(*protocol, GetPosition(_)) 241 EXPECT_CALL(*protocol, GetPosition(_))
242 .WillOnce(DoAll(SetArgumentPointee<0>(8), Return(true))); 242 .WillOnce(DoAll(SetArgumentPointee<0>(8), Return(true)));
243 243
244 EXPECT_EQ(AVERROR_IO, protocol_->url_seek(&context, -16, SEEK_SET)); 244 EXPECT_EQ(AVERROR(EIO), protocol_->url_seek(&context, -16, SEEK_SET));
245 EXPECT_EQ(8, protocol_->url_seek(&context, 16, SEEK_SET)); 245 EXPECT_EQ(8, protocol_->url_seek(&context, 16, SEEK_SET));
246 246
247 // SEEK_CUR should call GetPosition() first, and if it succeeds add the offset 247 // SEEK_CUR should call GetPosition() first, and if it succeeds add the offset
248 // to the result then call SetPosition()+GetPosition(). 248 // to the result then call SetPosition()+GetPosition().
249 EXPECT_CALL(*protocol, GetPosition(_)) 249 EXPECT_CALL(*protocol, GetPosition(_))
250 .WillOnce(Return(false)); 250 .WillOnce(Return(false));
251 251
252 EXPECT_CALL(*protocol, GetPosition(_)) 252 EXPECT_CALL(*protocol, GetPosition(_))
253 .WillOnce(DoAll(SetArgumentPointee<0>(8), Return(true))); 253 .WillOnce(DoAll(SetArgumentPointee<0>(8), Return(true)));
254 EXPECT_CALL(*protocol, SetPosition(16)) 254 EXPECT_CALL(*protocol, SetPosition(16))
255 .WillOnce(Return(false)); 255 .WillOnce(Return(false));
256 256
257 EXPECT_CALL(*protocol, GetPosition(_)) 257 EXPECT_CALL(*protocol, GetPosition(_))
258 .WillOnce(DoAll(SetArgumentPointee<0>(8), Return(true))); 258 .WillOnce(DoAll(SetArgumentPointee<0>(8), Return(true)));
259 EXPECT_CALL(*protocol, SetPosition(16)) 259 EXPECT_CALL(*protocol, SetPosition(16))
260 .WillOnce(Return(true)); 260 .WillOnce(Return(true));
261 EXPECT_CALL(*protocol, GetPosition(_)) 261 EXPECT_CALL(*protocol, GetPosition(_))
262 .WillOnce(DoAll(SetArgumentPointee<0>(16), Return(true))); 262 .WillOnce(DoAll(SetArgumentPointee<0>(16), Return(true)));
263 263
264 EXPECT_EQ(AVERROR_IO, protocol_->url_seek(&context, 8, SEEK_CUR)); 264 EXPECT_EQ(AVERROR(EIO), protocol_->url_seek(&context, 8, SEEK_CUR));
265 EXPECT_EQ(AVERROR_IO, protocol_->url_seek(&context, 8, SEEK_CUR)); 265 EXPECT_EQ(AVERROR(EIO), protocol_->url_seek(&context, 8, SEEK_CUR));
266 EXPECT_EQ(16, protocol_->url_seek(&context, 8, SEEK_CUR)); 266 EXPECT_EQ(16, protocol_->url_seek(&context, 8, SEEK_CUR));
267 267
268 // SEEK_END should call GetSize() first, and if it succeeds add the offset 268 // SEEK_END should call GetSize() first, and if it succeeds add the offset
269 // to the result then call SetPosition()+GetPosition(). 269 // to the result then call SetPosition()+GetPosition().
270 EXPECT_CALL(*protocol, GetSize(_)) 270 EXPECT_CALL(*protocol, GetSize(_))
271 .WillOnce(Return(false)); 271 .WillOnce(Return(false));
272 272
273 EXPECT_CALL(*protocol, GetSize(_)) 273 EXPECT_CALL(*protocol, GetSize(_))
274 .WillOnce(DoAll(SetArgumentPointee<0>(16), Return(true))); 274 .WillOnce(DoAll(SetArgumentPointee<0>(16), Return(true)));
275 EXPECT_CALL(*protocol, SetPosition(8)) 275 EXPECT_CALL(*protocol, SetPosition(8))
276 .WillOnce(Return(false)); 276 .WillOnce(Return(false));
277 277
278 EXPECT_CALL(*protocol, GetSize(_)) 278 EXPECT_CALL(*protocol, GetSize(_))
279 .WillOnce(DoAll(SetArgumentPointee<0>(16), Return(true))); 279 .WillOnce(DoAll(SetArgumentPointee<0>(16), Return(true)));
280 EXPECT_CALL(*protocol, SetPosition(8)) 280 EXPECT_CALL(*protocol, SetPosition(8))
281 .WillOnce(Return(true)); 281 .WillOnce(Return(true));
282 EXPECT_CALL(*protocol, GetPosition(_)) 282 EXPECT_CALL(*protocol, GetPosition(_))
283 .WillOnce(DoAll(SetArgumentPointee<0>(8), Return(true))); 283 .WillOnce(DoAll(SetArgumentPointee<0>(8), Return(true)));
284 284
285 EXPECT_EQ(AVERROR_IO, protocol_->url_seek(&context, -8, SEEK_END)); 285 EXPECT_EQ(AVERROR(EIO), protocol_->url_seek(&context, -8, SEEK_END));
286 EXPECT_EQ(AVERROR_IO, protocol_->url_seek(&context, -8, SEEK_END)); 286 EXPECT_EQ(AVERROR(EIO), protocol_->url_seek(&context, -8, SEEK_END));
287 EXPECT_EQ(8, protocol_->url_seek(&context, -8, SEEK_END)); 287 EXPECT_EQ(8, protocol_->url_seek(&context, -8, SEEK_END));
288 288
289 // AVSEEK_SIZE should be a straight-through call to GetSize(). 289 // AVSEEK_SIZE should be a straight-through call to GetSize().
290 EXPECT_CALL(*protocol, GetSize(_)) 290 EXPECT_CALL(*protocol, GetSize(_))
291 .WillOnce(Return(false)); 291 .WillOnce(Return(false));
292 292
293 EXPECT_CALL(*protocol, GetSize(_)) 293 EXPECT_CALL(*protocol, GetSize(_))
294 .WillOnce(DoAll(SetArgumentPointee<0>(16), Return(true))); 294 .WillOnce(DoAll(SetArgumentPointee<0>(16), Return(true)));
295 295
296 EXPECT_EQ(AVERROR_IO, protocol_->url_seek(&context, 0, AVSEEK_SIZE)); 296 EXPECT_EQ(AVERROR(EIO), protocol_->url_seek(&context, 0, AVSEEK_SIZE));
297 EXPECT_EQ(16, protocol_->url_seek(&context, 0, AVSEEK_SIZE)); 297 EXPECT_EQ(16, protocol_->url_seek(&context, 0, AVSEEK_SIZE));
298 298
299 // Destroy the protocol. 299 // Destroy the protocol.
300 protocol_->url_close(&context); 300 protocol_->url_close(&context);
301 } 301 }
302 302
303 TEST_F(FFmpegGlueTest, Destroy) { 303 TEST_F(FFmpegGlueTest, Destroy) {
304 // Create our protocol and add them to the glue layer. 304 // Create our protocol and add them to the glue layer.
305 scoped_ptr<StrictMock<Destroyable<MockProtocol> > > protocol( 305 scoped_ptr<StrictMock<Destroyable<MockProtocol> > > protocol(
306 new StrictMock<Destroyable<MockProtocol> >()); 306 new StrictMock<Destroyable<MockProtocol> >());
307 std::string key = FFmpegGlue::GetInstance()->AddProtocol(protocol.get()); 307 std::string key = FFmpegGlue::GetInstance()->AddProtocol(protocol.get());
308 308
309 // We should expect the protocol to get destroyed when the unit test 309 // We should expect the protocol to get destroyed when the unit test
310 // exits. 310 // exits.
311 InSequence s; 311 InSequence s;
312 EXPECT_CALL(mock_ffmpeg_, CheckPoint(0)); 312 EXPECT_CALL(mock_ffmpeg_, CheckPoint(0));
313 EXPECT_CALL(*protocol, OnDestroy()); 313 EXPECT_CALL(*protocol, OnDestroy());
314 314
315 // Remove our own reference, we shouldn't be destroyed yet. 315 // Remove our own reference, we shouldn't be destroyed yet.
316 mock_ffmpeg_.CheckPoint(0); 316 mock_ffmpeg_.CheckPoint(0);
317 protocol.reset(); 317 protocol.reset();
318 318
319 // ~FFmpegGlue() will be called when this unit test finishes execution. By 319 // ~FFmpegGlue() will be called when this unit test finishes execution. By
320 // leaving something inside FFmpegGlue's map we get to test our cleanup code. 320 // leaving something inside FFmpegGlue's map we get to test our cleanup code.
321 } 321 }
322 322
323 } // namespace media 323 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/ffmpeg_glue.cc ('k') | media/test/ffmpeg_tests/ffmpeg_tests.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698