资源简介
本例程通过调用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 < 0)
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
相关资源
- CMPP3.0模拟网关,绝对好用,自己测试
- MPPT算法.pdf
- cmpp短信网关sp和ISMG端(可执行程序)
- Project导出成Excel的工具
- rkispcamera
- 瑞芯微RK3399官方核心板8层板PCB文件
- 10项目进度表(Project模板) MPP格式
- 基于qxmpp协议最简单的聊天客户端
- 光伏系统mppt
- RK3399 MPP 开发参考
- 安卓即时通讯基于xmpp
- TI的太阳能控制器方案带源码
- RK3399_SCH Ver1.4.zip
- 脉冲位置调制
- HiMPP V3.0 媒体处理软件开发参考
- 安卓xmpp客户端基于asmack+openfire
- XMPP权威指南 -中文
- smppapi-0.3.9.rar
- mppt控制技术
- RK_Sapphire_RK3399.rar
- MPPT控制的可运行程序合辑
- 海思35XX MPP构架和3798 UNF构架分析 - 副
- Rockchip RK3399 软件开发指南.pdf
- Rockchip_RK3399_Datasheet_V1.6-20170301.pdf
- 独立光伏发电系统MPPT的模糊PID控制研
- CMPP2模拟网关可模拟submitresp返回值
- 分布式光伏电源对配电网的电能质量
- HiMPP IPC V2.0 媒体处理软件开发参考
- XAMPP V1.7.2 Final for Windows官方多国语言
- 快速抠图,破解版,容易操作,图像
评论
共有 条评论