Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Side by Side Diff: webrtc/modules/audio_coding/neteq/tools/input_audio_file.cc

Issue 1290113002: NetEq: Implement logging of Delayed Packet Outage Events (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rename InputAudioFile::Move to InputAudioFile::Seek Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/modules/audio_coding/neteq/tools/input_audio_file.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 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 #include "webrtc/modules/audio_coding/neteq/tools/input_audio_file.h" 11 #include "webrtc/modules/audio_coding/neteq/tools/input_audio_file.h"
12 12
13 #include "webrtc/base/checks.h"
14
13 namespace webrtc { 15 namespace webrtc {
14 namespace test { 16 namespace test {
15 17
16 InputAudioFile::InputAudioFile(const std::string file_name) { 18 InputAudioFile::InputAudioFile(const std::string file_name) {
17 fp_ = fopen(file_name.c_str(), "rb"); 19 fp_ = fopen(file_name.c_str(), "rb");
18 } 20 }
19 21
20 InputAudioFile::~InputAudioFile() { fclose(fp_); } 22 InputAudioFile::~InputAudioFile() { fclose(fp_); }
21 23
22 bool InputAudioFile::Read(size_t samples, int16_t* destination) { 24 bool InputAudioFile::Read(size_t samples, int16_t* destination) {
23 if (!fp_) { 25 if (!fp_) {
24 return false; 26 return false;
25 } 27 }
26 size_t samples_read = fread(destination, sizeof(int16_t), samples, fp_); 28 size_t samples_read = fread(destination, sizeof(int16_t), samples, fp_);
27 if (samples_read < samples) { 29 if (samples_read < samples) {
28 // Rewind and read the missing samples. 30 // Rewind and read the missing samples.
29 rewind(fp_); 31 rewind(fp_);
30 size_t missing_samples = samples - samples_read; 32 size_t missing_samples = samples - samples_read;
31 if (fread(destination, sizeof(int16_t), missing_samples, fp_) < 33 if (fread(destination, sizeof(int16_t), missing_samples, fp_) <
32 missing_samples) { 34 missing_samples) {
33 // Could not read enough even after rewinding the file. 35 // Could not read enough even after rewinding the file.
34 return false; 36 return false;
35 } 37 }
36 } 38 }
37 return true; 39 return true;
38 } 40 }
39 41
42 bool InputAudioFile::Seek(int samples) {
43 if (!fp_) {
44 return false;
45 }
46 // Find file boundaries.
47 const long current_pos = ftell(fp_);
48 CHECK_NE(EOF, current_pos) << "Error returned when getting file position.";
49 CHECK_EQ(0, fseek(fp_, 0, SEEK_END)); // Move to end of file.
50 const long file_size = ftell(fp_);
51 CHECK_NE(EOF, file_size) << "Error returned when getting file position.";
52 // Find new position.
53 long new_pos = current_pos + sizeof(int16_t) * samples; // Samples to bytes.
54 CHECK_GE(new_pos, 0) << "Trying to move to before the beginning of the file";
55 new_pos = new_pos % file_size; // Wrap around the end of the file.
56 // Move to new position relative to the beginning of the file.
57 CHECK_EQ(0, fseek(fp_, new_pos, SEEK_SET));
58 return true;
59 }
60
40 void InputAudioFile::DuplicateInterleaved(const int16_t* source, size_t samples, 61 void InputAudioFile::DuplicateInterleaved(const int16_t* source, size_t samples,
41 size_t channels, 62 size_t channels,
42 int16_t* destination) { 63 int16_t* destination) {
43 // Start from the end of |source| and |destination|, and work towards the 64 // Start from the end of |source| and |destination|, and work towards the
44 // beginning. This is to allow in-place interleaving of the same array (i.e., 65 // beginning. This is to allow in-place interleaving of the same array (i.e.,
45 // |source| and |destination| are the same array). 66 // |source| and |destination| are the same array).
46 for (int i = static_cast<int>(samples - 1); i >= 0; --i) { 67 for (int i = static_cast<int>(samples - 1); i >= 0; --i) {
47 for (int j = static_cast<int>(channels - 1); j >= 0; --j) { 68 for (int j = static_cast<int>(channels - 1); j >= 0; --j) {
48 destination[i * channels + j] = source[i]; 69 destination[i * channels + j] = source[i];
49 } 70 }
50 } 71 }
51 } 72 }
52 73
53 } // namespace test 74 } // namespace test
54 } // namespace webrtc 75 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/audio_coding/neteq/tools/input_audio_file.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698