MythTV  master
mythavformatwriter.h
Go to the documentation of this file.
1 #ifndef AVFORMATWRITER_H_
2 #define AVFORMATWRITER_H_
3 
4 // Qt
5 #include <QList>
6 
7 // MythTV
8 #include "libmythbase/mythconfig.h"
11 #include "libmythtv/mythavutil.h"
12 
13 #undef HAVE_AV_CONFIG_H
14 extern "C" {
15 #include "libavcodec/avcodec.h"
16 #include "libavformat/avformat.h"
17 }
18 
20 {
21  public:
22  MythAVFormatWriter() = default;
23  ~MythAVFormatWriter() override;
24 
25  bool Init (void) override;
26  bool OpenFile (void) override;
27  bool CloseFile (void) override;
28  int WriteVideoFrame (MythVideoFrame *Frame) override;
29  int WriteAudioFrame (unsigned char *Buffer, int FrameNumber, std::chrono::milliseconds &Timecode) override;
30  int WriteTextFrame (int VBIMode, unsigned char *Buffer, int Length,
31  std::chrono::milliseconds Timecode, int PageNumber) override;
32  int WriteSeekTable (void) override;
33  bool SwitchToNextFile (void) override;
34 
35  bool NextFrameIsKeyFrame (void);
36  bool ReOpen (const QString& Filename);
37 
38  private:
39  AVStream* AddVideoStream (void);
40  bool OpenVideo (void);
41  AVStream* AddAudioStream (void);
42  bool OpenAudio (void);
43  AVFrame* AllocPicture (enum AVPixelFormat PixFmt);
44  void Cleanup (void);
45  AVRational GetCodecTimeBase (void);
46  static bool FindAudioFormat (AVCodecContext *Ctx, const AVCodec *Codec, AVSampleFormat Format);
47 
48  MythAVFormatBuffer *m_avfBuffer { nullptr };
49  MythMediaBuffer *m_buffer { nullptr };
50  AVOutputFormat m_fmt { };
51  AVFormatContext *m_ctx { nullptr };
53  AVStream *m_videoStream { nullptr };
54  const AVCodec *m_avVideoCodec { nullptr };
55  AVStream *m_audioStream { nullptr };
56  const AVCodec *m_avAudioCodec { nullptr };
57  AVFrame *m_picture { nullptr };
58  AVFrame *m_audPicture { nullptr };
59  unsigned char *m_audioInBuf { nullptr };
60  unsigned char *m_audioInPBuf { nullptr };
61  QList<std::chrono::milliseconds> m_bufferedVideoFrameTimes;
63  QList<std::chrono::milliseconds> m_bufferedAudioFrameTimes;
64 };
65 
66 #endif
67 
68 /* vim: set expandtab tabstop=4 shiftwidth=4: */
69 
mythmediawriter.h
Frame
Definition: zmdefines.h:93
VBIMode
Definition: tv.h:6
MythDate::Format
Format
Definition: mythdate.h:15
MythMediaBuffer
Definition: mythmediabuffer.h:50
MythMediaWriter::OpenFile
virtual bool OpenFile(void)=0
mythavformatbuffer.h
MythAVFormatWriter::m_codecMap
MythCodecMap m_codecMap
Definition: mythavformatwriter.h:52
MythAVFormatWriter::m_bufferedVideoFrameTypes
QList< int > m_bufferedVideoFrameTypes
Definition: mythavformatwriter.h:62
AVFrame
struct AVFrame AVFrame
Definition: BorderDetector.h:15
MythAVFormatWriter
Definition: mythavformatwriter.h:19
MythMediaWriter::WriteTextFrame
virtual int WriteTextFrame(int VBIMode, unsigned char *Buffer, int Length, std::chrono::milliseconds Timecode, int PageNumber)=0
MythMediaWriter::WriteVideoFrame
virtual int WriteVideoFrame(MythVideoFrame *Frame)=0
MythCodecMap
Definition: mythavutil.h:29
MythMediaWriter::SwitchToNextFile
virtual bool SwitchToNextFile(void)=0
MTV_PUBLIC
#define MTV_PUBLIC
Definition: mythtvexp.h:15
Buffer
Definition: MythExternControl.h:36
MythAVFormatWriter::m_bufferedVideoFrameTimes
QList< std::chrono::milliseconds > m_bufferedVideoFrameTimes
Definition: mythavformatwriter.h:61
MythMediaWriter::CloseFile
virtual bool CloseFile(void)=0
MythMediaWriter::Init
virtual bool Init(void)=0
mythavutil.h
MythAVFormatWriter::m_bufferedAudioFrameTimes
QList< std::chrono::milliseconds > m_bufferedAudioFrameTimes
Definition: mythavformatwriter.h:63
MythMediaWriter::WriteAudioFrame
virtual int WriteAudioFrame(unsigned char *Buffer, int FrameNumber, std::chrono::milliseconds &Timecode)=0
MythVideoFrame
Definition: mythframe.h:88
MythMediaWriter::WriteSeekTable
virtual int WriteSeekTable(void)=0
MythAVFormatBuffer
Definition: mythavformatbuffer.h:13
MythMediaWriter
Definition: mythmediawriter.h:11