Home | History | Annotate | Download | only in media_file
      1 /*
      2  *  Copyright (c) 2012 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_MEDIA_FILE_MEDIA_FILE_IMPL_H_
     12 #define WEBRTC_MODULES_MEDIA_FILE_MEDIA_FILE_IMPL_H_
     13 
     14 #include "webrtc/common_types.h"
     15 #include "webrtc/modules/include/module_common_types.h"
     16 #include "webrtc/modules/media_file/media_file.h"
     17 #include "webrtc/modules/media_file/media_file_defines.h"
     18 #include "webrtc/modules/media_file/media_file_utility.h"
     19 #include "webrtc/system_wrappers/include/critical_section_wrapper.h"
     20 
     21 namespace webrtc {
     22 class MediaFileImpl : public MediaFile
     23 {
     24 
     25 public:
     26     MediaFileImpl(const int32_t id);
     27     ~MediaFileImpl();
     28 
     29     int32_t Process() override;
     30     int64_t TimeUntilNextProcess() override;
     31 
     32     // MediaFile functions
     33     int32_t PlayoutAudioData(int8_t* audioBuffer,
     34                              size_t& dataLengthInBytes) override;
     35 
     36     int32_t PlayoutStereoData(int8_t* audioBufferLeft,
     37                               int8_t* audioBufferRight,
     38                               size_t& dataLengthInBytes) override;
     39 
     40     int32_t StartPlayingAudioFile(
     41         const char* fileName,
     42         const uint32_t notificationTimeMs = 0,
     43         const bool loop = false,
     44         const FileFormats format = kFileFormatPcm16kHzFile,
     45         const CodecInst* codecInst = NULL,
     46         const uint32_t startPointMs = 0,
     47         const uint32_t stopPointMs = 0) override;
     48 
     49     int32_t StartPlayingAudioStream(
     50         InStream& stream,
     51         const uint32_t notificationTimeMs = 0,
     52         const FileFormats format = kFileFormatPcm16kHzFile,
     53         const CodecInst* codecInst = NULL,
     54         const uint32_t startPointMs = 0,
     55         const uint32_t stopPointMs = 0) override;
     56 
     57     int32_t StopPlaying() override;
     58 
     59     bool IsPlaying() override;
     60 
     61     int32_t PlayoutPositionMs(uint32_t& positionMs) const override;
     62 
     63     int32_t IncomingAudioData(const int8_t* audioBuffer,
     64                               const size_t bufferLength) override;
     65 
     66     int32_t StartRecordingAudioFile(const char* fileName,
     67                                     const FileFormats format,
     68                                     const CodecInst& codecInst,
     69                                     const uint32_t notificationTimeMs = 0,
     70                                     const uint32_t maxSizeBytes = 0) override;
     71 
     72     int32_t StartRecordingAudioStream(
     73         OutStream& stream,
     74         const FileFormats format,
     75         const CodecInst& codecInst,
     76         const uint32_t notificationTimeMs = 0) override;
     77 
     78     int32_t StopRecording() override;
     79 
     80     bool IsRecording() override;
     81 
     82     int32_t RecordDurationMs(uint32_t& durationMs) override;
     83 
     84     bool IsStereo() override;
     85 
     86     int32_t SetModuleFileCallback(FileCallback* callback) override;
     87 
     88     int32_t FileDurationMs(const char* fileName,
     89                            uint32_t& durationMs,
     90                            const FileFormats format,
     91                            const uint32_t freqInHz = 16000) override;
     92 
     93     int32_t codec_info(CodecInst& codecInst) const override;
     94 
     95 private:
     96     // Returns true if the combination of format and codecInst is valid.
     97     static bool ValidFileFormat(const FileFormats format,
     98                                 const CodecInst*  codecInst);
     99 
    100 
    101     // Returns true if the filename is valid
    102     static bool ValidFileName(const char* fileName);
    103 
    104     // Returns true if the combination of startPointMs and stopPointMs is valid.
    105     static bool ValidFilePositions(const uint32_t startPointMs,
    106                                    const uint32_t stopPointMs);
    107 
    108     // Returns true if frequencyInHz is a supported frequency.
    109     static bool ValidFrequency(const uint32_t frequencyInHz);
    110 
    111     void HandlePlayCallbacks(int32_t bytesRead);
    112 
    113     int32_t StartPlayingStream(
    114         InStream& stream,
    115         bool loop,
    116         const uint32_t notificationTimeMs,
    117         const FileFormats format,
    118         const CodecInst*  codecInst,
    119         const uint32_t startPointMs,
    120         const uint32_t stopPointMs);
    121 
    122     int32_t _id;
    123     CriticalSectionWrapper* _crit;
    124     CriticalSectionWrapper* _callbackCrit;
    125 
    126     ModuleFileUtility* _ptrFileUtilityObj;
    127     CodecInst codec_info_;
    128 
    129     InStream*  _ptrInStream;
    130     OutStream* _ptrOutStream;
    131 
    132     FileFormats _fileFormat;
    133     uint32_t _recordDurationMs;
    134     uint32_t _playoutPositionMs;
    135     uint32_t _notificationMs;
    136 
    137     bool _playingActive;
    138     bool _recordingActive;
    139     bool _isStereo;
    140     bool _openFile;
    141 
    142     char _fileName[512];
    143 
    144     FileCallback* _ptrCallback;
    145 };
    146 }  // namespace webrtc
    147 
    148 #endif // WEBRTC_MODULES_MEDIA_FILE_MEDIA_FILE_IMPL_H_
    149