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

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

Issue 174027: Fix Issue 160529 in a nice way (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 4 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') | third_party/ffmpeg/avcodec-52.sigs » ('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) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 <deque> 5 #include <deque>
6 6
7 #include "base/thread.h" 7 #include "base/thread.h"
8 #include "media/base/filters.h" 8 #include "media/base/filters.h"
9 #include "media/base/mock_ffmpeg.h" 9 #include "media/base/mock_ffmpeg.h"
10 #include "media/base/mock_filter_host.h" 10 #include "media/base/mock_filter_host.h"
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 // Expect all calls in sequence. 313 // Expect all calls in sequence.
314 InSequence s; 314 InSequence s;
315 315
316 // The demuxer will read a data packet which will get immediately freed, 316 // The demuxer will read a data packet which will get immediately freed,
317 // followed by reading an audio packet... 317 // followed by reading an audio packet...
318 EXPECT_CALL(*MockFFmpeg::get(), AVReadFrame(&format_context_, _)) 318 EXPECT_CALL(*MockFFmpeg::get(), AVReadFrame(&format_context_, _))
319 .WillOnce(CreatePacket(AV_STREAM_DATA, kNullData, 0)); 319 .WillOnce(CreatePacket(AV_STREAM_DATA, kNullData, 0));
320 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket()); 320 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket());
321 EXPECT_CALL(*MockFFmpeg::get(), AVReadFrame(&format_context_, _)) 321 EXPECT_CALL(*MockFFmpeg::get(), AVReadFrame(&format_context_, _))
322 .WillOnce(CreatePacket(AV_STREAM_AUDIO, kAudioData, kDataSize)); 322 .WillOnce(CreatePacket(AV_STREAM_AUDIO, kAudioData, kDataSize));
323 EXPECT_CALL(*MockFFmpeg::get(), AVNewPacket(_, _)).WillOnce(NewPacket()); 323 EXPECT_CALL(*MockFFmpeg::get(), AVDupPacket(_))
324 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket()); 324 .WillOnce(Return(0));
325 325
326 // ...then we'll free it with some sanity checkpoints... 326 // ...then we'll free it with some sanity checkpoints...
327 EXPECT_CALL(*MockFFmpeg::get(), CheckPoint(1)); 327 EXPECT_CALL(*MockFFmpeg::get(), CheckPoint(1));
328 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket()); 328 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket());
329 EXPECT_CALL(*MockFFmpeg::get(), CheckPoint(2)); 329 EXPECT_CALL(*MockFFmpeg::get(), CheckPoint(2));
330 330
331 // ...then we'll read a video packet... 331 // ...then we'll read a video packet...
332 EXPECT_CALL(*MockFFmpeg::get(), AVReadFrame(&format_context_, _)) 332 EXPECT_CALL(*MockFFmpeg::get(), AVReadFrame(&format_context_, _))
333 .WillOnce(CreatePacket(AV_STREAM_VIDEO, kVideoData, kDataSize)); 333 .WillOnce(CreatePacket(AV_STREAM_VIDEO, kVideoData, kDataSize));
334 EXPECT_CALL(*MockFFmpeg::get(), AVNewPacket(_, _)).WillOnce(NewPacket()); 334 EXPECT_CALL(*MockFFmpeg::get(), AVDupPacket(_))
335 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket()); 335 .WillOnce(Return(0));
336 336
337 // ...then we'll free it with some sanity checkpoints... 337 // ...then we'll free it with some sanity checkpoints...
338 EXPECT_CALL(*MockFFmpeg::get(), CheckPoint(3)); 338 EXPECT_CALL(*MockFFmpeg::get(), CheckPoint(3));
339 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket()); 339 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket());
340 EXPECT_CALL(*MockFFmpeg::get(), CheckPoint(4)); 340 EXPECT_CALL(*MockFFmpeg::get(), CheckPoint(4));
341 341
342 // ...then we'll simulate end of stream. Note that a packet isn't "created" 342 // ...then we'll simulate end of stream. Note that a packet isn't "created"
343 // in this situation so there is no outstanding packet. However an end of 343 // in this situation so there is no outstanding packet. However an end of
344 // stream packet is created for each stream, which means av_free_packet() 344 // stream packet is created for each stream, which means av_free_packet()
345 // will still be called twice. 345 // will still be called twice.
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 const int64 kExpectedTimestamp = 1234; 442 const int64 kExpectedTimestamp = 1234;
443 const int64 kExpectedFlags = 0; 443 const int64 kExpectedFlags = 0;
444 444
445 // Expect all calls in sequence. 445 // Expect all calls in sequence.
446 InSequence s; 446 InSequence s;
447 447
448 // First we'll read a video packet that causes two audio packets to be queued 448 // First we'll read a video packet that causes two audio packets to be queued
449 // inside FFmpegDemuxer... 449 // inside FFmpegDemuxer...
450 EXPECT_CALL(*MockFFmpeg::get(), AVReadFrame(&format_context_, _)) 450 EXPECT_CALL(*MockFFmpeg::get(), AVReadFrame(&format_context_, _))
451 .WillOnce(CreatePacket(AV_STREAM_AUDIO, kAudioData, kDataSize)); 451 .WillOnce(CreatePacket(AV_STREAM_AUDIO, kAudioData, kDataSize));
452 EXPECT_CALL(*MockFFmpeg::get(), AVNewPacket(_, _)).WillOnce(NewPacket()); 452 EXPECT_CALL(*MockFFmpeg::get(), AVDupPacket(_))
453 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket()); 453 .WillOnce(Return(0));
454 EXPECT_CALL(*MockFFmpeg::get(), AVReadFrame(&format_context_, _)) 454 EXPECT_CALL(*MockFFmpeg::get(), AVReadFrame(&format_context_, _))
455 .WillOnce(CreatePacket(AV_STREAM_AUDIO, kAudioData, kDataSize)); 455 .WillOnce(CreatePacket(AV_STREAM_AUDIO, kAudioData, kDataSize));
456 EXPECT_CALL(*MockFFmpeg::get(), AVNewPacket(_, _)).WillOnce(NewPacket()); 456 EXPECT_CALL(*MockFFmpeg::get(), AVDupPacket(_))
457 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket()); 457 .WillOnce(Return(0));
458 EXPECT_CALL(*MockFFmpeg::get(), AVReadFrame(&format_context_, _)) 458 EXPECT_CALL(*MockFFmpeg::get(), AVReadFrame(&format_context_, _))
459 .WillOnce(CreatePacket(AV_STREAM_VIDEO, kVideoData, kDataSize)); 459 .WillOnce(CreatePacket(AV_STREAM_VIDEO, kVideoData, kDataSize));
460 EXPECT_CALL(*MockFFmpeg::get(), AVNewPacket(_, _)).WillOnce(NewPacket()); 460 EXPECT_CALL(*MockFFmpeg::get(), AVDupPacket(_))
461 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket()); 461 .WillOnce(Return(0));
462 462
463 // ...then we'll release our video packet... 463 // ...then we'll release our video packet...
464 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket()); 464 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket());
465 EXPECT_CALL(*MockFFmpeg::get(), CheckPoint(1)); 465 EXPECT_CALL(*MockFFmpeg::get(), CheckPoint(1));
466 466
467 // ...then we'll seek, which should release the previously queued packets... 467 // ...then we'll seek, which should release the previously queued packets...
468 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket()); 468 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket());
469 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket()); 469 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket());
470 470
471 // ... then we'll call Seek() to get around the first seek hack... 471 // ... then we'll call Seek() to get around the first seek hack...
(...skipping 10 matching lines...) Expand all
482 482
483 // ...then our callback will be executed... 483 // ...then our callback will be executed...
484 StrictMock<MockFilterCallback> seek_callback; 484 StrictMock<MockFilterCallback> seek_callback;
485 EXPECT_CALL(seek_callback, OnFilterCallback()); 485 EXPECT_CALL(seek_callback, OnFilterCallback());
486 EXPECT_CALL(seek_callback, OnCallbackDestroyed()); 486 EXPECT_CALL(seek_callback, OnCallbackDestroyed());
487 EXPECT_CALL(*MockFFmpeg::get(), CheckPoint(2)); 487 EXPECT_CALL(*MockFFmpeg::get(), CheckPoint(2));
488 488
489 // ...followed by two audio packet reads we'll trigger... 489 // ...followed by two audio packet reads we'll trigger...
490 EXPECT_CALL(*MockFFmpeg::get(), AVReadFrame(&format_context_, _)) 490 EXPECT_CALL(*MockFFmpeg::get(), AVReadFrame(&format_context_, _))
491 .WillOnce(CreatePacket(AV_STREAM_AUDIO, kAudioData, kDataSize)); 491 .WillOnce(CreatePacket(AV_STREAM_AUDIO, kAudioData, kDataSize));
492 EXPECT_CALL(*MockFFmpeg::get(), AVNewPacket(_, _)).WillOnce(NewPacket()); 492 EXPECT_CALL(*MockFFmpeg::get(), AVDupPacket(_))
493 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket()); 493 .WillOnce(Return(0));
494 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket()); 494 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket());
495 EXPECT_CALL(*MockFFmpeg::get(), AVReadFrame(&format_context_, _)) 495 EXPECT_CALL(*MockFFmpeg::get(), AVReadFrame(&format_context_, _))
496 .WillOnce(CreatePacket(AV_STREAM_AUDIO, kAudioData, kDataSize)); 496 .WillOnce(CreatePacket(AV_STREAM_AUDIO, kAudioData, kDataSize));
497 EXPECT_CALL(*MockFFmpeg::get(), AVNewPacket(_, _)).WillOnce(NewPacket()); 497 EXPECT_CALL(*MockFFmpeg::get(), AVDupPacket(_))
498 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket()); 498 .WillOnce(Return(0));
499 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket()); 499 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket());
500 500
501 // ...followed by two video packet reads... 501 // ...followed by two video packet reads...
502 EXPECT_CALL(*MockFFmpeg::get(), AVReadFrame(&format_context_, _)) 502 EXPECT_CALL(*MockFFmpeg::get(), AVReadFrame(&format_context_, _))
503 .WillOnce(CreatePacket(AV_STREAM_VIDEO, kVideoData, kDataSize)); 503 .WillOnce(CreatePacket(AV_STREAM_VIDEO, kVideoData, kDataSize));
504 EXPECT_CALL(*MockFFmpeg::get(), AVNewPacket(_, _)).WillOnce(NewPacket()); 504 EXPECT_CALL(*MockFFmpeg::get(), AVDupPacket(_))
505 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket()); 505 .WillOnce(Return(0));
506 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket()); 506 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket());
507 EXPECT_CALL(*MockFFmpeg::get(), AVReadFrame(&format_context_, _)) 507 EXPECT_CALL(*MockFFmpeg::get(), AVReadFrame(&format_context_, _))
508 .WillOnce(CreatePacket(AV_STREAM_VIDEO, kVideoData, kDataSize)); 508 .WillOnce(CreatePacket(AV_STREAM_VIDEO, kVideoData, kDataSize));
509 EXPECT_CALL(*MockFFmpeg::get(), AVNewPacket(_, _)).WillOnce(NewPacket()); 509 EXPECT_CALL(*MockFFmpeg::get(), AVDupPacket(_))
510 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket()); 510 .WillOnce(Return(0));
511 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket()); 511 EXPECT_CALL(*MockFFmpeg::get(), AVFreePacket(_)).WillOnce(FreePacket());
512 512
513 // ...and finally a sanity checkpoint to make sure everything was released. 513 // ...and finally a sanity checkpoint to make sure everything was released.
514 EXPECT_CALL(*MockFFmpeg::get(), CheckPoint(3)); 514 EXPECT_CALL(*MockFFmpeg::get(), CheckPoint(3));
515 515
516 // Read a video packet and release it. 516 // Read a video packet and release it.
517 scoped_refptr<DemuxerStreamReader> reader(new DemuxerStreamReader()); 517 scoped_refptr<DemuxerStreamReader> reader(new DemuxerStreamReader());
518 reader->Read(video); 518 reader->Read(video);
519 message_loop_.RunAllPending(); 519 message_loop_.RunAllPending();
520 EXPECT_TRUE(reader->called()); 520 EXPECT_TRUE(reader->called());
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
588 reader->buffer()->GetDataSize())); 588 reader->buffer()->GetDataSize()));
589 589
590 // Manually release the last reference to the buffer and verify it was freed. 590 // Manually release the last reference to the buffer and verify it was freed.
591 reader->Reset(); 591 reader->Reset();
592 message_loop_.RunAllPending(); 592 message_loop_.RunAllPending();
593 MockFFmpeg::get()->CheckPoint(3); 593 MockFFmpeg::get()->CheckPoint(3);
594 } 594 }
595 595
596 // A mocked callback specialization for calling Read(). Since RunWithParams() 596 // A mocked callback specialization for calling Read(). Since RunWithParams()
597 // is mocked we don't need to pass in object or method pointers. 597 // is mocked we don't need to pass in object or method pointers.
598 typedef CallbackImpl<FFmpegDemuxerTest, void (FFmpegDemuxerTest::*)(Buffer*), 598 typedef CallbackImpl<FFmpegDemuxerTest,
599 void (FFmpegDemuxerTest::*)(Buffer*),
599 Tuple1<Buffer*> > ReadCallback; 600 Tuple1<Buffer*> > ReadCallback;
600 class MockReadCallback : public ReadCallback { 601 class MockReadCallback : public ReadCallback {
601 public: 602 public:
602 MockReadCallback() 603 MockReadCallback()
603 : ReadCallback(NULL, NULL) { 604 : ReadCallback(NULL, NULL) {
604 } 605 }
605 606
606 virtual ~MockReadCallback() { 607 virtual ~MockReadCallback() {
607 OnDelete(); 608 OnDelete();
608 } 609 }
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
797 { 798 {
798 SCOPED_TRACE(""); 799 SCOPED_TRACE("");
799 InitializeDemuxer(); 800 InitializeDemuxer();
800 } 801 }
801 EXPECT_CALL(*data_source_, IsStreaming()) 802 EXPECT_CALL(*data_source_, IsStreaming())
802 .WillOnce(Return(false)); 803 .WillOnce(Return(false));
803 EXPECT_FALSE(demuxer_->IsStreaming()); 804 EXPECT_FALSE(demuxer_->IsStreaming());
804 } 805 }
805 806
806 } // namespace media 807 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/ffmpeg_demuxer.cc ('k') | third_party/ffmpeg/avcodec-52.sigs » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698