日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【音视频】V4L2摄像头应用编程

發(fā)布時間:2024/3/13 编程问答 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【音视频】V4L2摄像头应用编程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 1 V4L2
    • 1.1 V4L2特點
    • 1.2 V4L2設備
  • 2 V4L2設備訪問接口
    • 2.1設備訪問
      • 2.1.1 查詢設備屬性
      • 2.1.2 查詢設備輸出格式
      • 2.1.3 設置幀輸出格式
      • 2.1.4 申請幀緩存
      • 2.1.5 內核內存轉換
      • 2.1.6 緩沖幀內存入隊操作
      • 2.1.7 啟動視頻流采集
      • 2.1.8 讀取數(shù)據(jù)幀內存序號
      • 2.1.9 關閉視頻流采集
    • 2.2 視頻流讀取
  • 3 V4L2應用開發(fā)流程
  • 4 參考文章


1 V4L2

??V4L2全稱是Video for Linux two(Video4Linux2),是V4L2改進衍生版本。V4L2是linux操作系統(tǒng)下的一個標注化的音頻、視頻設備驅動框架,向下屏蔽底層設備的差異,向上提供標準統(tǒng)一的訪問接口,提高用戶在音視頻方面的應用開發(fā)效率。只要底層音視頻設備(如攝像頭)兼容V4L2標準,則應用程序可以無縫接入該音視頻設備。本文主要描述V4L2視頻設備(攝像頭)的應用。


1.1 V4L2特點

??屏蔽底層差異,向上提供標準的用戶訪問接口,更換支持V4L2標準的物理音視頻設備,原則上應用程序可以完全兼容。V4L2對用戶提供的接口包括:

  • 視頻采集接口

  • 視頻輸出接口

  • 視頻覆蓋/預覽接口

  • 視頻輸出覆蓋接口

  • 編解碼接口


1.2 V4L2設備

??linux思想是一切皆文件。V4L2設備接入并且驅動被加載成功時在"/dev"生成設備文件,名稱為"videoX"(/dev/videoX),X為設備設備序號;一般按接入的設備順序排序,只有一個設備時為video0。V4L2應用程序通過調用linux標準的設備文件系統(tǒng)接口,訪問音視頻設備。


2 V4L2設備訪問接口

??V4L2音視頻設備可通過標準文件系統(tǒng)接口open/read/ioctl/close訪問,設備訪問分為兩大部分,分別是設備訪問和視頻流獲取。關于V4L2的接口聲明、宏定義、枚舉類型可以在“include/uapi/linux/videodev2.h”頭文件中查閱。


2.1設備訪問

??設備訪問包括獲取和設置設備信息,如設備驅動信息、設備屬性、圖像幀格式、控制圖像捕獲等。這些都通過ioctl來實現(xiàn)訪問,訪問格式如下。

ioctl(fd, cmd, param); /* 文件描述符, 命令字, 參數(shù)信息 */

??常用命令字:

VIDIOC_QUERYCAP /* 查詢設備屬性 */ VIDIOC_ENUM_FMT /* 查詢設備支持的輸出格式*/ VIDIOC_G_FMT /* 查詢設備輸出幀格式 */ VIDIOC_S_FMT /* 設置設備輸出幀格式 */ VIDIOC_REQBUFS /* 申請幀緩存 */ VIDIOC_QUERYBUF /* 獲取申請的幀緩存 */ VIDIOC_QBUF /* 將幀緩存加入視頻流采集隊列 */ VIDIOC_DQBUF /* 獲取已采集視頻流的緩存幀 */ VIDIOC_STREAMON /* 開啟視頻流采集 */ VIDIOC_STREAMOFF /* 關閉視頻流采集 */

2.1.1 查詢設備屬性

函數(shù)原型:

int ioctl(int fd, int cmd, struct v4l2_capability *cap);
  • cmd,命令字:VIDIOC_QUERYCAP

  • cap,設備屬性數(shù)據(jù)結構:

struct v4l2_capability{__u8 driver[16]; /* driver驅動名字 */__u8 card[32]; /* device設備名字 */__u8 bus_info[32]; /* 設備在系統(tǒng)中的位置 */__u32 version; /* 驅動版本號 */__u32 capabilities; /* 設備支持的操作 */__u32 device_caps; /* 特殊設備信息 */__u32 reserved[4]; /* 保留字段 */ };

【1】capabilities,視頻設備支持的操作,以每一位表示,常用類型宏位于“/uapi/linux/videodev2.h”定義。

/* Values for 'capabilities' field */ #define V4L2_CAP_VIDEO_CAPTURE 0x00000001 /* Is a video capture device */ #define V4L2_CAP_VIDEO_OUTPUT 0x00000002 /* Is a video output device */ #define V4L2_CAP_VIDEO_OVERLAY 0x00000004 /* Can do video overlay */ #define V4L2_CAP_VBI_CAPTURE 0x00000010 /* Is a raw VBI capture device */ #define V4L2_CAP_VBI_OUTPUT 0x00000020 /* Is a raw VBI output device */ #define V4L2_CAP_SLICED_VBI_CAPTURE 0x00000040 /* Is a sliced VBI capture device */ #define V4L2_CAP_SLICED_VBI_OUTPUT 0x00000080 /* Is a sliced VBI output device */ #define V4L2_CAP_RDS_CAPTURE 0x00000100 /* RDS data capture */ #define V4L2_CAP_VIDEO_OUTPUT_OVERLAY 0x00000200 /* Can do video output overlay */ #define V4L2_CAP_HW_FREQ_SEEK 0x00000400 /* Can do hardware frequency seek */ #define V4L2_CAP_RDS_OUTPUT 0x00000800 /* Is an RDS encoder */

查詢設備屬性偽代碼:

struct v4l2_capability cap = {0};ret = ioctl(fd, VIDIOC_QUERYCAP, &cap);

2.1.2 查詢設備輸出格式

函數(shù)原型:

int ioctl(int fd, int cmd, struct v4l2_fmtdesc *fmt);
  • cmd,命令字:VIDIOC_ENUM_FMT

  • fmt,設備輸出格式數(shù)據(jù)結構:

struct v4l2_fmtdesc {__u32 index; /* 設置信息,查詢格式序號 */__u32 type; /* 設置信息,設備類型 */__u32 flags;__u8 description[32]; /* 返回信息,格式描述 */__u32 pixelformat; /* 返回信息,格式 */__u32 reserved[4]; /* 保留字段 */ };

【1】index,查詢序號,從0開始查詢

【2】type,設備類型,實際類型為enum v4l2_buf_type,位于“/uapi/linux/videodev2.h”定義;如果是camera設備,則設置為V4L2_BUF_TYPE_VIDEO_CAPTURE

【3】flags,一般不用


循環(huán)獲取設備輸出格式偽代碼:

struct v4l2_fmtdesc fmtdesc = {0}; fmtdesc.index = 0 ; fmtdesc.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; printf("the video device support format:\n"); while(ioctl(fd, VIDIOC_ENUM_FMT, &fmtdesc) != -1) { printf("%d.%s\n", fmtdesc.index+1, fmtdesc.description);fmtdesc.index++; }

2.1.3 設置幀輸出格式

