资源简介
功能简介:
1.摄像头通过V4L2采集yuyv格式图像数据
2.yuyv转yuv420p格式
3.yuv420p通过x264编码压缩为h264码流
4.将h264码流通过tcp传输到显示端
5.显示端接收h264码流,并保存为本地文件,程序运行结束后可通过VLC播放器直接打开xxxx.h264文件进行播放。
代码片段和文件信息
#include “cam.h“
#include “x264_encode.h“
#include “net.h“
int usTimer(long us)
{
struct timeval timeout;
timeout.tv_sec = 0;
timeout.tv_usec = us;
return select(0NULLNULLNULL&timeout);
}
int yuyv_to_yuv420p(const unsigned char *in unsigned char *out unsigned int width unsigned int height)
{
unsigned char *y = out;
unsigned char *u = out + width*height;
unsigned char *v = out + width*height + width*height/4;
unsigned int ij;
unsigned int base_h;
unsigned int is_y = 1 is_u = 1;
unsigned int y_index = 0 u_index = 0 v_index = 0;
unsigned long yuv422_length = 2 * width * height;
//序列为YU YV YU YV,一个yuv422帧的长度 width * height * 2 个字节
//丢弃偶数行 u v
for(i=0; i {
*(y+y_index) = *(in+i);
y_index++;
}
for(i=0; i {
base_h = i*width*2;
for(j=base_h+1; jse_h+width*2; j+=2)
{
if(is_u){
*(u+u_index) = *(in+j);
u_index++;
is_u = 0;
}
else{
*(v+v_index) = *(in+j);
v_index++;
is_u = 1;
}
}
}
return 1;
}
int open_cam()
{
struct v4l2_capability cap;
cam_fd = open(DEV_NAME O_RDWR | O_NONBLOCK 0); //非阻塞方式打开摄像头
if (cam_fd < 0)
{
perror(“open device failed!“);
return -1;
}
/*获取摄像头信息*/
if (ioctl(cam_fd VIDIOC_QUERYCAP &cap) < 0)
{
perror(“get info failed!“);
return -1;
}
printf(“Driver Name:%s\n Card Name:%s\n Bus info:%s\n version:%d\n capabilities:%x\n \n “ cap.driver cap.card cap.bus_infocap.versioncap.capabilities);
if ((cap.capabilities & V4L2_CAP_VIDEO_CAPTURE) == V4L2_CAP_VIDEO_CAPTURE)
{
printf(“Device %s: supports capture.\n“DEV_NAME);
}
if ((cap.capabilities & V4L2_CAP_STREAMING) == V4L2_CAP_STREAMING)
{
printf(“Device %s: supports streaming.\n“DEV_NAME);
}
return 0;
}
int set_cap_frame()
{
struct v4l2_format fmt;
/*设置摄像头捕捉帧格式及分辨率*/
fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
fmt.fmt.pix.width = WIDTH;
fmt.fmt.pix.height = HEIGHT;
fmt.fmt.pix.field = V4L2_FIELD_INTERLACED;
fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV; //图像存储格式设为YUYV(YUV422)
if (ioctl(cam_fd VIDIOC_S_FMT &fmt) < 0)
{
perror(“set fmt failed!“);
return -1;
}
printf(“fmt.type:%d\n“fmt.type);
printf(“pix.pixelformat:%c%c%c%c\n“ \
fmt.fmt.pix.pixelformat & 0xFF\
(fmt.fmt.pix.pixelformat >> 8) & 0xFF \
(fmt.fmt.pix.pixelformat >> 16) & 0xFF\
(fmt.fmt.pix.pixelformat >> 24) & 0xFF);
printf(“pix.width:%d\n“fmt.fmt.pix.width);
printf(“pix.height:%d\n“fmt.fmt.pix.height);
printf(“pix.fiel
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-10-29 16:45 cam_x264_v2.0\
目录 0 2018-10-29 16:44 cam_x264_v2.0\cam\
文件 6387 2018-10-29 16:35 cam_x264_v2.0\cam\cam.c
文件 19576 2018-10-29 16:35 cam_x264_v2.0\cam\cam.o
文件 41314 2018-10-29 16:35 cam_x264_v2.0\cam\cam_x264
目录 0 2018-10-29 16:43 cam_x264_v2.0\cam\include\
文件 773 2018-10-29 16:33 cam_x264_v2.0\cam\include\cam.h
文件 290 2018-10-29 10:16 cam_x264_v2.0\cam\include\net.h
文件 46889 2018-10-23 10:41 cam_x264_v2.0\cam\include\x264.h
文件 172 2018-10-17 10:01 cam_x264_v2.0\cam\include\x264_config.h
文件 140 2018-10-29 16:15 cam_x264_v2.0\cam\include\x264_encode.h
目录 0 2018-10-29 16:43 cam_x264_v2.0\cam\lib\
文件 2375598 2018-10-17 10:00 cam_x264_v2.0\cam\lib\libx264.so
文件 2375598 2018-10-17 10:00 cam_x264_v2.0\cam\lib\libx264.so.157
目录 0 2018-10-29 16:43 cam_x264_v2.0\cam\lib\pkgconfig\
文件 321 2018-10-17 10:00 cam_x264_v2.0\cam\lib\pkgconfig\x264.pc
文件 2125 2018-10-29 16:35 cam_x264_v2.0\cam\main.c
文件 10988 2018-10-29 16:35 cam_x264_v2.0\cam\main.o
文件 376 2018-10-24 16:24 cam_x264_v2.0\cam\Makefile
文件 562 2018-10-29 10:07 cam_x264_v2.0\cam\net.c
文件 4828 2018-10-29 16:35 cam_x264_v2.0\cam\net.o
文件 4680 2018-10-29 16:16 cam_x264_v2.0\cam\x264_encode.c
文件 17236 2018-10-29 16:35 cam_x264_v2.0\cam\x264_encode.o
目录 0 2018-10-29 16:45 cam_x264_v2.0\cli\
文件 1906 2018-10-29 16:08 cam_x264_v2.0\cli\cli_video.c
文件 426 2018-10-29 17:14 cam_x264_v2.0\read.txt
相关资源
- 视频编解码---x264用于编码,ffmpeg用于
- webcam(含有编译好的ffmpegx264z库)
- D3D三层Texture纹理经像素着色器实现渲
- Qt播放YUV420P文件
- linux+qt+v4l2 摄像头视频捕捉--源代码
- Linux下使用Qt+V4L2测试UVC相机
- x264-snapshot-20170415-2245.tar.bz2
- 基于v4l2的qt视频实时显示
- libx264.zip
- v4l2 USB摄像头图像采集程序C
- linux下基于V4L2/Qt的usb摄像头采集显示
- v4l2采集MJPG保存到本地
- linux qt4.7 v4l2 YUV(YUYV) mmap 显示视频
- 自己写的yuv播放器,支持YUV420P
- V4L2 通过JRTPLIB 实现RTP实时视频传输并
- singleCamD
- MAX9286的V4L2测试代码
- webcam_v4l2_x264
- 嵌入式平台ARm9使用V4L2格式摄像头抓帧
- linux下基于QT和v4l2驱动的USB摄像头视频
- 智能家居的项目用的 V4L2
- v4l2采集视频并保存和lcd显示
- v4l2 QT MJPEG格式 视频采集+屏幕显示+图
- 使用Linux的V4L2读取摄像头数据+Opencv图
- v4l2 qt实时显示摄像头数据未使用ope
- yuv420p转yuv422
- 2014 libx264 最新 64bit
- V4L2视频采集与h264编码
- linux下v4l2实现图片采集
- linux下配置ffmpeg支持x264编码
评论
共有 条评论