File size: 1,837 Bytes
477da44 |
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 |
#ifndef __MPP_DECODER_H__
#define __MPP_DECODER_H__
#include <string.h>
#include "rockchip/rk_mpi.h"
#include "rockchip/mpp_frame.h"
#include <string.h>
#include <pthread.h>
#define MPI_DEC_STREAM_SIZE (SZ_4K)
#define MPI_DEC_LOOP_COUNT 4
#define MAX_FILE_NAME_LENGTH 256
typedef void (*MppDecoderFrameCallback)(void* userdata, int width_stride, int height_stride, int width, int height, int format, int fd, void* data);
typedef struct
{
MppCtx ctx;
MppApi *mpi;
RK_U32 eos;
char *buf;
MppBufferGroup frm_grp;
MppBufferGroup pkt_grp;
MppPacket packet;
size_t packet_size;
MppFrame frame;
RK_S32 frame_count;
RK_S32 frame_num;
size_t max_usage;
} MpiDecLoopData;
class MppDecoder
{
public:
MppCtx mpp_ctx = NULL;
MppApi *mpp_mpi = NULL;
MppDecoder();
~MppDecoder();
int Init(int video_type, int fps, void* userdata);
int SetCallback(MppDecoderFrameCallback callback);
int Decode(uint8_t* pkt_data, int pkt_size, int pkt_eos);
int Reset();
private:
// base flow context
MpiCmd mpi_cmd = MPP_CMD_BASE;
MppParam mpp_param1 = NULL;
RK_U32 need_split = 1;
RK_U32 width_mpp ;
RK_U32 height_mpp ;
MppCodingType mpp_type;
size_t packet_size = 2400*1300*3/2;
MpiDecLoopData loop_data;
// bool vedio_type;//判断vedio是h264/h265
MppPacket packet = NULL;
MppFrame frame = NULL;
pthread_t th;
MppDecoderFrameCallback callback;
int fps = -1;
unsigned long last_frame_time_ms = 0;
void* userdata = NULL;
};
size_t mpp_frame_get_buf_size(const MppFrame s);
size_t mpp_buffer_group_usage(MppBufferGroup group);
#endif //__MPP_DECODER_H__
|