namespace media {
-static const int kNumBuffersInOneConfig = 9;
-static const int kNumBuffersToReadFirst = 5;
-static const int kNumConfigs = 3;
+const int kNumBuffersInOneConfig = 9;
+const int kNumBuffersToReadFirst = 5;
+const int kNumConfigs = 3;
COMPILE_ASSERT(kNumBuffersToReadFirst < kNumBuffersInOneConfig,
do_not_read_too_many_buffers);
COMPILE_ASSERT(kNumConfigs > 0, need_multiple_configs_to_trigger_config_change);
public:
FakeDemuxerStreamTest()
: status_(DemuxerStream::kAborted),
- read_pending_(false) {}
- virtual ~FakeDemuxerStreamTest() {}
+ read_pending_(false),
+ num_buffers_received_(0) {}
+ ~FakeDemuxerStreamTest() override {}
void BufferReady(DemuxerStream::Status status,
const scoped_refptr<DecoderBuffer>& buffer) {
read_pending_ = false;
status_ = status;
buffer_ = buffer;
+ if (status == DemuxerStream::kOk && !buffer->end_of_stream())
+ num_buffers_received_++;
}
enum ReadResult {
new FakeDemuxerStream(kNumConfigs, kNumBuffersInOneConfig, false));
for (int i = 0; i < kNumBuffersToReadFirst; ++i)
ReadAndExpect(OK);
+ DCHECK_EQ(kNumBuffersToReadFirst, num_buffers_received_);
}
void EnterBeforeEOSState() {
stream_.reset(new FakeDemuxerStream(1, kNumBuffersInOneConfig, false));
for (int i = 0; i < kNumBuffersInOneConfig; ++i)
ReadAndExpect(OK);
+ DCHECK_EQ(kNumBuffersInOneConfig, num_buffers_received_);
}
void ExpectReadResult(ReadResult result) {
ExpectReadResult(ABORTED);
}
- void TestRead(int num_configs,
- int num_buffers_in_one_config,
- bool is_encrypted) {
- stream_.reset(new FakeDemuxerStream(
- num_configs, num_buffers_in_one_config, is_encrypted));
-
- int num_buffers_received = 0;
-
- const VideoDecoderConfig& config = stream_->video_decoder_config();
- EXPECT_TRUE(config.IsValidConfig());
- EXPECT_EQ(is_encrypted, config.is_encrypted());
-
+ void ReadAllBuffers(int num_configs, int num_buffers_in_one_config) {
+ DCHECK_EQ(0, num_buffers_received_);
for (int i = 0; i < num_configs; ++i) {
for (int j = 0; j < num_buffers_in_one_config; ++j) {
ReadAndExpect(OK);
- num_buffers_received++;
- EXPECT_EQ(num_buffers_received, stream_->num_buffers_returned());
+ EXPECT_EQ(num_buffers_received_, stream_->num_buffers_returned());
}
if (i == num_configs - 1)
// Will always get EOS after we hit EOS.
ReadAndExpect(EOS);
- EXPECT_EQ(num_configs * num_buffers_in_one_config, num_buffers_received);
+ EXPECT_EQ(num_configs * num_buffers_in_one_config, num_buffers_received_);
+ }
+
+ void TestRead(int num_configs,
+ int num_buffers_in_one_config,
+ bool is_encrypted) {
+ stream_.reset(new FakeDemuxerStream(
+ num_configs, num_buffers_in_one_config, is_encrypted));
+
+ const VideoDecoderConfig& config = stream_->video_decoder_config();
+ EXPECT_TRUE(config.IsValidConfig());
+ EXPECT_EQ(is_encrypted, config.is_encrypted());
+
+ ReadAllBuffers(num_configs, num_buffers_in_one_config);
}
base::MessageLoop message_loop_;
ReadAndExpect(EOS);
}
+TEST_F(FakeDemuxerStreamTest, SeekToStart_Normal) {
+ EnterNormalReadState();
+ stream_->SeekToStart();
+ num_buffers_received_ = 0;
+ ReadAllBuffers(kNumConfigs, kNumBuffersInOneConfig);
+}
+
+TEST_F(FakeDemuxerStreamTest, SeekToStart_BeforeEOS) {
+ EnterBeforeEOSState();
+ stream_->SeekToStart();
+ num_buffers_received_ = 0;
+ ReadAllBuffers(1, kNumBuffersInOneConfig);
+}
+
+TEST_F(FakeDemuxerStreamTest, SeekToStart_AfterEOS) {
+ TestRead(3, 5, false);
+ stream_->SeekToStart();
+ num_buffers_received_ = 0;
+ ReadAllBuffers(3, 5);
+}
+
} // namespace media