??圖像幀輸出格式基本參數(shù)包括:

  • 像素寬度
  • 像素高度
  • 數(shù)據(jù)類型

函數(shù)原型:

int ioctl(int fd, int cmd, struct v4l2_format *format);
  • cmd,命令字:VIDIOC_S_FMT

  • format,設置輸出格式數(shù)據(jù)結構:

struct v4l2_format {__u32 type;/* 設備類型 */union {struct v4l2_pix_format pix; /* V4L2_BUF_TYPE_VIDEO_CAPTURE 設備(camera)使用 */struct v4l2_pix_format_mplane pix_mp; /* V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE */struct v4l2_window win; /* V4L2_BUF_TYPE_VIDEO_OVERLAY */struct v4l2_vbi_format vbi; /* V4L2_BUF_TYPE_VBI_CAPTURE */struct v4l2_sliced_vbi_formatsliced; /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */struct v4l2_sdr_format sdr; /* V4L2_BUF_TYPE_SDR_CAPTURE */struct v4l2_meta_format meta; /* V4L2_BUF_TYPE_META_CAPTURE */__u8 raw_data[200]; /* 保留字段 */} fmt; };

【1】type,設備類型,實際類型為enum v4l2_buf_type,如果是camera設備,則設置為V4L2_BUF_TYPE_VIDEO_CAPTURE

【2】fmt,一個共用體,不同設備的具體配置參數(shù),以camera為例,其數(shù)據(jù)結構struct v4l2_pix_format如下

struct v4l2_pix_format {__u32 width; /* 像素寬度 */__u32 height; /* 像素高度 */__u32 pixelformat;/* 輸出格式,根據(jù)camera支持的格式選擇,JPG或YUV */__u32 field; /* enum v4l2_field */__u32 bytesperline; /* for padding, zero if unused */__u32 sizeimage;__u32 colorspace; /* enum v4l2_colorspace */__u32 priv; /* private data, depends on pixelformat */__u32 flags; /* format flags (V4L2_PIX_FMT_FLAG_*) */__u32 ycbcr_enc; /* enum v4l2_ycbcr_encoding */__u32 quantization; /* enum v4l2_quantization */__u32 xfer_func; /* enum v4l2_xfer_func */ };

2.1.4 申請幀緩存

函數(shù)原型:

int ioctl(int fd, int cmd, struct v4l2_requestbuffers *reqbuf);
  • cmd,命令字:VIDIOC_REQBUFS

  • reqbuf,申請內存數(shù)據(jù)結構:

struct v4l2_requestbuffers {__u32 count; /* 內存塊數(shù)目 */__u32 type; /* 設備類型 */__u32 memory; /* 內存用途 */__u32 reserved[2];/* 保留字段 */ };

【1】count,申請內存塊數(shù)目,至少為1

【2】type,設備類型,實際類型為enum v4l2_buf_type,如果是camera設備,則設置為V4L2_BUF_TYPE_VIDEO_CAPTURE

【3】memory,內存用途,實際類型為enum v4l2_memory,一般用作內存映射V4L2_MEMORY_MMAP

enum v4l2_memory {V4L2_MEMORY_MMAP = 1, /* 內存映射 */V4L2_MEMORY_USERPTR = 2, /* 用戶指針 */V4L2_MEMORY_OVERLAY = 3, /* 內存覆蓋 */V4L2_MEMORY_DMABUF = 4, /* DMA映射 */ };

申請幀緩存?zhèn)未a:

struct v4l2_requestbuffers req_buf = {0};req_buf.count = 1; req_buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; req_buf.memory = V4L2_MEMORY_MMAP; ret = ioctl(fd, VIDIOC_REQBUFS, &req_buf);

2.1.5 內核內存轉換

??通VIDIOC_S_FMT命令字申請的內核態(tài)內存,還需轉換為物理內存,用于映射到用戶態(tài),這樣用戶能直接從物理內存中獲取視頻流數(shù)據(jù),提高效率。

函數(shù)原型:

int ioctl(int fd, int cmd, struct v4l2_buffer *buf);
  • cmd,命令字:VIDIOC_QUERYBUF

  • buf,返回內存數(shù)據(jù)結構:

struct v4l2_buffer {__u32 index; /* 內存塊序號 */__u32 type; /* 類型,與申請的類型一致 */__u32 bytesused;/* 已使用的內存大小 */__u32 flags;__u32 field;struct timeval timestamp;struct v4l2_timecode timecode;__u32 sequence;/* memory location */__u32 memory; /* 內存用途,一般用內存映射 */union {__u32 offset; /* 內存塊可用偏移地址,對于內存映射有效 */unsigned long userptr;struct v4l2_plane *planes;__s32 fd;} m;__u32 length; /* 內存塊大小 */__u32 config_store;__u32 reserved; };

應用偽代碼:

struct v4l2_requestbuffers req_buf = {0}; struct v4l2_buffer buf = {0};req_buf.count = 1; req_buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; req_buf.memory = V4L2_MEMORY_MMAP; ret = ioctl(fd, VIDIOC_REQBUFS, &req_buf);for(i=0; i<req_buf.count; i++) {buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;buf.memory = V4L2_MEMORY_MMAP;buf.index = i;ret = ioctl(pdevice->fd, VIDIOC_QUERYBUF, &buf);pdevice->mmap_buf[i].size = buf.length;pdevice->mmap_buf[i].addr = (char *)mmap(NULL, buf.length, PROT_READ|PROT_WRITE,MAP_PRIVATE, pdevice->fd, buf.m.offset);if(MAP_FAILED == pdevice->mmap_buf[i].addr){perror("mmap failed");} }

??關于內存映射mmap使用,參考文章mmap內存映射。


2.1.6 緩沖幀內存入隊操作

??該操作是將緩沖內存加入V4L2驅動的采集隊列中,視頻設備采集完成,數(shù)據(jù)存于該內存中。

函數(shù)原型:

int ioctl(int fd, int cmd, struct v4l2_buffer *buf);
  • cmd,命令字:VIDIOC_QBUF
  • buf,幀緩存數(shù)據(jù)結構

應用代碼:

int set_video_device_stream_queue(struct _v4l2_video *pdevice, int index) {int ret = 0;struct v4l2_buffer buf = {0};/* 將內核緩存放入隊列 */buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;buf.memory = V4L2_MEMORY_MMAP;buf.index = index;ret = ioctl(pdevice->fd, VIDIOC_QBUF, &buf);if(ret < 0){perror("ioctl call \'VIDIOC_QBUF\' failed");return -1;} }

2.1.7 啟動視頻流采集

??執(zhí)行該命令,視頻設備執(zhí)行數(shù)據(jù)采集,采集完成,將視頻流數(shù)據(jù)存于指定的內存空間。

函數(shù)原型:

int ioctl(int fd, int cmd, enum v4l2_buf_type *type);
  • cmd,命令字:VIDIOC_STREAMON
  • type,設備(緩存幀)類型,camera設備為V4L2_BUF_TYPE_VIDEO_CAPTURE

2.1.8 讀取數(shù)據(jù)幀內存序號

??實質上,執(zhí)行“開啟采集”命令成功后,視頻流數(shù)據(jù)會存于預先申請的物理內存空間。然而,如果申請了多個數(shù)量的幀緩存,此時需知道視頻流存于哪個幀緩存中,用戶根據(jù)序號訪問內存塊。通過該命令可以獲取存放視頻流數(shù)據(jù)幀內存序號。

