| OLD | NEW |
| 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/singleton.h" | 7 #include "base/singleton.h" |
| 8 #include "base/tuple.h" | 8 #include "base/tuple.h" |
| 9 #include "media/base/filter_host.h" | 9 #include "media/base/filter_host.h" |
| 10 #include "media/base/filters.h" | 10 #include "media/base/filters.h" |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 261 factory_ = FFmpegDemuxer::CreateFilterFactory(); | 261 factory_ = FFmpegDemuxer::CreateFilterFactory(); |
| 262 MediaFormat media_format; | 262 MediaFormat media_format; |
| 263 media_format.SetAsString(MediaFormat::kMimeType, | 263 media_format.SetAsString(MediaFormat::kMimeType, |
| 264 mime_type::kApplicationOctetStream); | 264 mime_type::kApplicationOctetStream); |
| 265 demuxer_ = factory_->Create<Demuxer>(media_format); | 265 demuxer_ = factory_->Create<Demuxer>(media_format); |
| 266 DCHECK(demuxer_); | 266 DCHECK(demuxer_); |
| 267 | 267 |
| 268 // Prepare a filter host and data source for the demuxer. | 268 // Prepare a filter host and data source for the demuxer. |
| 269 pipeline_.reset(new MockPipeline()); | 269 pipeline_.reset(new MockPipeline()); |
| 270 filter_host_.reset(new MockFilterHost<Demuxer>(pipeline_.get(), demuxer_)); | 270 filter_host_.reset(new MockFilterHost<Demuxer>(pipeline_.get(), demuxer_)); |
| 271 MockFilterConfig config; | 271 old_mocks::MockFilterConfig config; |
| 272 data_source_ = new MockDataSource(&config); | 272 data_source_ = new old_mocks::MockDataSource(&config); |
| 273 } | 273 } |
| 274 | 274 |
| 275 virtual void TearDown() { | 275 virtual void TearDown() { |
| 276 // Call Stop() to shut down internal threads. | 276 // Call Stop() to shut down internal threads. |
| 277 demuxer_->Stop(); | 277 demuxer_->Stop(); |
| 278 } | 278 } |
| 279 | 279 |
| 280 // Fixture members. | 280 // Fixture members. |
| 281 scoped_refptr<FilterFactory> factory_; | 281 scoped_refptr<FilterFactory> factory_; |
| 282 scoped_refptr<Demuxer> demuxer_; | 282 scoped_refptr<Demuxer> demuxer_; |
| 283 scoped_ptr<MockPipeline> pipeline_; | 283 scoped_ptr<MockPipeline> pipeline_; |
| 284 scoped_ptr< MockFilterHost<Demuxer> > filter_host_; | 284 scoped_ptr<MockFilterHost<Demuxer> > filter_host_; |
| 285 scoped_refptr<MockDataSource> data_source_; | 285 scoped_refptr<old_mocks::MockDataSource> data_source_; |
| 286 | 286 |
| 287 private: | 287 private: |
| 288 static void InitializeFFmpegMocks() { | 288 static void InitializeFFmpegMocks() { |
| 289 // Initialize function return codes. | 289 // Initialize function return codes. |
| 290 g_av_open_input_file = 0; | 290 g_av_open_input_file = 0; |
| 291 g_av_find_stream_info = 0; | 291 g_av_find_stream_info = 0; |
| 292 g_av_read_frame = 0; | 292 g_av_read_frame = 0; |
| 293 | 293 |
| 294 // Initialize AVFormatContext structure. | 294 // Initialize AVFormatContext structure. |
| 295 memset(&g_format, 0, sizeof(g_format)); | 295 memset(&g_format, 0, sizeof(g_format)); |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 393 EXPECT_TRUE(demuxer_->Initialize(data_source_.get())); | 393 EXPECT_TRUE(demuxer_->Initialize(data_source_.get())); |
| 394 EXPECT_TRUE(filter_host_->WaitForInitialized()); | 394 EXPECT_TRUE(filter_host_->WaitForInitialized()); |
| 395 EXPECT_TRUE(filter_host_->IsInitialized()); | 395 EXPECT_TRUE(filter_host_->IsInitialized()); |
| 396 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError()); | 396 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError()); |
| 397 | 397 |
| 398 // Since we ignore data streams, the duration should be equal to the video | 398 // Since we ignore data streams, the duration should be equal to the video |
| 399 // stream's duration. | 399 // stream's duration. |
| 400 EXPECT_EQ(g_streams[1].duration, pipeline_->GetDuration().InMicroseconds()); | 400 EXPECT_EQ(g_streams[1].duration, pipeline_->GetDuration().InMicroseconds()); |
| 401 | 401 |
| 402 // Verify that 2 out of 3 streams were created. | 402 // Verify that 2 out of 3 streams were created. |
| 403 EXPECT_EQ(2, demuxer_->GetNumberOfStreams()); | 403 EXPECT_EQ(2u, demuxer_->GetNumberOfStreams()); |
| 404 | 404 |
| 405 // First stream should be video and support FFmpegDemuxerStream interface. | 405 // First stream should be video and support FFmpegDemuxerStream interface. |
| 406 scoped_refptr<DemuxerStream> stream = demuxer_->GetStream(0); | 406 scoped_refptr<DemuxerStream> stream = demuxer_->GetStream(0); |
| 407 AVStreamProvider* av_stream_provider = NULL; | 407 AVStreamProvider* av_stream_provider = NULL; |
| 408 ASSERT_TRUE(stream); | 408 ASSERT_TRUE(stream); |
| 409 std::string mime_type; | 409 std::string mime_type; |
| 410 EXPECT_TRUE( | 410 EXPECT_TRUE( |
| 411 stream->media_format().GetAsString(MediaFormat::kMimeType, &mime_type)); | 411 stream->media_format().GetAsString(MediaFormat::kMimeType, &mime_type)); |
| 412 EXPECT_STREQ(mime_type::kFFmpegVideo, mime_type.c_str()); | 412 EXPECT_STREQ(mime_type::kFFmpegVideo, mime_type.c_str()); |
| 413 EXPECT_TRUE(stream->QueryInterface(&av_stream_provider)); | 413 EXPECT_TRUE(stream->QueryInterface(&av_stream_provider)); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 452 g_streams[2].duration = 10; | 452 g_streams[2].duration = 10; |
| 453 g_streams[2].codec = &g_video_codec; | 453 g_streams[2].codec = &g_video_codec; |
| 454 | 454 |
| 455 // Initialize the demuxer. | 455 // Initialize the demuxer. |
| 456 EXPECT_TRUE(demuxer_->Initialize(data_source_.get())); | 456 EXPECT_TRUE(demuxer_->Initialize(data_source_.get())); |
| 457 EXPECT_TRUE(filter_host_->WaitForInitialized()); | 457 EXPECT_TRUE(filter_host_->WaitForInitialized()); |
| 458 EXPECT_TRUE(filter_host_->IsInitialized()); | 458 EXPECT_TRUE(filter_host_->IsInitialized()); |
| 459 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError()); | 459 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError()); |
| 460 | 460 |
| 461 // Verify both streams were created. | 461 // Verify both streams were created. |
| 462 EXPECT_EQ(2, demuxer_->GetNumberOfStreams()); | 462 EXPECT_EQ(2u, demuxer_->GetNumberOfStreams()); |
| 463 | 463 |
| 464 // Get our streams. | 464 // Get our streams. |
| 465 scoped_refptr<DemuxerStream> audio_stream = demuxer_->GetStream(kAudio); | 465 scoped_refptr<DemuxerStream> audio_stream = demuxer_->GetStream(kAudio); |
| 466 scoped_refptr<DemuxerStream> video_stream = demuxer_->GetStream(kVideo); | 466 scoped_refptr<DemuxerStream> video_stream = demuxer_->GetStream(kVideo); |
| 467 ASSERT_TRUE(audio_stream); | 467 ASSERT_TRUE(audio_stream); |
| 468 ASSERT_TRUE(video_stream); | 468 ASSERT_TRUE(video_stream); |
| 469 | 469 |
| 470 // Prepare data packets, which should all get immediately released. | 470 // Prepare data packets, which should all get immediately released. |
| 471 PacketQueue::get()->Enqueue(kPacketData, kDataSize, audio_data); | 471 PacketQueue::get()->Enqueue(kPacketData, kDataSize, audio_data); |
| 472 PacketQueue::get()->Enqueue(kPacketData, kDataSize, audio_data); | 472 PacketQueue::get()->Enqueue(kPacketData, kDataSize, audio_data); |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 648 g_streams[0].codec = &g_audio_codec; | 648 g_streams[0].codec = &g_audio_codec; |
| 649 g_audio_codec.codec_id = CODEC_ID_MP3; | 649 g_audio_codec.codec_id = CODEC_ID_MP3; |
| 650 | 650 |
| 651 // Initialize the demuxer. | 651 // Initialize the demuxer. |
| 652 EXPECT_TRUE(demuxer_->Initialize(data_source_.get())); | 652 EXPECT_TRUE(demuxer_->Initialize(data_source_.get())); |
| 653 EXPECT_TRUE(filter_host_->WaitForInitialized()); | 653 EXPECT_TRUE(filter_host_->WaitForInitialized()); |
| 654 EXPECT_TRUE(filter_host_->IsInitialized()); | 654 EXPECT_TRUE(filter_host_->IsInitialized()); |
| 655 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError()); | 655 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError()); |
| 656 | 656 |
| 657 // Verify the stream was created. | 657 // Verify the stream was created. |
| 658 EXPECT_EQ(1, demuxer_->GetNumberOfStreams()); | 658 EXPECT_EQ(1u, demuxer_->GetNumberOfStreams()); |
| 659 scoped_refptr<DemuxerStream> audio_stream = demuxer_->GetStream(kAudio); | 659 scoped_refptr<DemuxerStream> audio_stream = demuxer_->GetStream(kAudio); |
| 660 ASSERT_TRUE(audio_stream); | 660 ASSERT_TRUE(audio_stream); |
| 661 | 661 |
| 662 // Prepare our test audio packet. | 662 // Prepare our test audio packet. |
| 663 PacketQueue::get()->Enqueue(kPacketAudio, kDataSize, audio_data); | 663 PacketQueue::get()->Enqueue(kPacketAudio, kDataSize, audio_data); |
| 664 | 664 |
| 665 // Audio read should perform a deep copy on the packet and instantly release | 665 // Audio read should perform a deep copy on the packet and instantly release |
| 666 // the original packet. The data pointers should not be the same, but the | 666 // the original packet. The data pointers should not be the same, but the |
| 667 // contents should match. | 667 // contents should match. |
| 668 scoped_refptr<TestReader> reader = new TestReader(); | 668 scoped_refptr<TestReader> reader = new TestReader(); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 680 EXPECT_TRUE(PacketQueue::get()->WaitForOutstandingPackets(0)); | 680 EXPECT_TRUE(PacketQueue::get()->WaitForOutstandingPackets(0)); |
| 681 EXPECT_EQ(1, g_outstanding_packets_av_new_frame); | 681 EXPECT_EQ(1, g_outstanding_packets_av_new_frame); |
| 682 | 682 |
| 683 // Now release our reference, which should destruct the packet allocated by | 683 // Now release our reference, which should destruct the packet allocated by |
| 684 // av_new_packet(). | 684 // av_new_packet(). |
| 685 reader = NULL; | 685 reader = NULL; |
| 686 EXPECT_EQ(0, g_outstanding_packets_av_new_frame); | 686 EXPECT_EQ(0, g_outstanding_packets_av_new_frame); |
| 687 } | 687 } |
| 688 | 688 |
| 689 } // namespace | 689 } // namespace |
| OLD | NEW |