Home | History | Annotate | Download | only in include
      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_UTILITY_INCLUDE_FILE_RECORDER_H_
     12 #define WEBRTC_MODULES_UTILITY_INCLUDE_FILE_RECORDER_H_
     13 
     14 #include "webrtc/common_types.h"
     15 #include "webrtc/engine_configurations.h"
     16 #include "webrtc/modules/include/module_common_types.h"
     17 #include "webrtc/modules/media_file/media_file_defines.h"
     18 #include "webrtc/system_wrappers/include/tick_util.h"
     19 #include "webrtc/typedefs.h"
     20 #include "webrtc/video_frame.h"
     21 
     22 namespace webrtc {
     23 
     24 class FileRecorder
     25 {
     26 public:
     27 
     28     // Note: will return NULL for unsupported formats.
     29     static FileRecorder* CreateFileRecorder(const uint32_t instanceID,
     30                                             const FileFormats fileFormat);
     31 
     32     static void DestroyFileRecorder(FileRecorder* recorder);
     33 
     34     virtual int32_t RegisterModuleFileCallback(
     35         FileCallback* callback) = 0;
     36 
     37     virtual FileFormats RecordingFileFormat() const = 0;
     38 
     39     virtual int32_t StartRecordingAudioFile(
     40         const char* fileName,
     41         const CodecInst& codecInst,
     42         uint32_t notification) = 0;
     43 
     44     virtual int32_t StartRecordingAudioFile(
     45         OutStream& destStream,
     46         const CodecInst& codecInst,
     47         uint32_t notification) = 0;
     48 
     49     // Stop recording.
     50     // Note: this API is for both audio and video.
     51     virtual int32_t StopRecording() = 0;
     52 
     53     // Return true if recording.
     54     // Note: this API is for both audio and video.
     55     virtual bool IsRecording() const = 0;
     56 
     57     virtual int32_t codec_info(CodecInst& codecInst) const = 0;
     58 
     59     // Write frame to file. Frame should contain 10ms of un-ecoded audio data.
     60     virtual int32_t RecordAudioToFile(
     61         const AudioFrame& frame,
     62         const TickTime* playoutTS = NULL) = 0;
     63 
     64     // Open/create the file specified by fileName for writing audio/video data
     65     // (relative path is allowed). audioCodecInst specifies the encoding of the
     66     // audio data. videoCodecInst specifies the encoding of the video data.
     67     // Only video data will be recorded if videoOnly is true. amrFormat
     68     // specifies the amr/amrwb storage format.
     69     // Note: the file format is AVI.
     70     virtual int32_t StartRecordingVideoFile(
     71         const char* fileName,
     72         const CodecInst& audioCodecInst,
     73         const VideoCodec& videoCodecInst,
     74         bool videoOnly = false) = 0;
     75 
     76     // Record the video frame in videoFrame to AVI file.
     77     virtual int32_t RecordVideoToFile(const VideoFrame& videoFrame) = 0;
     78 
     79 protected:
     80     virtual ~FileRecorder() {}
     81 
     82 };
     83 }  // namespace webrtc
     84 #endif // WEBRTC_MODULES_UTILITY_INCLUDE_FILE_RECORDER_H_
     85