91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 5KB
    文件類型: .gz
    金幣: 1
    下載: 1 次
    發布日期: 2021-06-06
  • 語言: 其他
  • 標簽: RK3399??MPP??

資源簡介

本例程通過調用RK3399的MPP庫,實現從USB攝像頭采集視頻數據,并編碼輸出為h264幀的視頻文件。

資源截圖

代碼片段和文件信息

#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?

#include?“camerareader.h“

#define?CAMERA_WIDTH?1280
#define?CAMERA_HEIGHT?720
#define?FORCE_FORMAT?1
#define?DEVICE_FILE?“/dev/video1“
#define?MPP_ALIGN(x?a)?????????(((x)+(a)-1)&~((a)-1))

struct?MPP_ENC_DATA
{
//?global?flow?control?flag
uint32_t?frm_eos;
uint32_t?pkt_eos;
uint32_t?frame_count;
uint64_t?stream_size;

//?base?flow?context
MppCtx?ctx;
MppApi?*mpi;
MppEncPrepCfg?prep_cfg;
MppEncRcCfg?rc_cfg;
MppEncCodecCfg?codec_cfg;

//?input?/?output
MppBuffer?frm_buf;
MppEncSeiMode?sei_mode;

uint32_t?width;
uint32_t?height;
uint32_t?hor_stride;
uint32_t?ver_stride;
MppframeFormat?fmt;
MppCodingType?type;
uint32_t?num_frames;

//?resources
size_t?frame_size;

int32_t?gop;
int32_t?fps;
int32_t?bps;

FILE?*fp_output;
};

enum?IO_METHOD
{
????IO_METHOD_READ
????IO_METHOD_MMAP
????//IO_METHOD_USERPTR
};

struct?buffer
{
????void???*start;
????size_t??length;
};

static?struct?buffer?*buffers;
static?unsigned?int?n_buffers;
static?IO_METHOD?io_method;

static?MPP_ENC_DATA?mpp_enc_data;

CameraReader::CameraReader()
{

}

static?void?cleanup(void?*p)
{
????free(p);
}

static?int?xioctl(int?fh?int?request?void?*arg)
{
????int?r;
????do
????{
????????r?=?ioctl(fh?request?arg);
????}?while?(-1?==?r?&&?EINTR?==?errno);

????return?r;
}

static?uint8_t?check_pix(int?a)
{
????if(a?????????a?=?0;
????else?if(a?>?255)
????????a?=?255;

????return?a;
}


bool?CameraReader::process_image(uint8_t?*p?int?size)
{
MPP_RET?ret?=?MPP_OK;
????if(size?!=?CAMERA_WIDTH?*?CAMERA_HEIGHT?*?2)
????{
????????fprintf(stderr?“Invalid?image?data?buffer!\n“);
????????return?true;
????}

????Mppframe?frame?=?NULL;
????MppPacket?packet?=?NULL;
????void?*buf?=?mpp_buffer_get_ptr(mpp_enc_data.frm_buf);

????//TODO:?improve?performance?here?
????memcpy(buf?p?size);

????ret?=?mpp_frame_init(&frame);
????if?(ret)
????{
???? printf(“mpp_frame_init?failed\n“);
???? return?true;
????}

????mpp_frame_set_width(frame?mpp_enc_data.width);
????mpp_frame_set_height(frame?mpp_enc_data.height);
????mpp_frame_set_hor_stride(frame?mpp_enc_data.hor_stride);
????mpp_frame_set_ver_stride(frame?mpp_enc_data.ver_stride);
????mpp_frame_set_fmt(frame?mpp_enc_data.fmt);
????mpp_frame_set_buffer(frame?mpp_enc_data.frm_buf);
????mpp_frame_set_eos(frame?mpp_enc_data.frm_eos);

????ret?=?mpp_enc_data.mpi->encode_put_frame(mpp_enc_data.ctx?frame);
????if?(ret)
????{
???? printf(“mpp?encode?put?frame?failed\n“);
???? return?true;
????}

????ret?=?mpp_enc_data.mpi->encode_get_packet(mpp_enc_data.ctx?&packet);
????if?(ret)
????{
???? printf(“mpp?encode?get?packet?failed\n“);
???? return?true;
????}

????if?(packet)
????{
???? //?write?packet?to?file?here
???? voi

評論

共有 條評論