• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
~FileRecorder()80     virtual ~FileRecorder() {}
81 
82 };
83 }  // namespace webrtc
84 #endif // WEBRTC_MODULES_UTILITY_INCLUDE_FILE_RECORDER_H_
85