-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMediaOutput.h
71 lines (65 loc) · 1.82 KB
/
CMediaOutput.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#pragma once
#include <QObject>
#include "CMediaData.h"
#include <qvector.h>
#include <qmutex.h>
class SwsContext;
class QAudioOutput;
class QIODevice;
class SwrContext;
class CMediaOutput : public QObject
{
Q_OBJECT
public:
CMediaOutput(QList<CMediaData*>& data, QObject *parent=nullptr);
~CMediaOutput();
//打开并初始化音视频转化上下文,如视频转YUV-RGB,音频FLT--S16
virtual int open() = 0;
//写音视频
virtual int write() = 0;
virtual void free();
void setWidth(int width) { m_nWidth = width; }
void setHeight(int height) { m_nHeight = height; }
void setReWidth(int width) { m_nResizeWidth = width; }
void setReHeight(int height) { m_nResizeHeight = height; }
void setAudioCodecPara(AVCodecParameters* para) { m_nSampleRate = para->sample_rate; m_nChannels = para->channels; m_sampleFmt =static_cast<AVSampleFormat>( para->format); }
void setExit() { m_bWrite = false; }
protected:
void filter();
protected:
QList<CMediaData*>& m_dataList;
QVector<FilterType> m_vecFilterType;
bool m_bWrite = true;
int m_nWidth = 0;
int m_nHeight = 0;
int m_nResizeWidth = 0;
int m_nResizeHeight = 0;
QMutex m_mutex;
int m_nSampleRate = 0;
int m_nChannels = 0;
AVSampleFormat m_sampleFmt = AV_SAMPLE_FMT_NONE;
};
class COutScreen:public CMediaOutput
{
Q_OBJECT
public:
COutScreen(QList<CMediaData*>& data, QObject *parent = nullptr);
~COutScreen();
//打开并初始化音视频转化上下文,如视频转YUV-RGB,音频FLT--S16
virtual int open() ;
//把视频送到屏幕,音频送到声卡
virtual int write() ;
void free();
signals:
void sendPic(AVFrame * pic);
private:
//通过QT的QAudioOutput播放声音,初始化QAudioFormat参数
int initAudio();
//视频转换上下文
SwsContext * m_pVSwsCtx = nullptr;
long long m_starTime = 0;
QAudioOutput* m_pAudioOutput = nullptr;
QIODevice * m_pIODeviceOut = nullptr;
//音频转换上下文
SwrContext *m_pASwrCtx = nullptr;
};