OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
11 #ifndef WEBRTC_MODULES_AUDIO_CODING_TEST_PCMFILE_H_ | 11 #ifndef WEBRTC_MODULES_AUDIO_CODING_TEST_PCMFILE_H_ |
12 #define WEBRTC_MODULES_AUDIO_CODING_TEST_PCMFILE_H_ | 12 #define WEBRTC_MODULES_AUDIO_CODING_TEST_PCMFILE_H_ |
13 | 13 |
14 #include <stdio.h> | 14 #include <stdio.h> |
15 #include <stdlib.h> | 15 #include <stdlib.h> |
16 | 16 |
17 #include <string> | 17 #include <string> |
18 | 18 |
| 19 #include "webrtc/base/optional.h" |
19 #include "webrtc/modules/include/module_common_types.h" | 20 #include "webrtc/modules/include/module_common_types.h" |
20 #include "webrtc/typedefs.h" | 21 #include "webrtc/typedefs.h" |
21 | 22 |
22 namespace webrtc { | 23 namespace webrtc { |
23 | 24 |
24 class PCMFile { | 25 class PCMFile { |
25 public: | 26 public: |
26 PCMFile(); | 27 PCMFile(); |
27 PCMFile(uint32_t timestamp); | 28 PCMFile(uint32_t timestamp); |
28 ~PCMFile() { | 29 ~PCMFile() { |
29 if (pcm_file_ != NULL) { | 30 if (pcm_file_ != NULL) { |
30 fclose(pcm_file_); | 31 fclose(pcm_file_); |
31 } | 32 } |
32 } | 33 } |
33 | 34 |
34 void Open(const std::string& filename, uint16_t frequency, const char* mode, | 35 void Open(const std::string& filename, uint16_t frequency, const char* mode, |
35 bool auto_rewind = false); | 36 bool auto_rewind = false); |
36 | 37 |
37 int32_t Read10MsData(AudioFrame& audio_frame); | 38 int32_t Read10MsData(AudioFrame& audio_frame); |
38 | 39 |
39 void Write10MsData(int16_t *playout_buffer, size_t length_smpls); | 40 void Write10MsData(int16_t *playout_buffer, size_t length_smpls); |
40 void Write10MsData(AudioFrame& audio_frame); | 41 void Write10MsData(AudioFrame& audio_frame); |
41 | 42 |
42 uint16_t PayloadLength10Ms() const; | 43 uint16_t PayloadLength10Ms() const; |
43 int32_t SamplingFrequency() const; | 44 int32_t SamplingFrequency() const; |
44 void Close(); | 45 void Close(); |
45 bool EndOfFile() const { | 46 bool EndOfFile() const { |
46 return end_of_file_; | 47 return end_of_file_; |
47 } | 48 } |
| 49 // Moves forward the specified number of 10 ms blocks. If a limit has been set |
| 50 // with SetNum10MsBlocksToRead, fast-forwarding does not count towards this |
| 51 // limit. |
| 52 void FastForward(int num_10ms_blocks); |
48 void Rewind(); | 53 void Rewind(); |
49 static int16_t ChooseFile(std::string* file_name, int16_t max_len, | 54 static int16_t ChooseFile(std::string* file_name, int16_t max_len, |
50 uint16_t* frequency_hz); | 55 uint16_t* frequency_hz); |
51 bool Rewinded(); | 56 bool Rewinded(); |
52 void SaveStereo(bool is_stereo = true); | 57 void SaveStereo(bool is_stereo = true); |
53 void ReadStereo(bool is_stereo = true); | 58 void ReadStereo(bool is_stereo = true); |
| 59 // If set, the reading will stop after the specified number of blocks have |
| 60 // been read. When that has happened, EndOfFile() will return true. Calling |
| 61 // Rewind() will reset the counter and start over. |
| 62 void SetNum10MsBlocksToRead(int value); |
| 63 |
54 private: | 64 private: |
55 FILE* pcm_file_; | 65 FILE* pcm_file_; |
56 uint16_t samples_10ms_; | 66 uint16_t samples_10ms_; |
57 int32_t frequency_; | 67 int32_t frequency_; |
58 bool end_of_file_; | 68 bool end_of_file_; |
59 bool auto_rewind_; | 69 bool auto_rewind_; |
60 bool rewinded_; | 70 bool rewinded_; |
61 uint32_t timestamp_; | 71 uint32_t timestamp_; |
62 bool read_stereo_; | 72 bool read_stereo_; |
63 bool save_stereo_; | 73 bool save_stereo_; |
| 74 rtc::Optional<int> num_10ms_blocks_to_read_; |
| 75 int blocks_read_ = 0; |
64 }; | 76 }; |
65 | 77 |
66 } // namespace webrtc | 78 } // namespace webrtc |
67 | 79 |
68 #endif // WEBRTC_MODULES_AUDIO_CODING_TEST_PCMFILE_H_ | 80 #endif // WEBRTC_MODULES_AUDIO_CODING_TEST_PCMFILE_H_ |
OLD | NEW |