Confirmed users
157
edits
| Line 48: | Line 48: | ||
Queue<MediaSegment> mBuffer; | Queue<MediaSegment> mBuffer; | ||
friend class | friend class Encoder; | ||
} | } | ||
| Line 154: | Line 154: | ||
MediaSegmentAdapter mVideoSegments; | MediaSegmentAdapter mVideoSegments; | ||
MediaSegmentAdapter mAudioSegments; | MediaSegmentAdapter mAudioSegments; | ||
Encoder mVideoEncoder; | |||
Encoder mAudioEncoder; | |||
MediaEncoder mMediaEncoder; | |||
Thread mEncoderThread; | Thread mEncoderThread; | ||
} | } | ||
| Line 184: | Line 184: | ||
* utilize libopus API. | * utilize libopus API. | ||
*/ | */ | ||
class | class Encoder { | ||
public: | public: | ||
enum EncodingState { | enum EncodingState { | ||
| Line 192: | Line 192: | ||
} | } | ||
Encoder(); | |||
nsresult Init() = 0; | nsresult Init() = 0; | ||
/* Let | /* Let Encoder setup buffer length based on codec characteristic | ||
e.g. Stagefright video codecs may only use 1 buffer since the buffer maybe shared between hardwares */ | e.g. Stagefright video codecs may only use 1 buffer since the buffer maybe shared between hardwares */ | ||
| Line 221: | Line 221: | ||
} | } | ||
class | class AudioTrackEncoder : public Encoder { | ||
public: | public: | ||
/* AudioCodec may need collect enough buffers to be encode, return COLLECT as needed */ | /* AudioCodec may need collect enough buffers to be encode, return COLLECT as needed */ | ||
| Line 231: | Line 231: | ||
} | } | ||
class | class VideoTrackEncoder : public Encoder { | ||
public: | public: | ||
EncoderStatus Encode(MediaBuffer in, void* out, size_t length) = 0; | EncoderStatus Encode(MediaBuffer in, void* out, size_t length) = 0; | ||
} | } | ||
class | class OpusEncoder : public AudioTrackEncoder { | ||
// Use libopus to encode audio | // Use libopus to encode audio | ||
private: | private: | ||
| Line 242: | Line 242: | ||
} | } | ||
class | class TheoraEncoder : public VideoTrackEncoder { | ||
// Use libtheora to encode video | // Use libtheora to encode video | ||
private: | private: | ||
| Line 255: | Line 255: | ||
class MediaWriter { | class MediaWriter { | ||
public: | public: | ||
void AddTrack( | void AddTrack(Encoder); | ||
/* Block until container packet write done*/ | /* Block until container packet write done*/ | ||
| Line 263: | Line 263: | ||
class OggWriter { | class OggWriter { | ||
// Use libogg to write container | // Use libogg to write container | ||
protected: | |||
// libogg context and others | // libogg context and others | ||
VideoTrackEncoder mVideoEncoder; // e.g. TheoraEncoder | |||
AudioTrackEncoder mAudioEncoder; // e.g. OpusEncoder/VorbisEncoder | |||
} | } | ||
</code> | </code> | ||