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

Unified Diff: webrtc/modules/utility/source/file_recorder_impl.cc

Issue 2038513002: FileRecorderImpl and FilePlayerImpl don't need their own .h and .cc files (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@remove2
Patch Set: rebase Created 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/modules/utility/source/file_recorder_impl.h ('k') | webrtc/modules/utility/utility.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/modules/utility/source/file_recorder_impl.cc
diff --git a/webrtc/modules/utility/source/file_recorder_impl.cc b/webrtc/modules/utility/source/file_recorder_impl.cc
deleted file mode 100644
index 53f79948fcfa449752fa6706b181c3ef46cae971..0000000000000000000000000000000000000000
--- a/webrtc/modules/utility/source/file_recorder_impl.cc
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
-
-#include "webrtc/engine_configurations.h"
-#include "webrtc/modules/media_file/media_file.h"
-#include "webrtc/modules/utility/source/file_recorder_impl.h"
-#include "webrtc/system_wrappers/include/logging.h"
-
-namespace webrtc {
-FileRecorder* FileRecorder::CreateFileRecorder(uint32_t instanceID,
- FileFormats fileFormat) {
- return new FileRecorderImpl(instanceID, fileFormat);
-}
-
-void FileRecorder::DestroyFileRecorder(FileRecorder* recorder) {
- delete recorder;
-}
-
-FileRecorderImpl::FileRecorderImpl(uint32_t instanceID, FileFormats fileFormat)
- : _instanceID(instanceID),
- _fileFormat(fileFormat),
- _moduleFile(MediaFile::CreateMediaFile(_instanceID)),
- codec_info_(),
- _audioBuffer(),
- _audioEncoder(instanceID),
- _audioResampler() {}
-
-FileRecorderImpl::~FileRecorderImpl() {
- MediaFile::DestroyMediaFile(_moduleFile);
-}
-
-FileFormats FileRecorderImpl::RecordingFileFormat() const {
- return _fileFormat;
-}
-
-int32_t FileRecorderImpl::RegisterModuleFileCallback(FileCallback* callback) {
- if (_moduleFile == NULL) {
- return -1;
- }
- return _moduleFile->SetModuleFileCallback(callback);
-}
-
-int32_t FileRecorderImpl::StartRecordingAudioFile(const char* fileName,
- const CodecInst& codecInst,
- uint32_t notificationTimeMs) {
- if (_moduleFile == NULL) {
- return -1;
- }
- codec_info_ = codecInst;
- int32_t retVal = 0;
- retVal = _moduleFile->StartRecordingAudioFile(fileName, _fileFormat,
- codecInst, notificationTimeMs);
-
- if (retVal == 0) {
- retVal = SetUpAudioEncoder();
- }
- if (retVal != 0) {
- LOG(LS_WARNING) << "Failed to initialize file " << fileName
- << " for recording.";
-
- if (IsRecording()) {
- StopRecording();
- }
- }
- return retVal;
-}
-
-int32_t FileRecorderImpl::StartRecordingAudioFile(OutStream& destStream,
- const CodecInst& codecInst,
- uint32_t notificationTimeMs) {
- codec_info_ = codecInst;
- int32_t retVal = _moduleFile->StartRecordingAudioStream(
- destStream, _fileFormat, codecInst, notificationTimeMs);
-
- if (retVal == 0) {
- retVal = SetUpAudioEncoder();
- }
- if (retVal != 0) {
- LOG(LS_WARNING) << "Failed to initialize outStream for recording.";
-
- if (IsRecording()) {
- StopRecording();
- }
- }
- return retVal;
-}
-
-int32_t FileRecorderImpl::StopRecording() {
- memset(&codec_info_, 0, sizeof(CodecInst));
- return _moduleFile->StopRecording();
-}
-
-bool FileRecorderImpl::IsRecording() const {
- return _moduleFile->IsRecording();
-}
-
-int32_t FileRecorderImpl::RecordAudioToFile(
- const AudioFrame& incomingAudioFrame) {
- if (codec_info_.plfreq == 0) {
- LOG(LS_WARNING) << "RecordAudioToFile() recording audio is not "
- << "turned on.";
- return -1;
- }
- AudioFrame tempAudioFrame;
- tempAudioFrame.samples_per_channel_ = 0;
- if (incomingAudioFrame.num_channels_ == 2 && !_moduleFile->IsStereo()) {
- // Recording mono but incoming audio is (interleaved) stereo.
- tempAudioFrame.num_channels_ = 1;
- tempAudioFrame.sample_rate_hz_ = incomingAudioFrame.sample_rate_hz_;
- tempAudioFrame.samples_per_channel_ =
- incomingAudioFrame.samples_per_channel_;
- for (size_t i = 0; i < (incomingAudioFrame.samples_per_channel_); i++) {
- // Sample value is the average of left and right buffer rounded to
- // closest integer value. Note samples can be either 1 or 2 byte.
- tempAudioFrame.data_[i] = ((incomingAudioFrame.data_[2 * i] +
- incomingAudioFrame.data_[(2 * i) + 1] + 1) >>
- 1);
- }
- } else if (incomingAudioFrame.num_channels_ == 1 && _moduleFile->IsStereo()) {
- // Recording stereo but incoming audio is mono.
- tempAudioFrame.num_channels_ = 2;
- tempAudioFrame.sample_rate_hz_ = incomingAudioFrame.sample_rate_hz_;
- tempAudioFrame.samples_per_channel_ =
- incomingAudioFrame.samples_per_channel_;
- for (size_t i = 0; i < (incomingAudioFrame.samples_per_channel_); i++) {
- // Duplicate sample to both channels
- tempAudioFrame.data_[2 * i] = incomingAudioFrame.data_[i];
- tempAudioFrame.data_[2 * i + 1] = incomingAudioFrame.data_[i];
- }
- }
-
- const AudioFrame* ptrAudioFrame = &incomingAudioFrame;
- if (tempAudioFrame.samples_per_channel_ != 0) {
- // If ptrAudioFrame is not empty it contains the audio to be recorded.
- ptrAudioFrame = &tempAudioFrame;
- }
-
- // Encode the audio data before writing to file. Don't encode if the codec
- // is PCM.
- // NOTE: stereo recording is only supported for WAV files.
- // TODO (hellner): WAV expect PCM in little endian byte order. Not
- // "encoding" with PCM coder should be a problem for big endian systems.
- size_t encodedLenInBytes = 0;
- if (_fileFormat == kFileFormatPreencodedFile ||
- STR_CASE_CMP(codec_info_.plname, "L16") != 0) {
- if (_audioEncoder.Encode(*ptrAudioFrame, _audioBuffer, encodedLenInBytes) ==
- -1) {
- LOG(LS_WARNING) << "RecordAudioToFile() codec " << codec_info_.plname
- << " not supported or failed to encode stream.";
- return -1;
- }
- } else {
- size_t outLen = 0;
- _audioResampler.ResetIfNeeded(ptrAudioFrame->sample_rate_hz_,
- codec_info_.plfreq,
- ptrAudioFrame->num_channels_);
- _audioResampler.Push(
- ptrAudioFrame->data_,
- ptrAudioFrame->samples_per_channel_ * ptrAudioFrame->num_channels_,
- (int16_t*)_audioBuffer, MAX_AUDIO_BUFFER_IN_BYTES, outLen);
- encodedLenInBytes = outLen * sizeof(int16_t);
- }
-
- // Codec may not be operating at a frame rate of 10 ms. Whenever enough
- // 10 ms chunks of data has been pushed to the encoder an encoded frame
- // will be available. Wait until then.
- if (encodedLenInBytes) {
- if (WriteEncodedAudioData(_audioBuffer, encodedLenInBytes) == -1) {
- return -1;
- }
- }
- return 0;
-}
-
-int32_t FileRecorderImpl::SetUpAudioEncoder() {
- if (_fileFormat == kFileFormatPreencodedFile ||
- STR_CASE_CMP(codec_info_.plname, "L16") != 0) {
- if (_audioEncoder.SetEncodeCodec(codec_info_) == -1) {
- LOG(LS_ERROR) << "SetUpAudioEncoder() codec " << codec_info_.plname
- << " not supported.";
- return -1;
- }
- }
- return 0;
-}
-
-int32_t FileRecorderImpl::codec_info(CodecInst& codecInst) const {
- if (codec_info_.plfreq == 0) {
- return -1;
- }
- codecInst = codec_info_;
- return 0;
-}
-
-int32_t FileRecorderImpl::WriteEncodedAudioData(const int8_t* audioBuffer,
- size_t bufferLength) {
- return _moduleFile->IncomingAudioData(audioBuffer, bufferLength);
-}
-} // namespace webrtc
« no previous file with comments | « webrtc/modules/utility/source/file_recorder_impl.h ('k') | webrtc/modules/utility/utility.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698