parent
6ce7f8e6b3
commit
acc42e49d5
@ -0,0 +1,96 @@ |
||||
//
|
||||
// Created by xu fulong on 2022/9/24.
|
||||
//
|
||||
|
||||
#ifndef FFMPEGANDROID_FFMESSAGEQUEUE_H |
||||
#define FFMPEGANDROID_FFMESSAGEQUEUE_H |
||||
|
||||
#include <mutex> |
||||
#include <libavutil/mem.h> |
||||
|
||||
/**************** msg define begin ***************/ |
||||
|
||||
#define FFP_MSG_FLUSH 0 |
||||
#define FFP_MSG_ERROR 100 |
||||
#define FFP_MSG_PREPARED 200 |
||||
#define FFP_MSG_COMPLETED 300 |
||||
#define FFP_MSG_VIDEO_SIZE_CHANGED 400 |
||||
#define FFP_MSG_SAR_CHANGED 401 |
||||
#define FFP_MSG_VIDEO_RENDERING_START 402 |
||||
#define FFP_MSG_AUDIO_RENDERING_START 403 |
||||
#define FFP_MSG_VIDEO_ROTATION_CHANGED 404 |
||||
#define FFP_MSG_AUDIO_DECODED_START 405 |
||||
#define FFP_MSG_VIDEO_DECODED_START 406 |
||||
#define FFP_MSG_OPEN_INPUT 407 |
||||
#define FFP_MSG_FIND_STREAM_INFO 408 |
||||
#define FFP_MSG_COMPONENT_OPEN 409 |
||||
#define FFP_MSG_VIDEO_SEEK_RENDERING_START 410 |
||||
#define FFP_MSG_AUDIO_SEEK_RENDERING_START 411 |
||||
|
||||
#define FFP_MSG_BUFFERING_START 500 |
||||
#define FFP_MSG_BUFFERING_END 501 |
||||
#define FFP_MSG_BUFFERING_UPDATE 502 |
||||
#define FFP_MSG_BUFFERING_BYTES_UPDATE 503 |
||||
#define FFP_MSG_BUFFERING_TIME_UPDATE 504 |
||||
#define FFP_MSG_SEEK_COMPLETE 600 |
||||
#define FFP_MSG_PLAYBACK_STATE_CHANGED 700 |
||||
#define FFP_MSG_TIMED_TEXT 800 |
||||
#define FFP_MSG_VIDEO_DECODER_OPEN 900 |
||||
|
||||
#define FFP_REQ_START 1001 |
||||
#define FFP_REQ_PAUSE 1002 |
||||
#define FFP_REQ_SEEK 1003 |
||||
|
||||
/**************** msg define end *****************/ |
||||
|
||||
typedef struct AVMessage { |
||||
int what; |
||||
int arg1; |
||||
int arg2; |
||||
void *obj; |
||||
void (*free_l)(void *obj); |
||||
struct AVMessage *next; |
||||
} AVMessage; |
||||
|
||||
typedef struct MessageQueue { |
||||
AVMessage *first_msg, *last_msg; |
||||
int nb_messages; |
||||
int abort_request; |
||||
std::mutex mutex; |
||||
std::condition_variable cond; |
||||
|
||||
AVMessage *recycle_msg; |
||||
int recycle_count; |
||||
int alloc_count; |
||||
} MessageQueue; |
||||
|
||||
class FFMessageQueue { |
||||
|
||||
private: |
||||
MessageQueue *q; |
||||
|
||||
public: |
||||
|
||||
void init(); |
||||
|
||||
void start(); |
||||
|
||||
void flush(); |
||||
|
||||
void sendMessage1(int what); |
||||
|
||||
void sendMessage2(int what, int arg1); |
||||
|
||||
void sendMessage3(int what, int arg1, int arg2); |
||||
|
||||
int get(AVMessage *msg, int block); |
||||
|
||||
void remove(int what); |
||||
|
||||
void abort(); |
||||
|
||||
void destroy(); |
||||
}; |
||||
|
||||
|
||||
#endif //FFMPEGANDROID_FFMESSAGEQUEUE_H
|
Loading…
Reference in new issue