OLD | NEW |
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/files/file_path.h" | 10 #include "base/files/file_path.h" |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
60 }; | 60 }; |
61 | 61 |
62 | 62 |
63 // Fixture class to facilitate writing tests. Takes care of setting up the | 63 // Fixture class to facilitate writing tests. Takes care of setting up the |
64 // FFmpeg, pipeline and filter host mocks. | 64 // FFmpeg, pipeline and filter host mocks. |
65 class FFmpegDemuxerTest : public testing::Test { | 65 class FFmpegDemuxerTest : public testing::Test { |
66 protected: | 66 protected: |
67 FFmpegDemuxerTest() {} | 67 FFmpegDemuxerTest() {} |
68 | 68 |
69 virtual ~FFmpegDemuxerTest() { | 69 virtual ~FFmpegDemuxerTest() { |
70 if (demuxer_) { | 70 if (demuxer_) |
71 WaitableMessageLoopEvent event; | 71 demuxer_->Stop(); |
72 demuxer_->Stop(event.GetClosure()); | |
73 event.RunAndWait(); | |
74 } | |
75 } | 72 } |
76 | 73 |
77 void CreateDemuxer(const std::string& name) { | 74 void CreateDemuxer(const std::string& name) { |
78 CHECK(!demuxer_); | 75 CHECK(!demuxer_); |
79 | 76 |
80 EXPECT_CALL(host_, AddBufferedTimeRange(_, _)).Times(AnyNumber()); | 77 EXPECT_CALL(host_, AddBufferedTimeRange(_, _)).Times(AnyNumber()); |
81 | 78 |
82 CreateDataSource(name); | 79 CreateDataSource(name); |
83 | 80 |
84 Demuxer::NeedKeyCB need_key_cb = | 81 Demuxer::NeedKeyCB need_key_cb = |
(...skipping 661 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
746 TEST_F(FFmpegDemuxerTest, Stop) { | 743 TEST_F(FFmpegDemuxerTest, Stop) { |
747 // Tests that calling Read() on a stopped demuxer stream immediately deletes | 744 // Tests that calling Read() on a stopped demuxer stream immediately deletes |
748 // the callback. | 745 // the callback. |
749 CreateDemuxer("bear-320x240.webm"); | 746 CreateDemuxer("bear-320x240.webm"); |
750 InitializeDemuxer(); | 747 InitializeDemuxer(); |
751 | 748 |
752 // Get our stream. | 749 // Get our stream. |
753 DemuxerStream* audio = demuxer_->GetStream(DemuxerStream::AUDIO); | 750 DemuxerStream* audio = demuxer_->GetStream(DemuxerStream::AUDIO); |
754 ASSERT_TRUE(audio); | 751 ASSERT_TRUE(audio); |
755 | 752 |
756 WaitableMessageLoopEvent event; | 753 demuxer_->Stop(); |
757 demuxer_->Stop(event.GetClosure()); | |
758 event.RunAndWait(); | |
759 | 754 |
760 // Reads after being stopped are all EOS buffers. | 755 // Reads after being stopped are all EOS buffers. |
761 StrictMock<MockReadCB> callback; | 756 StrictMock<MockReadCB> callback; |
762 EXPECT_CALL(callback, Run(DemuxerStream::kOk, IsEndOfStreamBuffer())); | 757 EXPECT_CALL(callback, Run(DemuxerStream::kOk, IsEndOfStreamBuffer())); |
763 | 758 |
764 // Attempt the read... | 759 // Attempt the read... |
765 audio->Read(base::Bind(&MockReadCB::Run, base::Unretained(&callback))); | 760 audio->Read(base::Bind(&MockReadCB::Run, base::Unretained(&callback))); |
766 message_loop_.RunUntilIdle(); | 761 message_loop_.RunUntilIdle(); |
767 | 762 |
768 // Don't let the test call Stop() again. | 763 // Don't let the test call Stop() again. |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
907 InitializeDemuxer(); | 902 InitializeDemuxer(); |
908 | 903 |
909 // Ensure the expected streams are present. | 904 // Ensure the expected streams are present. |
910 DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO); | 905 DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO); |
911 ASSERT_TRUE(stream); | 906 ASSERT_TRUE(stream); |
912 stream->EnableBitstreamConverter(); | 907 stream->EnableBitstreamConverter(); |
913 | 908 |
914 stream->Read(base::Bind(&ValidateAnnexB, stream)); | 909 stream->Read(base::Bind(&ValidateAnnexB, stream)); |
915 message_loop_.Run(); | 910 message_loop_.Run(); |
916 | 911 |
917 WaitableMessageLoopEvent event; | 912 demuxer_->Stop(); |
918 demuxer_->Stop(event.GetClosure()); | |
919 event.RunAndWait(); | |
920 demuxer_.reset(); | 913 demuxer_.reset(); |
921 data_source_.reset(); | 914 data_source_.reset(); |
922 } | 915 } |
923 } | 916 } |
924 | 917 |
925 TEST_F(FFmpegDemuxerTest, Rotate_Metadata_0) { | 918 TEST_F(FFmpegDemuxerTest, Rotate_Metadata_0) { |
926 CreateDemuxer("bear_rotate_0.mp4"); | 919 CreateDemuxer("bear_rotate_0.mp4"); |
927 InitializeDemuxer(); | 920 InitializeDemuxer(); |
928 | 921 |
929 DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO); | 922 DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO); |
(...skipping 24 matching lines...) Expand all Loading... |
954 InitializeDemuxer(); | 947 InitializeDemuxer(); |
955 | 948 |
956 DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO); | 949 DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO); |
957 ASSERT_TRUE(stream); | 950 ASSERT_TRUE(stream); |
958 ASSERT_EQ(VIDEO_ROTATION_270, stream->video_rotation()); | 951 ASSERT_EQ(VIDEO_ROTATION_270, stream->video_rotation()); |
959 } | 952 } |
960 | 953 |
961 #endif | 954 #endif |
962 | 955 |
963 } // namespace media | 956 } // namespace media |
OLD | NEW |