函數(shù)原型:

int ioctl(int fd, int cmd, struct v4l2_buffer *buf);
  • cmd,命令字:VIDIOC_DQBUF
  • buf,幀緩存數(shù)據(jù)結構

應用代碼:

int read_video_device_stream_frame(struct _v4l2_video *pdevice, int *out_buf_index) {int ret = 0;int i;struct v4l2_buffer buf = {0};/* 從隊列取出數(shù)據(jù) */buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;buf.memory = V4L2_MEMORY_MMAP;ret = ioctl(pdevice->fd, VIDIOC_DQBUF, &buf);if(ret < 0){perror("ioctl call \'VIDIOC_DQBUF\' failed");return -1;}if (buf.index > pdevice->mmap_buf_cnt){printf("buf overflow[%d]\n", buf.index);}*out_buf_index = buf.index;return 0; }

注:

即使只申請一個幀緩存空間,也需要執(zhí)行該命令,以確定數(shù)據(jù)是否正確采集完成,否則內存中數(shù)據(jù)是未知狀態(tài)。


2.1.9 關閉視頻流采集

??結束視頻流采集后,調用VIDIOC_STREAMOFF關閉視頻流采集。

函數(shù)原型:

int ioctl(int fd, int cmd, enum v4l2_buf_type *type);
  • cmd,命令字:VIDIOC_STREAMOFF
  • type,設備(緩存幀)類型,camera設備為V4L2_BUF_TYPE_VIDEO_CAPTURE

2.2 視頻流讀取

??視頻流讀取有兩種方式。

  • 通過標準文件系統(tǒng)接口read讀取
  • 將V4L2設備內核態(tài)映射(mmap)到用戶態(tài),直接從物理內存獲取視頻流
  • 用戶指針模式,內存由用戶分配,與內存映射類似,使用較少

??通過read函數(shù)讀取視頻流,需經(jīng)過物理內存到內核態(tài)、內核態(tài)到用戶態(tài)兩個內存拷貝過程,效率比較低,一般用于靜態(tài)圖像的采集獲取,一般比較少使用。內存映射是常用的方式, 省去兩個拷貝過程,效率高。


3 V4L2應用開發(fā)流程

??應用程序訪問一個V4L2設備的的總體流程如下圖。

關鍵步驟分析:

  • 查詢設備屬性,包驅動信息、支持視頻流格式,以方便后續(xù)設置視頻輸出屬性

  • 設置設備屬性,根據(jù)獲取的設備屬性設置,主要是設置視頻流輸出格式,如制式、寬度、高度、編碼方式

  • 幀緩存申請,用于存放驅動采集的視頻流,并映射到用戶態(tài)

  • 幀緩存加入采集隊列,如果需循環(huán)采集視頻流,每次獲取視頻流后都需執(zhí)行將幀緩存加入采集隊列

  • 結束過程,包括關閉視頻流采集、釋放內存映射、關閉設備描述符


示例:

  • 獲取攝像頭信息
  • 獲取視頻流,保存為圖片信息
