#include "sys/sock.h"
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <iostream>
#include <pthread.h>
#include <time.h>
#include <string>
#include <dirent.h>
#include <stdlib.h>
#include "rk_mpi.h"
#include "mpp_log.h"
#include "mpp_mem.h"
#include "mpp_env.h"
#include "mpp_time.h"
#include "mpp_common.h"
#include "mpp_task.h"
#include "utils.h"
#include "ffmpeg_task.hh"
#include "opencv_task.hh"
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#define MPI_DEC_LOOP_COUNT 4
#define MPI_DEC_STREAM_SIZE (1024*5)
#define MAX_FILE_NAME_LENGTH 256
typedef struct {
MppCtx ctx;
MppApi *mpi;
/* end of stream flag when set quit the loop */
RK_U32 eos;
/* buffer for stream data reading */
char *buf;
/* input and output */
MppBufferGroup frm_grp;
MppBufferGroup pkt_grp;
MppPacket packet;
size_t packet_size;
MppFrame frame;
FILE *fp_input;
FILE *fp_output;
FILE *fp_config;
RK_S32 frame_count;
RK_S32 frame_num;
size_t max_usage;
} MpiDecLoopData,MpiDecLoopData1;
typedef struct {
char file_input[MAX_FILE_NAME_LENGTH];
char file_output[MAX_FILE_NAME_LENGTH];
char file_config[MAX_FILE_NAME_LENGTH];
MppCodingType type;
MppFrameFormat format;
RK_U32 width;
RK_U32 height;
RK_U32 debug;
RK_U32 have_input;
RK_U32 have_output;
RK_U32 have_config;
RK_U32 simple;
RK_S32 timeout;
RK_S32 frame_num;
size_t pkt_size;
// report information
size_t max_usage;
} MpiDecTestCmd,MpiDecTestCmd1;
static OptionInfo mpi_dec_cmd[] = {
{"i", "input_file", "input bitstream file"},
{"o", "output_file", "output bitstream file, "},
{"c", "ops_file", "input operation config file"},
{"w", "width", "the width of input bitstream"},
{"h", "height", "the height of input bitstream"},
{"t", "type", "input stream coding type"},
{"f", "format", "output frame format type"},
{"d", "debug", "debug flag"},
{"x", "timeout", "output timeout interval"},
{"n", "frame_number", "max output frame number"},
};
pthread_mutex_t mutex0 ;
pthread_mutex_t mutex1 ;
pthread_mutex_t mutex2 ;
pthread_mutex_t mutex3 ;
pthread_mutex_t mutex4 ;
pthread_mutex_t mutex5 ;
unsigned int summ_list0=0;
unsigned int summ_list1=0;
unsigned int summ_list2=0;
unsigned int summ_list3=0;
unsigned int summ_list4=0;
unsigned int summ_list5=0;
static unsigned char mpp_buffer[640*480*3/2];
FILE *fdddd;
static void dump_mpp_frame_to_file0(MppFrame frame,int mode)
{
static int flage0=0;
static int flage1=0;
static int flage2=0;
static int flage3=0;
static int flage4=0;
static int flage5=0;
RK_U32 width = 0;
RK_U32 height = 0;
//RK_U32 h_stride = 0;
//RK_U32 v_stride = 0;
//MppFrameFormat fmt = MPP_FMT_YUV420SP;
MppBuffer buffer = NULL;
RK_U8 *base = NULL;
if (NULL == frame)
return ;
width = mpp_frame_get_width(frame);
height = mpp_frame_get_height(frame);
//h_stride = mpp_frame_get_hor_stride(frame);
//v_stride = mpp_frame_get_ver_stride(frame);
//fmt = mpp_frame_get_fmt(frame);
buffer = mpp_frame_get_buffer(frame);
if (NULL == buffer)
return ;
base = (RK_U8 *)mpp_buffer_get_ptr(buffer);
switch(mode){
case 0:flage0+=1;if(flage0>=7){flage0=0;pthread_mutex_lock(&mutex0);list_addd0( mode, 512, 288,base);summ_list0++;pthread_mutex_unlock(&mutex0);}break;
case 1:flage1+=1;if(flage1>=7){flage1=0;pthread_mutex_lock(&mutex1);list_addd1( mode, 512, 288,base);summ_list1++;pthread_mutex_unlock(&mutex1);}break;
case 2:flage2+=1;if(flage2>=7){flage2=0;pthread_mutex_lock(&mutex2);guiyihua_pic(base,width,height,mpp_buffer);/*fwrite(mpp_buffer, 1, 640*480*3/2, fdddd);list_addd2( mode, 640, 480,mpp_buffer);summ_list2++;*/pthread_mutex_unlock(&mutex2);}break;
case 3:flage3+=1;if(flage3>=7){flage3=0;pthread_mutex_lock(&mutex3);list_addd3( mode, 512, 288,base);summ_list3++;pthread_mutex_unlock(&mutex3);}break;
case 4:flage4+=1;if(flage4>=7){flage4=0;pthread_mutex_lock(&mutex4);/*list_addd4( mode, 512, 288,base);summ_list4++;*/pthread_mutex_unlock(&mutex4);}break;
case 5:flage5+=1;if(flage5>=7){flage5=0;pthread_mutex_lock(&mutex5);/*list_addd5( mode, 512, 288,base);summ_list5++;*/pthread_mutex_unlock(&mutex5);}break;
default:break;
}
}
static int decode_simple(MpiDecLoopData *data,int mode,int fd,int n)
{
RK_U32 pkt_done = 0;
RK_U32 pkt_eos = 0;
MPP_RET ret = MPP_OK;
MppCtx ctx = data->ctx;
MppApi *mpi = data->mpi;
char *buf = data->buf;
MppPacket packet = data->packet;
MppFrame frame = NULL;
size_t read_size = 0;
size_t packet_size = data->packet_size;
char log_buf[256];
do {
/*if (data->fp_config) {
char line[MAX_FILE_NAME_LENGTH];
char *ptr = NULL;
do {
ptr = fgets(line, MAX_FILE_NAME_LENGTH, data->fp_config);
if (ptr) {
OpsLine info;
RK_S32 cnt = parse_config_line(line, &info);
// parser for packet message
if (cnt >= 3 && 0 == strncmp("pkt", info.cmd, sizeof(info.cmd))) {
packet_size = info.value2;
break;
}
// parser for reset message at the end
if (0&nb

这是一个关于多媒体处理的测试程序,包括H264解码和帧处理。程序使用了多线程,每个线程对应不同的解码模式,并从管道中读取数据。解码后的帧被写入文件并进行一些处理,如图片格式转换和信息统计。测试涵盖了不同输入文件和配置选项,如帧数、输出格式和解码模式。
最低0.47元/天 解锁文章
7126

被折叠的 条评论
为什么被折叠?



