Torc  0.1
torcmuxer.h
Go to the documentation of this file.
1 #ifndef TORCMUXER_H
2 #define TORCMUXER_H
3 
4 // Qt
5 #include <QtGlobal>
6 
7 // Torc
9 
10 // FFmpeg
11 extern "C" {
12 #include <libavformat/avformat.h>
13 }
14 
15 class TorcMuxer
16 {
17  public:
18  static int AVWritePacket(void *Opaque, uint8_t *Buffer, int Size);
19  static QString GetAVCCodec (const QByteArray &Packet);
20  explicit TorcMuxer (const QString &File);
21  explicit TorcMuxer (TorcSegmentedRingBuffer *Buffer);
22  ~TorcMuxer();
23 
24  bool IsValid (void);
25  int AddH264Stream (int Width, int Height, int Profile, int Bitrate);
26  int AddDummyAudioStream(void);
27  bool AddPacket (AVPacket *Packet, bool CodecConfig);
28  void FinishSegment (bool Init);
29  void Finish (void);
30  int WriteAVPacket (uint8_t* Buffer, int Size);
31 
32  private:
33  void SetupContext (void);
34  void SetupIO (void);
35  void Start (void);
36  void WriteDummyAudio (void);
37  void CopyExtraData (int Size, void* Source, int Stream);
38 
39  private:
40  Q_DISABLE_COPY(TorcMuxer)
41  // Output muxer
42  AVFormatContext *m_formatCtx;
43  bool m_created;
44  bool m_started;
45  // Output buffers/file
46  QString m_outputFile;
47  TorcSegmentedRingBuffer *m_ringBuffer;
48  AVIOContext *m_ioContext;
49  // Dummy audio generation
50  AVCodecContext *m_audioContext;
51  int m_audioStream;
52  AVFrame *m_audioFrame;
53  AVPacket *m_audioPacket;
54  // AV Sync
55  int64_t m_lastVideoPts;
56  int64_t m_lastAudioPts;
57 };
58 
59 #endif // TORCMUXER_H
void Finish(void)
Definition: torcmuxer.cpp:490
int AddH264Stream(int Width, int Height, int Profile, int Bitrate)
Definition: torcmuxer.cpp:395
int AddDummyAudioStream(void)
Definition: torcmuxer.cpp:293
bool IsValid(void)
Definition: torcmuxer.cpp:288
static QString GetAVCCodec(const QByteArray &Packet)
Determine the 3 byte H.264 codec descriptor string.
Definition: torcmuxer.cpp:243
bool AddPacket(AVPacket *Packet, bool CodecConfig)
Definition: torcmuxer.cpp:434
void FinishSegment(bool Init)
Definition: torcmuxer.cpp:467
int WriteAVPacket(uint8_t *Buffer, int Size)
Definition: torcmuxer.cpp:277
static int AVWritePacket(void *Opaque, uint8_t *Buffer, int Size)
Definition: torcmuxer.cpp:229
TorcMuxer(const QString &File)
Definition: torcmuxer.cpp:121