#include <linux/videodev2.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/ioctl.h> #include <sys/mman.h> #include <linux/types.h> #include <malloc.h> #include <math.h> #include <errno.h> #include <assert.h>struct _mmap_buf {void *addr;int size; };struct _v4l2_video {int fd;struct _mmap_buf *mmap_buf;int mmap_buf_cnt; };int open_video_device(const char *device_name) {int fd = 0;if (device_name == NULL){return -1;}fd = open(device_name, O_RDWR); /* 以讀寫方式打開;以只讀方式打開導致內存映射出錯 */if(fd < 0){ perror("open video device failed");return -1;};return fd; }int close_video_device(struct _v4l2_video *pdevice) {int ret = 0;int i;for(i = 0; i<pdevice->mmap_buf_cnt; i++){if (pdevice->mmap_buf[i].addr != 0x00){ret = munmap(pdevice->mmap_buf[i].addr, pdevice->mmap_buf[i].size);if(ret < 0){perror("munmap failed");continue;}}}if (pdevice->mmap_buf != 0x00){free(pdevice->mmap_buf);}if (pdevice->fd != 0x00){ret = close(pdevice->fd);if(ret < 0){perror("close fd failed");}}return ret; }int query_video_device_cap(struct _v4l2_video *pdevice) {int ret = 0;struct v4l2_capability cap = {0};struct v4l2_fmtdesc fmtdesc = {0}; /* 查詢攝像頭信息 */ret = ioctl(pdevice->fd, VIDIOC_QUERYCAP, &cap);if(ret < 0){perror("ioctl call \'VIDEO_QUERYCAP\' failed \n");return -1;}printf("video driver name:%s\n", cap.driver);printf("video device name:%s\n", cap.card);printf("video bus information:%s\n", cap.bus_info);printf("video driver version:%d\n", cap.version);printf("video capabilities:%x\n", cap.capabilities);/* 檢查設備是否支持視頻捕獲 */if(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE){printf("the video device support capture\n");}/* 檢查設備是否支持數(shù)據(jù)流 */if(!(cap.capabilities & V4L2_CAP_STREAMING)){printf("the video device support stream\n");}/* 查詢設備支持的輸出格式 */fmtdesc.index = 0 ; fmtdesc.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;printf("the video device support format:\n");while(ioctl(pdevice->fd,VIDIOC_ENUM_FMT,&fmtdesc) != -1){ printf("%d.%s\n", fmtdesc.index+1, fmtdesc.description);fmtdesc.index++;}return ret; }int set_video_device_par(struct _v4l2_video *pdevice) {int ret = 0; struct v4l2_format format;/* 設置幀輸出格式 */format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; format.fmt.pix.width = 640; /* 像素寬度 */format.fmt.pix.height = 480; /* 像素高度 */format.fmt.pix.pixelformat = V4L2_PIX_FMT_JPEG; /* 輸出格式,前提是攝像頭支持該格式,V4L2_PIX_FMT_YYUV */format.fmt.pix.field = V4L2_FIELD_NONE; ret = ioctl(pdevice->fd, VIDIOC_S_FMT, &format);if (ret < 0) {perror("ioctl call \'VIDIOC_S_FMT\' failed");}return ret; }int set_video_device_mmap(struct _v4l2_video *pdevice) {int ret = 0;int i = 0;struct v4l2_requestbuffers req_buf = {0};struct v4l2_buffer buf = {0};/* 申請內核緩存區(qū) */pdevice->mmap_buf_cnt = 1;req_buf.count = 1; /* 緩存數(shù)目 */req_buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; req_buf.memory = V4L2_MEMORY_MMAP; ret = ioctl(pdevice->fd, VIDIOC_REQBUFS, &req_buf);if(ret < 0){perror("ioctl call \'VIDIOC_REQBUFS\' failed");return -1;}pdevice->mmap_buf = malloc(req_buf.count * sizeof(struct _mmap_buf));if(pdevice->mmap_buf == NULL){perror("malloc memory failed");return -1;}/* 將內核態(tài)內存映射到用戶態(tài) */for(i=0; i<req_buf.count; i++){buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;buf.memory = V4L2_MEMORY_MMAP;buf.index = i;ret = ioctl(pdevice->fd, VIDIOC_QUERYBUF, &buf);if(ret < 0){perror("ioctl call \'VIDIOC_QUERYBUF\' failed");return -1;}pdevice->mmap_buf[i].size = buf.length;pdevice->mmap_buf[i].addr = (char *)mmap(NULL, buf.length, PROT_READ|PROT_WRITE, MAP_SHARED, pdevice->fd, buf.m.offset);if(MAP_FAILED == pdevice->mmap_buf[i].addr){perror("mmap failed");return -1;}}return 0; }int set_video_device_stream_queue(struct _v4l2_video *pdevice, int index) {int ret = 0;struct v4l2_buffer buf = {0};/* 將內核緩存放入隊列 */buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;buf.memory = V4L2_MEMORY_MMAP;buf.index = index;ret = ioctl(pdevice->fd, VIDIOC_QBUF, &buf);if(ret < 0){perror("ioctl call \'VIDIOC_QBUF\' failed");return -1;}}int set_video_device_stream_on(struct _v4l2_video *pdevice) {int ret = 0;int i;struct v4l2_buffer buf = {0};enum v4l2_buf_type type;/* 將內核緩存放入隊列 */for (i=0; i<pdevice->mmap_buf_cnt; i++){set_video_device_stream_queue(pdevice, i);if(ret < 0){return -1;}}/* 開啟數(shù)據(jù)流 */type = V4L2_BUF_TYPE_VIDEO_CAPTURE;ret = ioctl(pdevice->fd, VIDIOC_STREAMON, &type);if(ret < 0){perror("ioctl call \'VIDIOC_STREAMON\' failed");return 0;}return 0; }int read_video_device_stream_frame(struct _v4l2_video *pdevice, int *out_buf_index) {int ret = 0;int i;struct v4l2_buffer buf = {0};/* 從隊列取出數(shù)據(jù) */buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;buf.memory = V4L2_MEMORY_MMAP;ret = ioctl(pdevice->fd, VIDIOC_DQBUF, &buf);if(ret < 0){perror("ioctl call \'VIDIOC_DQBUF\' failed");return -1;}if (buf.index > pdevice->mmap_buf_cnt){printf("buf overflow[%d]\n", buf.index);}*out_buf_index = buf.index;return 0; }int set_video_device_stream_off(struct _v4l2_video *pdevice) {int ret = 0;enum v4l2_buf_type type;type = V4L2_BUF_TYPE_VIDEO_CAPTURE;ret = ioctl(pdevice->fd, VIDIOC_STREAMOFF, &type); /* 關閉數(shù)據(jù)流 */if(ret < 0){perror("ioctl call \'VIDIOC_STREAMOFF\' failed");return -1;}return 0; }int main(int argc, int **argv) {FILE *fp = NULL;int index = 0;int ret = 0;int i = 0;char buf[12] = {0};struct _v4l2_video video;fd_set fds;struct timeval tv;if (argc < 2){printf("parameter invalid\n");return -1;}video.fd = open_video_device((const char*)argv[1]);if (video.fd < 0){return -1;}ret = query_video_device_cap(&video);if (ret < 0){goto __exit;}ret = set_video_device_par(&video);if (ret < 0){goto __exit;}ret = set_video_device_mmap(&video);if (ret < 0){goto __exit;}ret = set_video_device_stream_on(&video);if (ret < 0){goto __exit;}for (i=0; i<5; i++){/* 采集5張(幀)圖片 */FD_ZERO(&fds);FD_SET(video.fd,&fds);tv.tv_sec = 5; /* wait time */tv.tv_usec = 0;ret = select(video.fd + 1, &fds, NULL, NULL, &tv);if(ret < 0){perror("select error");goto __exit;}else if(ret == 0){printf("select timeout\n");goto __exit;}ret = read_video_device_stream_frame(&video, &index);if (ret < 0){goto __exit;}sprintf(buf, "./image%d.jpg", i);fp = fopen(buf, "wb"); /* 保存為圖片文件 */if(fp == NULL){perror("open image file failed\n");goto __exit;}printf("save %s \n", buf);fwrite(video.mmap_buf[index].addr, video.mmap_buf[index].size, 1, fp);fclose(fp);set_video_device_stream_queue(&video, index);usleep(1000);} __exit:set_video_device_stream_off(&video);close_video_device(&video);return 0; }

編譯測試

  • 系統(tǒng):Ubuntu16
  • 攝像頭:筆記本自帶攝像頭
acuity@ubuntu:/mnt/hgfs/LSW/STHB/camera$ gcc v4l2_base.c -o v4l2_base acuity@ubuntu:/mnt/hgfs/LSW/STHB/camera$ ./v4l2_base /dev/video0 video driver name:uvcvideo video device name:Integrated Camera: Integrated C video bus information:usb-0000:03:00.0-2.1 video driver version:266002 video capabilities:84200001 the video device support capture the video device support format: 1.YUYV 4:2:2 2.Motion-JPEG save ./image0.jpg save ./image1.jpg save ./image2.jpg save ./image3.jpg save ./image4.jpg

??從執(zhí)行結果來看,此筆記本自帶的攝像頭是USB接口的,支持YUV和JPEG格式輸出。程序執(zhí)行后在當前目錄生成5張.jpg格式的圖片文件。

acuity@ubuntu:/mnt/hgfs/LSW/STHB/camera$ tree . ├── image0.jpg ├── image1.jpg ├── image2.jpg ├── image3.jpg ├── image4.jpg ├── v4l2_base └── v4l2_base.c

4 參考文章

【1】linux v4l2攝像頭應用層編程介紹

【2】和菜鳥一起學linux之V4L2攝像頭應用流程

總結

以上是生活随笔為你收集整理的【音视频】V4L2摄像头应用编程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。

