1/*
2 *  Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
3 *
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
6 *  tree. An additional intellectual property rights grant can be found
7 *  in the file PATENTS.  All contributing project authors may
8 *  be found in the AUTHORS file in the root of the source tree.
9 */
10
11#ifndef WEBRTC_MODULES_AUDIO_CODING_NETEQ_TOOLS_OUTPUT_AUDIO_FILE_H_
12#define WEBRTC_MODULES_AUDIO_CODING_NETEQ_TOOLS_OUTPUT_AUDIO_FILE_H_
13
14#include <assert.h>
15#include <stdio.h>
16#include <string>
17
18#include "webrtc/base/constructormagic.h"
19#include "webrtc/modules/audio_coding/neteq/tools/audio_sink.h"
20
21namespace webrtc {
22namespace test {
23
24class OutputAudioFile : public AudioSink {
25 public:
26  // Creates an OutputAudioFile, opening a file named |file_name| for writing.
27  // The file format is 16-bit signed host-endian PCM.
28  explicit OutputAudioFile(const std::string& file_name) {
29    out_file_ = fopen(file_name.c_str(), "wb");
30  }
31
32  virtual ~OutputAudioFile() {
33    if (out_file_)
34      fclose(out_file_);
35  }
36
37  virtual bool WriteArray(const int16_t* audio, size_t num_samples) OVERRIDE {
38    assert(out_file_);
39    return fwrite(audio, sizeof(*audio), num_samples, out_file_) == num_samples;
40  }
41
42 private:
43  FILE* out_file_;
44
45  DISALLOW_COPY_AND_ASSIGN(OutputAudioFile);
46};
47
48}  // namespace test
49}  // namespace webrtc
50#endif  // WEBRTC_MODULES_AUDIO_CODING_NETEQ_TOOLS_OUTPUT_AUDIO_FILE_H_
51