• 大小: 3KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-13
  • 语言: 其他
  • 标签: V4L2  

资源简介

自己写的USB摄像头采集程序,编译需要用到jpeg库,验证运行OK,和大家分享。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include            
#include             
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#include         
#include 

#define CAMERA_DEVICE “/dev/video2“
/*#define CAPTURE_FILE “usbpic.jpg“  */
#define CAPTURE_FILE0 “usbpic0.jpg“
#define CAPTURE_FILE1 “usbpic1.jpg“
#define CAPTURE_FILE2 “usbpic2.jpg“
#define CAPTURE_FILE3 “usbpic3.jpg“

#define VIDEO_WIDTH 320
#define VIDEO_HEIGHT 240
#define VIDEO_FORMAT V4L2_PIX_FMT_YUYV
#define BUFFER_COUNT 4
#define jpegQuality 80

typedef struct VideoBuffer {
    void   *start;
    size_t  length;
} VideoBuffer;

static void YUV422toRGB888(int width int height unsigned char *src unsigned char *dst)
{
  int line column;
  unsigned char *py *pu *pv;
  unsigned char *tmp = dst;

  /* In this format each four bytes is two pixels. Each four bytes is two Y‘s a Cb and a Cr. 
     Each Y goes to one of the pixels and the Cb and Cr belong to both pixels. */
  py = src;
  pu = src + 1;
  pv = src + 3;
   printf(“4\n“);
  #define CLIP(x) ( (x)>=0xFF ? 0xFF : ( (x) <= 0x00 ? 0x00 : (x) ) )
   printf(“5\n“);
  for (line = 0; line < height; ++line) {
    for (column = 0; column < width; ++column) {
      *tmp++ = CLIP((double)*py + 1.402*((double)*pv-128.0));
      *tmp++ = CLIP((double)*py - 0.344*((double)*pu-128.0) - 0.714*((double)*pv-128.0));      
      *tmp++ = CLIP((double)*py + 1.772*((double)*pu-128.0));

      // increase py every time
      py += 2;
      // increase pupv every second time
      if ((column & 1)==1) {
        pu += 4;
        pv += 4;
      }
    }
  }
   printf(“6\n“);
}


static void jpegWrite(unsigned char* img FILE *fp)
{
    struct jpeg_compress_struct cinfo;
    struct jpeg_error_mgr jerr;
    JSAMPROW row_pointer[1];
  
    if ((NULL==img) || (NULL==fp))
    {
        printf(“jpegWrite: para error.\n“);
        return;
    }
  
    // create jpeg data
    cinfo.err = jpeg_std_error( &jerr );
    jpeg_create_compress(&cinfo);
    jpeg_stdio_dest(&cinfo fp);
  
    // set image parameters
    cinfo.image_width = VIDEO_WIDTH;
    cinfo.image_height = VIDEO_HEIGHT;
    cinfo.input_components = 3;
    cinfo.in_color_space = JCS_RGB;
  
    // set jpeg compression parameters to default
    jpeg_set_defaults(&cinfo);
    // and then adjust quality setting
    jpeg_set_quality(&cinfo jpegQuality TRUE);
  
    // start compress 
    jpeg_start_compress(&cinfo TRUE);
  
    // feed data
    while (cinfo.next_scanline < cinfo.image_height)
    {
        row_pointer[0] = &img[cinfo.next_scanline * cinfo.image_width *  cinfo.input_components];
        jpeg_write_scanlines(&cinfo row_pointer 1);
    }
  
 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2012-08-16 16:50  cameraGrap\
     文件        9996  2012-08-16 10:38  cameraGrap\UsbCamPic.c

评论

共有 条评论