OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/bind.h" | 7 #include "base/bind.h" |
8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
10 #include "media/base/audio_buffer.h" | 10 #include "media/base/audio_buffer.h" |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 reader_.reset(new AudioFileReader(protocol_.get())); | 50 reader_.reset(new AudioFileReader(protocol_.get())); |
51 reader_->Open(); | 51 reader_->Open(); |
52 | 52 |
53 AudioDecoderConfig config; | 53 AudioDecoderConfig config; |
54 AVCodecContextToAudioDecoderConfig( | 54 AVCodecContextToAudioDecoderConfig( |
55 reader_->codec_context_for_testing(), false, &config, false); | 55 reader_->codec_context_for_testing(), false, &config, false); |
56 InitializeDecoder(config); | 56 InitializeDecoder(config); |
57 } | 57 } |
58 | 58 |
59 void InitializeDecoder(const AudioDecoderConfig& config) { | 59 void InitializeDecoder(const AudioDecoderConfig& config) { |
60 decoder_->Initialize(config, NewExpectedStatusCB(PIPELINE_OK)); | 60 decoder_->Initialize(config, |
| 61 NewExpectedStatusCB(PIPELINE_OK), |
| 62 base::Bind(&OpusAudioDecoderTest::OnDecoderOutput, |
| 63 base::Unretained(this))); |
61 base::RunLoop().RunUntilIdle(); | 64 base::RunLoop().RunUntilIdle(); |
62 } | 65 } |
63 | 66 |
64 void Decode() { | 67 void Decode() { |
65 pending_decode_ = true; | 68 pending_decode_ = true; |
66 | 69 |
67 AVPacket packet; | 70 AVPacket packet; |
68 ASSERT_TRUE(reader_->ReadPacketForTesting(&packet)); | 71 ASSERT_TRUE(reader_->ReadPacketForTesting(&packet)); |
69 scoped_refptr<DecoderBuffer> buffer = | 72 scoped_refptr<DecoderBuffer> buffer = |
70 DecoderBuffer::CopyFrom(packet.data, packet.size); | 73 DecoderBuffer::CopyFrom(packet.data, packet.size); |
(...skipping 13 matching lines...) Expand all Loading... |
84 decoder_->Reset(base::Bind(&OpusAudioDecoderTest::ResetFinished, | 87 decoder_->Reset(base::Bind(&OpusAudioDecoderTest::ResetFinished, |
85 base::Unretained(this))); | 88 base::Unretained(this))); |
86 base::RunLoop().RunUntilIdle(); | 89 base::RunLoop().RunUntilIdle(); |
87 } | 90 } |
88 | 91 |
89 void Stop() { | 92 void Stop() { |
90 decoder_->Stop(); | 93 decoder_->Stop(); |
91 base::RunLoop().RunUntilIdle(); | 94 base::RunLoop().RunUntilIdle(); |
92 } | 95 } |
93 | 96 |
94 void DecodeFinished(AudioDecoder::Status status, | 97 void OnDecoderOutput(const scoped_refptr<AudioBuffer>& buffer) { |
95 const scoped_refptr<AudioBuffer>& buffer) { | 98 decoded_audio_.push_back(buffer); |
| 99 } |
| 100 |
| 101 void DecodeFinished(AudioDecoder::Status status) { |
96 EXPECT_TRUE(pending_decode_); | 102 EXPECT_TRUE(pending_decode_); |
97 pending_decode_ = false; | 103 pending_decode_ = false; |
98 | 104 |
99 if (status == AudioDecoder::kNotEnoughData) { | 105 // If we have a pending reset, we expect an abort. |
100 EXPECT_TRUE(buffer.get() == NULL); | 106 if (pending_reset_) { |
101 Decode(); | |
102 return; | |
103 } | |
104 | |
105 decoded_audio_.push_back(buffer); | |
106 | |
107 // If we hit a NULL buffer or have a pending reset, we expect an abort. | |
108 if (buffer.get() == NULL || pending_reset_) { | |
109 EXPECT_TRUE(buffer.get() == NULL); | |
110 EXPECT_EQ(status, AudioDecoder::kAborted); | 107 EXPECT_EQ(status, AudioDecoder::kAborted); |
111 return; | 108 return; |
112 } | 109 } |
113 | 110 |
114 EXPECT_EQ(status, AudioDecoder::kOk); | 111 EXPECT_EQ(status, AudioDecoder::kOk); |
115 } | 112 } |
116 | 113 |
117 void ResetFinished() { | 114 void ResetFinished() { |
118 EXPECT_TRUE(pending_reset_); | 115 EXPECT_TRUE(pending_reset_); |
119 // Reset should always finish after Decode. | 116 // Reset should always finish after Decode. |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
219 | 216 |
220 TEST_F(OpusAudioDecoderTest, PendingDecode_ResetStop) { | 217 TEST_F(OpusAudioDecoderTest, PendingDecode_ResetStop) { |
221 Initialize(); | 218 Initialize(); |
222 Decode(); | 219 Decode(); |
223 Reset(); | 220 Reset(); |
224 Stop(); | 221 Stop(); |
225 SatisfyPendingDecode(); | 222 SatisfyPendingDecode(); |
226 } | 223 } |
227 | 224 |
228 } // namespace media | 225 } // namespace media |
OLD | NEW |