日韩精品一区二区三区在线播放 | www.亚洲视频 | 不卡电影免费在线播放一区 | 国产福利在线不卡 | 亚洲伊人色 | 国产视频 亚洲精品 | 尤物一区二区三区 | 天堂网中文在线 | 999超碰| 狠狠狠色丁香婷婷综合久久88 | 美女免费黄网站 | 亚洲视频,欧洲视频 | 手机色站| 亚洲国产成人在线观看 | 免费观看特级毛片 | 黄色特级片 | av天天澡天天爽天天av | 视频在线观看国产 | 久草在线99 | 国产精品久久一区二区三区, | 黄免费网站| 日韩欧美高清视频在线观看 | 欧美激情xxxx | 久久久综合色 | 欧美一区三区四区 | 国产精品视频最多的网站 | 在线观看视频免费大全 | 国产一级片免费视频 | 日韩字幕 | 色婷婷在线视频 | 色就色,综合激情 | 91片黄在线观看 | 欧美性色网站 | 99久久www | 久久久久久久久福利 | 精品久久美女 | 久久99国产精品久久 | 国产高清第一页 | 天干啦夜天干天干在线线 | 日韩av免费在线看 | 中文字幕在线国产精品 | 我要看黄色一级片 | 中文字幕在线观看第一区 | 日韩动态视频 | 亚洲另类交 | 中文字幕高清在线播放 | 一级黄色大片在线观看 | 91免费国产在线观看 | 国产三级视频在线 | av片中文 | 天天操天天干天天爽 | 婷婷综合激情 | 丁香六月网 | av一级在线 | 国产在线播放不卡 | 人人玩人人添人人澡97 | 国产在线第三页 | 操少妇视频 | av在线在线| .国产精品成人自产拍在线观看6 | 成人av在线影视 | 免费碰碰 | 国产成人精品日本亚洲999 | 亚洲女人av | 伊人宗合网 | 中文字幕av在线不卡 | 久久精品xxx| 欧美国产日韩在线观看 | 国产又粗又猛又色又黄网站 | 尤物一区二区三区 | 97视频亚洲| 91最新地址永久入口 | 国产不卡片 | 亚洲激情精品 | 一本一道波多野毛片中文在线 | 一区二区三区四区五区在线视频 | 国产一级h | 欧亚日韩精品一区二区在线 | 国产精选在线观看 | 免费观看黄 | 亚洲视频在线视频 | 色偷偷88欧美精品久久久 | 亚洲国产免费网站 | av在线亚洲天堂 | 国产一区二区不卡视频 | 久草在线免费新视频 | 91爱看片| 国产午夜视频在线观看 | 91女人18片女毛片60分钟 | 精品99久久 | av资源中文字幕 | 日本精品午夜 | 日韩免费av在线 | 天天操天天操 | 91高清视频免费 | 九月婷婷人人澡人人添人人爽 | 欧美性一级观看 | 亚洲精品日韩一区二区电影 | 97精品视频在线播放 | 色 免费观看 | 中文字幕在线观看网站 | 久久久久久久久久影院 | 97爱爱爱 | 国产精品普通话 | 91精品国产91久久久久 | 波多野结衣电影一区二区 | 日日夜夜精品视频天天综合网 | 国产精品视频 | 欧美日韩国产一区二区三区 | 天天爽天天搞 | a国产精品 | 成人午夜片av在线看 | 日韩免费福利 | 国产精品成人久久久久久久 | 四虎8848免费高清在线观看 | 国产成人99av超碰超爽 | 三级黄色大片在线观看 | 在线观看色网站 | 欧美成年网站 | 亚洲天堂网在线观看视频 | bayu135国产精品视频 | 激情五月伊人 | 小草av在线播放 | 午夜精品一二三区 | 9999激情| www.夜夜干.com | 国产91免费观看 | 美女国产免费 | 日本特黄一级 | 狠狠干电影 | 日韩在线播放视频 | 久久久久久久久网站 | 狠狠干夜夜 | 丁香五月亚洲综合在线 | 成年人视频免费在线播放 | 91日本在线播放 | 国产人成一区二区三区影院 | 天天射天天干天天插 | 亚洲一区免费在线 | 色综合久久网 | 精品久久久一区二区 | 久久国产精品一国产精品 | 成人在线免费观看视视频 | 日本少妇久久久 | 国产又粗又猛又黄又爽的视频 | 国产精久久久 | 色.www| 日韩在线高清免费视频 | 国产综合在线视频 | 日韩av视屏| 国产中文字幕三区 | 高清av免费看 | 国产精品久久久久一区二区三区共 | 午夜精品久久久久久中宇69 | 国产精品乱码一区二区视频 | 精品久久久久久久久久久院品网 | 免费在线观看一区二区三区 | 黄在线免费观看 | 91网在线观看 | 亚洲区色 | 日本中文字幕在线播放 | 日韩专区视频 | 亚洲第一av在线 | 精品一区二区在线免费观看 | 亚洲国产视频a | 天天色天天综合网 | 久久99精品国产一区二区三区 | 国产 日韩 在线 亚洲 字幕 中文 | 四虎精品成人免费网站 | 最近中文字幕第一页 | 国产精品久久久久三级 | 91九色蝌蚪在线 | 久久成人高清 | 亚洲 欧美 变态 国产 另类 | 天天操夜夜操天天射 | www.久久爱.cn | 69国产成人综合久久精品欧美 | 精品国产免费一区二区三区五区 | 午夜久久精品 | 99久在线精品99re8热视频 | 亚洲成人免费在线观看 | 亚洲精品黄色 | 久插视频 | 成人在线视频你懂的 | 99久久精品一区二区成人 | 午夜在线资源 | 久久人人爽人人片 | 国产色拍拍拍拍在线精品 | 日韩精品中文字幕久久臀 | 国产成a人亚洲精v品在线观看 | 亚洲精品日韩在线观看 | 久久精品中文字幕一区二区三区 | 免费人人干 | 亚洲欧美成人在线 | 看片一区二区三区 | 丁香六月伊人 | 99久热在线精品 | 久久久久综合精品福利啪啪 | 综合在线观看 | 国精产品999国精产品岳 | 高清精品在线 | 黄色免费看片网站 | 国产视频在线观看一区二区 | 亚洲欧美精品在线 | 日日夜夜狠狠干 | 国产老太婆免费交性大片 | 九月婷婷人人澡人人添人人爽 | 69久久久久久久 | 97视频在线观看视频免费视频 | 久久99国产精品二区护士 | 最新中文字幕在线资源 | 欧美成人免费在线 | 狠狠的操| 国产成人333kkk | 女人高潮一级片 | 国产精品国产自产拍高清av | 国产亚洲一区二区三区 | 狠狠色综合网站久久久久久久 | 有码中文字幕 | 五月婷久 | 97视频成人| 国产探花 | 天天干天天操人体 | 91日韩在线视频 | 去看片| 亚洲国产成人精品在线观看 | 激情偷乱人伦小说视频在线观看 | 久久国产片| 亚洲精品1区2区3区 超碰成人网 | 在线免费精品视频 | 精品久久久久久亚洲综合网 | 久久超碰97 | 人人干在线观看 | 一区二区视频播放 | 久久久久久久久久久网站 | 亚洲视频免费在线 | 91自拍视频在线观看 | 97精品在线观看 | 日韩在线播放av | 999国内精品永久免费视频 | 中文字幕在线一区二区三区 | 国产成人精品网站 | 人人藻人人澡人人爽 | 国产精品毛片一区 | 国产a免费| 91中文字幕在线观看 | av三级在线看 | 夜添久久精品亚洲国产精品 | 最新久久久 | 日韩在线播放欧美字幕 | 在线午夜av | 99精品视频免费观看视频 | 黄色一级动作片 | 亚洲第一av在线播放 | 免费看的视频 | 亚洲激色| 在线观看视频免费播放 | 在线观看成人一级片 | 色综合久久久久综合体桃花网 | 中文字幕中文字幕 | 99精品免费 | 亚洲综合在线五月天 | 国产精品 日韩 | 国产一级免费片 | 在线91网 | 久久久久久久久久影院 | 国产成人一区二区三区久久精品 | 999视频在线播放 | 中文字幕日韩国产 | 久草在线免| 久久精品牌麻豆国产大山 | 亚洲国产视频在线 | 色网站在线观看 | 久久精品五月 | 337p日本欧洲亚洲大胆裸体艺术 | 在线午夜av | 婷婷视频导航 | 亚洲精品免费播放 | 免费一级片在线 | 国产色中涩 | 亚洲国产婷婷 | 91久久黄色 | av看片在线 | 欧洲性视频 | 天堂久色 | 日韩视频一区二区三区 | 久久久久久久久毛片精品 | 免费看一级一片 | 三级毛片视频 | 国产精美视频 | 久久久男人的天堂 | 免费亚洲片 | 成人黄色av免费在线观看 | 久久久久久久电影 | 日韩国产高清在线 | 日本中文字幕在线免费观看 | 在线亚州 | 久久9999久久免费精品国产 | 国产中文字幕第一页 | 91精品久久久久久综合乱菊 | 丁香九月激情 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 日韩精品视频在线观看网址 | 五月婷婷开心 | www.亚洲精品视频 | 久久精品中文视频 | 久久99视频精品 | 日韩欧美在线观看一区二区三区 | 天天干天天干天天 | a视频在线播放 | 日韩精品一二三 | 亚洲国产三级在线 | 国产特级毛片aaaaaa毛片 | 亚洲一级黄色av | 综合成人在线 | 午夜a区 | 成人xxxx| 国产视频一级 | 日本中文一区二区 | 亚洲日韩精品欧美一区二区 | 99精品视频免费观看 | 久久久精品国产一区二区电影四季 | 伊人久在线 | 一区二区成人国产精品 | 99视频播放 | 91亚洲精品久久久久图片蜜桃 | 伊人www22综合色 | 日韩免费成人 | 天天超碰| 亚洲精品美女久久 | 欧美一二三视频 | 国内精品视频久久 | 国产精品 中文字幕 亚洲 欧美 | 婷婷丁香九月 | 久久久资源网 | 亚洲一区二区天堂 | 国产精品一区二区三区久久 | 在线看岛国av | 久久久精品久久 | 久久综合免费视频 | 在线国产不卡 | 狠狠色2019综合网 | 欧美一区二区在线刺激视频 | 狠狠ri| 国产在线日本 | 国产精品不卡视频 | 天天射天天 | 色婷婷综合久色 | 一区二区三区电影在线播 | 国产在线高清视频 | 毛片美女网站 | 免费一区在线 | 亚洲四虎影院 | 黄色看片 | 日日夜夜草 | 久综合网 | av不卡中文字幕 | www.精选视频.com | 免费在线观看av | 国产老熟 | 麻豆免费视频网站 | 顶级欧美色妇4khd | 中文字幕亚洲综合久久五月天色无吗'' | 天天操天天摸天天爽 | 97在线影视 | 91黄色在线看 | 亚洲精品毛片一级91精品 | 欧美日韩视频在线观看免费 | 美女网站黄在线观看 | 日本黄区免费视频观看 | 久草免费手机视频 | 激情丁香 | 人人爽人人香蕉 | 在线观看网站你懂的 | 成人福利在线 | 亚洲人天堂 | 日韩精品一区二区三区免费观看 | 亚洲精品a区| 久久精品成人热国产成 | 天天干天天干天天干天天干天天干天天干 | 色综合久久久久久久 | 菠萝菠萝蜜在线播放 | 精品久久一级片 | 亚a在线| 国产午夜精品久久 | 天天插天天干天天操 | 97国产一区二区 | 91亚洲综合 | 97超碰资源总站 | 欧美一区二区三区激情视频 | 九九综合九九综合 | 亚洲国产精品免费 | 中文字幕首页 | 久99久精品视频免费观看 | 人人干人人干人人干 | 亚洲天堂va| 丁香六月天 | 91.dizhi永久地址最新 | 亚洲狠狠干 | 国产精品毛片一区 | 久久av观看 | 中文字幕一区二区三区四区 | 国产精品嫩草55av | 能在线观看的日韩av | 黄色片视频在线观看 | 国产高清一级 | 久久久久久网 | 中文字幕视频播放 | 国产精品免费麻豆入口 | 久久久久区 | 国产精品九九久久99视频 | 天天插天天狠 | 亚洲国产精品成人av | 国产成人精品久久亚洲高清不卡 | 高清一区二区 | 久久久久久高潮国产精品视 | 91免费国产在线观看 | 欧美日韩高清一区 | 日韩毛片在线播放 | 区一区二区三区中文字幕 | 成人在线免费看 | 国产麻豆成人传媒免费观看 | 精品国产乱码久久久久久1区2匹 | 国产成人精品国内自产拍免费看 | 99视频| 久草在线免费新视频 | 91污污视频在线观看 | 日日夜夜天天 | 中文字幕之中文字幕 | 国产精品毛片一区二区在线 | 人人插人人舔 | 国产一区电影在线观看 | 狠狠干天天射 | 日韩免费高清在线观看 | 国产伦精品一区二区三区高清 | 在线观看av网 | 亚洲国产成人在线观看 | 久久综合精品一区 | 国产精品毛片一区视频播 | 成人久久久久久久久久 | 一区二区亚洲精品 | 手机av资源 | 欧美性黄网官网 | 欧美日韩免费观看一区=区三区 | 麻豆视频在线免费看 | 四虎成人精品在永久免费 | 91爱看片 | 国产一区二区网址 | 五月天中文字幕mv在线 | 在线免费观看欧美日韩 | 成人免费在线电影 | 免费日韩 精品中文字幕视频在线 | 国产91精品一区二区 | 99欧美精品 | 亚洲欧美日韩精品久久奇米一区 | 热久久免费国产视频 | 成人免费观看大片 | 成人午夜电影久久影院 | 99中文在线| 国产中文在线字幕 | 天天色天天搞 | 免费看一及片 | 亚洲精品在线免费看 | 日韩免费电影网 | 国产精品成人免费精品自在线观看 | 亚洲精品videossex少妇 | 天堂成人在线 | 日日干网 | 久久午夜电影院 | 91免费观看网站 | 日韩免费不卡视频 | 国产精品一二三 | www.看片网站| 成人av高清在线观看 | 午夜男人影院 | 五月色丁香| 中文字幕资源在线观看 | 999久久久精品视频 日韩高清www | 日韩精品一区二区三区不卡 | 欧美精品久久久久a | 亚洲视频1区2区 | 国产福利一区二区三区视频 | 亚洲九九精品 | 久久免费视频1 | 中文字幕五区 | 一本一道波多野毛片中文在线 | 久久线视频 | 日韩在线视频播放 | 精品国产一区二区三区久久久蜜月 | 欧美亚洲另类在线视频 | 国产精品原创视频 | 美女网站免费福利视频 | 九九九九精品九九九九 | 欧美日韩视频 | 国产91在线 | 美洲 | 最近乱久中文字幕 | 欧美大片在线观看一区 | 亚洲va韩国va欧美va精四季 | 国产精品美女久久久久久久 | 91成人精品一区在线播放69 | 欧美日韩一区二区在线观看 | 亚洲理论在线 | 亚洲成人欧美 | 粉嫩av一区二区三区入口 | 国产午夜精品久久久久久久久久 | 中文在线a∨在线 | 国产成人一区二区三区久久精品 | 丁香国产视频 | 国产精品久久久久久久久久东京 | 五月婷婷亚洲 | 四虎亚洲精品 | 亚洲第一伊人 | 六月色 | 69精品在线 | 日韩国产在线观看 | 麻豆果冻剧传媒在线播放 | 久久久久久久久电影 | 色片网站在线观看 | 久久精品激情 | av片在线看 | 五月婷婷av| 日躁夜躁狠狠躁2001 | 国产日韩精品在线 | 插婷婷 | 久久国内视频 | 亚洲精品女人久久久 | 国内外成人免费在线视频 | 国产精品久久久av久久久 | 免费看的毛片 | 国产成人99av超碰超爽 | 8090yy亚洲精品久久 | 福利视频第一页 | 国产黄色精品在线观看 | a v在线观看| 在线精品在线 | 日韩av在线网站 | 国产成人精品久久二区二区 | 久久中文网 | 999久久国产精品免费观看网站 | 色多多视频在线 | 成人亚洲免费 | 天天爱天天操天天干 | 国产精品成人久久久久久久 | 久久最新视频 | 97天堂网| 91精品国产91热久久久做人人 | 91精品久久久久久久久久久久久 | 天天摸天天舔 | 中文字幕区| 精品你懂的 | 99re久久资源最新地址 | 欧美日韩在线精品 | 91日韩在线 | 美女网站视频免费都是黄 | 亚洲日韩中文字幕在线播放 | 日韩电影中文,亚洲精品乱码 | 国产美女精品人人做人人爽 | 激情网在线视频 | 嫩草91影院 | 中文在线a∨在线 | 国产 精品 资源 | 久久免费观看视频 | 狠狠狠色丁香婷婷综合激情 | 麻花天美星空视频 | 天天射综合 | av成人动漫 | 久久国产精品区 | 色视频网站在线 | 激情综合一区 | 五月婷婷一级片 | 国产群p视频 | 天天操天天添 | 欧美日韩国产高清视频 | 久久男人影院 | 亚洲全部视频 | 亚洲精品456在线播放乱码 | 99 视频 高清 | 超碰97在线人人 | 91大神精品视频 | 亚洲精品国产第一综合99久久 | 国产精久久久久久久 | 在线免费看黄网站 | 亚洲国产中文字幕在线观看 | 国产一区二区在线观看免费 | 麻豆一级视频 | 亚洲成a人片在线观看网站口工 | 欧美人操人 | 国产免费黄视频在线观看 | 免费高清无人区完整版 | 色妞色视频一区二区三区四区 | 欧美日韩伦理在线 | 人人爱在线视频 | 麻豆视频免费在线观看 | 2024国产精品视频 | 国产色小视频 | 人人玩人人添人人 | 亚洲最新av在线网站 | 亚洲免费不卡 | 特级西西444www大胆高清无视频 | 69国产盗摄一区二区三区五区 | 国际精品网 | 色国产精品一区在线观看 | 99视频一区二区 | 国外调教视频网站 | 国产二区视频在线观看 | 欧美国产91 | 婷五月激情 | 久久精品免费观看 | 最新超碰 | 亚洲视频在线播放 | 久久久久久久久久久福利 | 亚洲欧美成人综合 | 色综合久久88色综合天天人守婷 | 国产婷婷久久 | 免费网站观看www在线观看 | 91av国产视频 | 91麻豆精品国产91久久久久久久久 | 五月婷婷在线视频观看 | 日韩精品不卡 | 91九色网站 | 黄色小网站在线 | 国产一区二区精品 | 色中射 | 中午字幕在线观看 | 日韩欧美在线一区 | 国产一级片观看 | 亚洲免费av网站 | 国产偷国产偷亚洲清高 | 蜜臀一区二区三区精品免费视频 | av最新资源 | 久久久www成人免费毛片麻豆 | 成人91av | 亚洲日本激情 | 久久人人爽人人片av | 国内毛片毛片 | 国产视频九色蝌蚪 | 在线视频欧美日韩 | 91av电影在线 | 亚洲视频播放 | 亚洲日本欧美在线 | 97超碰在线久草超碰在线观看 | 色综合五月天 | 免费视频一二三区 | 国产中文字幕视频在线观看 | 久久无码av一区二区三区电影网 | 国产黄在线看 | av官网在线 | 日韩视频免费在线 | 激情www| 91视频在线免费看 | 成人在线电影观看 | 亚洲黄色免费电影 | 在线国产福利 | 国产va饥渴难耐女保洁员在线观看 | zzijzzij亚洲成熟少妇 | 99re在线视频观看 | 国产九九精品 | 日韩久久在线 | 免费一级片久久 | 国产亚洲成人精品 | 久久久精品国产免费观看同学 | 你操综合| 亚洲国产精品成人精品 | 欧美日韩色婷婷 | 久久综合亚洲鲁鲁五月久久 | av观看久久久 | 成人一区二区三区中文字幕 | 精品一区二区三区久久 | 久久综合日 | 人人草在线视频 | 日本99热| 欧美亚洲三级 | 人人干人人上 | 999视频在线播放 | 久久人人爽人人人人片 | 国产成人精品a | 91视频免费 | 久久久久久久电影 | 亚洲伊人色 | 日韩欧美不卡 | 久久久久免费电影 | 国内精品国产三级国产aⅴ久 | 国产精品久久中文字幕 | 一区二区三区av在线 | 999热视频 | 免费观看的av网站 | 天天操综合网站 | 亚洲一区二区视频在线 | 亚洲丝袜一区 | 日韩毛片在线免费观看 | 色午夜影院 | 日韩精品一区在线播放 | 91av片 | 国产伦精品一区二区三区在线 | 丁香婷婷社区 | 中文字幕在线观看免费 | 成人久久| 99在线观看 | 亚洲精品视频免费在线观看 | www.狠狠色 | 久久久久亚洲天堂 | 一区二区三区中文字幕在线观看 | 久久99久久99精品免视看婷婷 | 视频在线99| 天天综合中文 | 日韩一级黄色片 | 免费黄色av. | 韩国在线一区二区 | 国产成人在线精品 | 国产一级免费在线观看 | 五月婷婷丁香色 | 亚洲精品视频网 | av资源免费在线观看 | 天天爽网站 | 精品一区二区视频 | 99精品视频免费在线观看 | 国产一二区免费视频 | 最近日本mv字幕免费观看 | 日韩在线第一区 | 午夜av不卡 | 99精品久久久久久久久久综合 | 69人人| 91热视频在线观看 | 国产不卡在线播放 | 99视频精品免费观看, | 日韩精品在线播放 | 成人av在线看 | 99久热在线精品视频成人一区 | 色六月婷婷 | 国产一区二区在线免费观看 | 亚洲视屏 | 蜜桃av久久久亚洲精品 | 亚洲闷骚少妇在线观看网站 | 久久av电影 | 麻豆手机在线 | 亚洲视屏一区 | 欧美男男tv网站 | 久久欧美在线电影 | 一区二区视频播放 | 国产免费亚洲高清 | 久久免费激情视频 | 欧洲视频一区 | 99精品国产在热久久 | 婷婷五天天在线视频 | 国产在线免费av | 日韩av在线不卡 | 午夜狠狠操 | 夜色在线资源 | 五月婷婷爱 | 91精品国产91久久久久福利 | 欧美a免费| 亚洲一级特黄 | 国产自在线 | 91九色视频 | 天天躁天天躁天天躁婷 | 久久综合狠狠狠色97 | 国产精品国产三级国产aⅴ入口 | 免费看av在线 | 免费看国产曰批40分钟 | 一本色道久久精品 | av免费电影在线观看 | 欧美国产日韩一区二区 | av 一区二区三区四区 | 国产中文字幕视频在线 | 婷婷久久一区二区三区 | 亚洲另类xxxx | 超碰97人人射妻 | 久综合网 | 久久成人一区 | 日本aaa在线观看 | 亚洲一区二区天堂 | 在线免费观看黄色 | 免费国产黄线在线观看视频 | 在线视频中文字幕一区 | 亚洲午夜久久久久久久久电影网 | 亚洲美女视频在线 | 日本久久久亚洲精品 | 国产97免费 | 91久久爱热色涩涩 | 亚洲成人二区 | 亚洲精品合集 | 免费高清在线观看成人 | www.国产在线观看 | 在线观看成人毛片 | 福利精品在线 | 色综合久久久久综合体桃花网 | 国产精品第72页 | 亚洲人在线| 黄色精品久久久 | 国产99黄| 精品久久网 | 久久久精选 | 激情五月播播久久久精品 | 亚洲成人免费 | 最新高清无码专区 | 在线免费黄色 | 国产精品久久久久久麻豆一区 | 三级免费黄 | 日本精品一区二区三区在线播放视频 | 女人18片| 九九九热精品免费视频观看 | 日韩av不卡播放 | 五月天综合婷婷 | 日韩精品一区二区在线观看视频 | 久久久久麻豆v国产 | 国产精品美女久久久久aⅴ 干干夜夜 | 久久精品一区二区 | 国产在线精品福利 | 日韩精品免费一线在线观看 | a在线v| 日本99热 | 激情婷婷| 99成人免费视频 | 免费视频你懂的 | 中文字幕久久精品一区 | 日女人电影 | 色干干 | 97av精品| 91精品国产自产老师啪 | 超碰97成人 | 6080yy精品一区二区三区 | 国产二级视频 | 国产精品不卡一区 | 天天弄天天干 | 日韩久久精品一区二区三区下载 | 久草综合在线观看 | 99精品美女| 狠狠的干狠狠的操 | 亚洲黄色成人网 | 在线精品视频在线观看高清 | 一区二区精品在线 | 国产精品免费看久久久8精臀av | 日韩视频在线观看免费 | 欧美-第1页-屁屁影院 | 视频一区二区免费 | 91成人国产| 久久线视频 | 久久曰视频 | 日本爱爱免费视频 | 夜色.com | 天天操天天干天天 | 日韩视频1区 | 操操操av| 四虎成人精品永久免费av | 91九色老 | 成人午夜剧场在线观看 | 国产综合视频在线观看 | 伊人网av | 婷婷av网站 | 成年美女黄网站色大片免费看 | 麻豆精品在线 | 丝袜美腿一区 | 麻豆小视频在线观看 | 人人搞人人搞 | 日韩有码第一页 | 欧美三级在线播放 | 午夜精品999 | 91高清免费看 | 亚洲成人网av | 免费福利在线 | 91漂亮少妇露脸在线播放 | 国产高清在线一区 | 少妇精品久久久一区二区免费 | 亚洲成av人电影 | 在线视频 区 | 美女在线免费观看视频 | 亚洲理论电影 | 国产 日韩 欧美 自拍 | 欧美精品v国产精品 | 国产亚洲精品美女久久 | 国产高清精品在线 | 亚洲精品久久久久久久不卡四虎 | 日韩久久久久久久 | 一级c片| 免费在线观看日韩 | 精品国产一区二区在线 | 成 人 黄 色 片 在线播放 | 亚洲精品久久久久久国 | 一区二区不卡视频在线观看 | 九九热视频在线 | 五月天亚洲综合 | 国产区免费 | 精品99免费| 青青五月天 | 国产一区在线观看免费 | 日韩精品一区二区三区在线视频 | 日本午夜免费福利视频 | 亚洲另类在线视频 | 粉嫩av一区二区三区四区在线观看 | 黄色a视频 | 黄色小说在线免费观看 | 色在线亚洲| 色婷婷视频在线 | 久久久久久蜜av免费网站 | 天天爽夜夜爽人人爽曰av | 亚洲深夜影院 | 在线观看成人网 | 久久久久亚洲精品男人的天堂 | 亚洲人成人在线 | 在线91观看 | 日本精品一 | 激情在线网站 | 亚洲黄色在线看 | 日韩一区二区三区免费视频 | 久久不见久久见免费影院 | 久久免费毛片视频 | 丁香综合五月 | 久久精品爱视频 | 午夜精选视频 | 日本精品二区 | 精品国产欧美一区二区 | 国产一卡在线 | 欧美精品天堂 | 91在线亚洲 | 欧美韩国日本在线观看 | 久久精品xxx | 午夜精品久久久99热福利 | av韩国在线 | 国产在线播放不卡 | 亚洲美女免费精品视频在线观看 | 国产又粗又长又硬免费视频 | 精品字幕在线 | 在线观看成年人 | av软件在线观看 | 91亚洲精品久久久蜜桃 | 日韩精品一区不卡 | 国产美女精品在线 | 久久国产精品视频免费看 | 日操干| 午夜视频久久久 | 最新国产在线视频 | 欧美日韩精品二区第二页 | 麻豆国产精品一区二区三区 | www.91av在线| 中文字幕刺激在线 | 亚洲精品高清在线观看 | 韩国三级一区 | 激情丁香综合五月 | 欧美激情综合五月色丁香小说 | 色吧av色av| 亚洲精品www. | 免费a v网站 | 国产大陆亚洲精品国产 | 国产特级毛片aaaaaaa高清 | 国产在线播放一区二区 | 婷婷激情五月综合 | 在线看欧美 | 在线免费观看涩涩 | 久久精品79国产精品 | 中文字幕在线一区二区三区 | a级国产乱理论片在线观看 特级毛片在线观看 | 免费观看9x视频网站在线观看 | 天天射天天射天天 | 久久久久久久久久久免费av | 久久久久免费看 | 日韩毛片在线一区二区毛片 | 亚洲国产精品影院 | www.香蕉 | 亚洲婷婷丁香 | 人人爱爱人人 | 国产999精品久久久久久麻豆 | 免费污片 | 亚洲专区中文字幕 | 国产精品伦一区二区三区视频 | 激情综合五月 | 日韩视频在线播放 | 欧美日韩超碰 | 玖操 | 91伊人久久大香线蕉蜜芽人口 | 国产成人高清 | 国内小视频在线观看 | 久久久久久亚洲精品 | 日韩精品在线看 | 日韩欧美极品 | 国产高清在线精品 | 久久一级电影 | 国产视频色 | 玖玖玖在线 | 免费精品国产va自在自线 | 久久 一区 | 黄a在线看 | av日韩在线网站 | 91在线91| 97超碰人| 久草观看视频 | 国产午夜三级一区二区三 | 91av在线免费观看 | a级免费观看 | 欧美日韩视频一区二区三区 | 日韩精品视频在线观看免费 | 蜜桃视频在线观看一区 | 久久久www成人免费精品 | 国产亚洲视频系列 | 波多野结衣在线观看视频 | 精品视频在线免费观看 | 国产精品久久久久久久久蜜臀 | 久久久久久久网 | 国产大陆亚洲精品国产 |