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

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

Issue 13813016: Remove reference counting from media::Demuxer and friends. (Closed) Base URL: http://git.chromium.org/chromium/src.git@vd_scoped
Patch Set: demuxer only Created 7 years, 8 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <algorithm> 5 #include <algorithm>
6 #include <deque> 6 #include <deque>
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 // FFmpeg, pipeline and filter host mocks. 62 // FFmpeg, pipeline and filter host mocks.
63 class FFmpegDemuxerTest : public testing::Test { 63 class FFmpegDemuxerTest : public testing::Test {
64 protected: 64 protected:
65 FFmpegDemuxerTest() {} 65 FFmpegDemuxerTest() {}
66 66
67 virtual ~FFmpegDemuxerTest() { 67 virtual ~FFmpegDemuxerTest() {
68 if (demuxer_) { 68 if (demuxer_) {
69 demuxer_->Stop(MessageLoop::QuitWhenIdleClosure()); 69 demuxer_->Stop(MessageLoop::QuitWhenIdleClosure());
70 message_loop_.Run(); 70 message_loop_.Run();
71 } 71 }
72
73 demuxer_ = NULL;
74 } 72 }
75 73
76 void CreateDemuxer(const std::string& name) { 74 void CreateDemuxer(const std::string& name) {
77 CHECK(!demuxer_); 75 CHECK(!demuxer_);
78 76
79 EXPECT_CALL(host_, SetTotalBytes(_)).Times(AnyNumber()); 77 EXPECT_CALL(host_, SetTotalBytes(_)).Times(AnyNumber());
80 EXPECT_CALL(host_, AddBufferedByteRange(_, _)).Times(AnyNumber()); 78 EXPECT_CALL(host_, AddBufferedByteRange(_, _)).Times(AnyNumber());
81 EXPECT_CALL(host_, AddBufferedTimeRange(_, _)).Times(AnyNumber()); 79 EXPECT_CALL(host_, AddBufferedTimeRange(_, _)).Times(AnyNumber());
82 80
83 CreateDataSource(name); 81 CreateDataSource(name);
84 82
85 media::FFmpegNeedKeyCB need_key_cb = 83 media::FFmpegNeedKeyCB need_key_cb =
86 base::Bind(&FFmpegDemuxerTest::NeedKeyCB, base::Unretained(this)); 84 base::Bind(&FFmpegDemuxerTest::NeedKeyCB, base::Unretained(this));
87 demuxer_ = new FFmpegDemuxer(message_loop_.message_loop_proxy(), 85 demuxer_.reset(new FFmpegDemuxer(
88 data_source_, 86 message_loop_.message_loop_proxy(), data_source_, need_key_cb));
89 need_key_cb);
90 } 87 }
91 88
92 MOCK_METHOD1(CheckPoint, void(int v)); 89 MOCK_METHOD1(CheckPoint, void(int v));
93 90
94 void InitializeDemuxer() { 91 void InitializeDemuxer() {
95 EXPECT_CALL(host_, SetDuration(_)); 92 EXPECT_CALL(host_, SetDuration(_));
96 WaitableMessageLoopEvent event; 93 WaitableMessageLoopEvent event;
97 demuxer_->Initialize(&host_, event.GetPipelineStatusCB()); 94 demuxer_->Initialize(&host_, event.GetPipelineStatusCB());
98 event.RunAndWaitForStatus(PIPELINE_OK); 95 event.RunAndWaitForStatus(PIPELINE_OK);
99 } 96 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 } 138 }
142 139
143 // Accessor to demuxer internals. 140 // Accessor to demuxer internals.
144 void set_duration_known(bool duration_known) { 141 void set_duration_known(bool duration_known) {
145 demuxer_->duration_known_ = duration_known; 142 demuxer_->duration_known_ = duration_known;
146 } 143 }
147 144
148 bool IsStreamStopped(DemuxerStream::Type type) { 145 bool IsStreamStopped(DemuxerStream::Type type) {
149 DemuxerStream* stream = demuxer_->GetStream(type); 146 DemuxerStream* stream = demuxer_->GetStream(type);
150 CHECK(stream); 147 CHECK(stream);
151 return static_cast<FFmpegDemuxerStream*>(stream)->stopped_; 148 return !static_cast<FFmpegDemuxerStream*>(stream)->demuxer_;
152 } 149 }
153 150
154 // Fixture members. 151 // Fixture members.
155 scoped_refptr<FileDataSource> data_source_; 152 scoped_refptr<FileDataSource> data_source_;
156 scoped_refptr<FFmpegDemuxer> demuxer_; 153 scoped_ptr<FFmpegDemuxer> demuxer_;
157 StrictMock<MockDemuxerHost> host_; 154 StrictMock<MockDemuxerHost> host_;
158 MessageLoop message_loop_; 155 MessageLoop message_loop_;
159 156
160 AVFormatContext* format_context() { 157 AVFormatContext* format_context() {
161 return demuxer_->glue_->format_context(); 158 return demuxer_->glue_->format_context();
162 } 159 }
163 160
164 void ReadUntilEndOfStream() { 161 void ReadUntilEndOfStream() {
165 // We should expect an end of stream buffer. 162 // We should expect an end of stream buffer.
166 scoped_refptr<DemuxerStream> audio = 163 scoped_refptr<DemuxerStream> audio =
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 // Create our mocked callback. The Callback created by base::Bind() will take 498 // Create our mocked callback. The Callback created by base::Bind() will take
502 // ownership of this pointer. 499 // ownership of this pointer.
503 StrictMock<MockReadCB>* callback = new StrictMock<MockReadCB>(); 500 StrictMock<MockReadCB>* callback = new StrictMock<MockReadCB>();
504 501
505 // The callback should be immediately deleted. We'll use a checkpoint to 502 // The callback should be immediately deleted. We'll use a checkpoint to
506 // verify that it has indeed been deleted. 503 // verify that it has indeed been deleted.
507 EXPECT_CALL(*callback, Run(DemuxerStream::kOk, IsEndOfStreamBuffer())); 504 EXPECT_CALL(*callback, Run(DemuxerStream::kOk, IsEndOfStreamBuffer()));
508 EXPECT_CALL(*callback, OnDelete()); 505 EXPECT_CALL(*callback, OnDelete());
509 EXPECT_CALL(*this, CheckPoint(1)); 506 EXPECT_CALL(*this, CheckPoint(1));
510 507
511 // Release the reference to the demuxer. This should also destroy it. 508 // Destroy the demuxer. |audio| now has a demuxer_ pointer to invalid memory.
512 demuxer_ = NULL; 509 demuxer_.reset();
513 // |audio| now has a demuxer_ pointer to invalid memory.
514 510
515 // Attempt the read... 511 // Attempt the read...
516 audio->Read(base::Bind(&MockReadCB::Run, callback)); 512 audio->Read(base::Bind(&MockReadCB::Run, callback));
517 513
518 message_loop_.RunUntilIdle(); 514 message_loop_.RunUntilIdle();
519 515
520 // ...and verify that |callback| was deleted. 516 // ...and verify that |callback| was deleted.
521 CheckPoint(1); 517 CheckPoint(1);
522 } 518 }
523 519
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
651 TEST_F(FFmpegDemuxerTest, MP4_ZeroStszEntry) { 647 TEST_F(FFmpegDemuxerTest, MP4_ZeroStszEntry) {
652 #if !defined(USE_PROPRIETARY_CODECS) 648 #if !defined(USE_PROPRIETARY_CODECS)
653 return; 649 return;
654 #endif 650 #endif
655 CreateDemuxer("bear-1280x720-zero-stsz-entry.mp4"); 651 CreateDemuxer("bear-1280x720-zero-stsz-entry.mp4");
656 InitializeDemuxer(); 652 InitializeDemuxer();
657 ReadUntilEndOfStream(); 653 ReadUntilEndOfStream();
658 } 654 }
659 655
660 } // namespace media 656 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698