1
0
mirror of https://gitee.com/drabel/LibQQt.git synced 2025-01-04 10:18:44 +08:00
LibQQt/test/qqtffmpegplayer/FFmpegPlayer.h
2018-06-04 02:16:25 +08:00

80 lines
1.4 KiB
C++

#ifndef FFMPEGPLAYER_H
#define FFMPEGPLAYER_H
#define MAX_AUDIO_FRAME_SIZE 192000
#define SDL_AUDIO_BUFFER_SIZE 1024
#define MAX_AUDIO_SIZE (25 * 16 * 1024)
#define MAX_VIDEO_SIZE (25 * 256 * 1024)
#define FLUSH_DATA "FLUSH"
extern "C" {
# include <libavcodec/avcodec.h>
# include <libavformat/avformat.h>
# include <libswscale/swscale.h>
# include <libswresample/swresample.h>
# include <SDL2/SDL.h>
# include <SDL2/SDL_thread.h>
}
#include<QThread>
typedef struct PacketQueue
{
AVPacketList* first_pkt, *last_pkt;
int nb_packets;
int size;
SDL_mutex* mutex;
SDL_cond* cond;
} PacketQueue;
typedef struct
{
SwrContext* swr_ctx ;//
AVFrame* wanted_frame;//
uint8_t* audio_pkt_data;
int audio_pkt_size; //
AVFrame* frame; //
AVFormatContext* afct; //
AVCodecContext* acct;//
unsigned int audio_buf_size; //
unsigned int audio_buf_index; //
PacketQueue audioq; //
AVPacket pkt; //
} mediaState;
enum playerStatus
{
playing,
pausing,
buffering,
stopping
};
class FFmpegPlayer : public QThread
{
Q_OBJECT
public:
explicit FFmpegPlayer ( QObject* parent = 0 );
void setMedia ( const QString );
void stop();
void pause();
void play();
playerStatus getPlayerStatus();
void FreeAllocSpace();
protected:
virtual void run();
signals:
public slots:
private:
QString m_url;
mediaState m_MS;
};
#endif // FFMPEGPLAYER_H