Changeset aa98c569277c489e7796e857e56f4fad15b0d00c
- Timestamp:
- 13/09/08 23:47:15 (3 months ago)
- git-parent:
- Files:
-
- modules/access/v4l2/v4l2.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
modules/access/v4l2/v4l2.c
r2809298 raa98c56 440 440 unsigned int i_v4l2; 441 441 int i_fourcc; 442 int i_rmask; 443 int i_gmask; 444 int i_bmask; 442 445 } v4l2chroma_to_fourcc[] = 443 446 { 444 447 /* Raw data types */ 445 { V4L2_PIX_FMT_GREY, VLC_FOURCC('G','R','E','Y') }, 446 { V4L2_PIX_FMT_HI240, VLC_FOURCC('I','2','4','0') }, 447 { V4L2_PIX_FMT_RGB565, VLC_FOURCC('R','V','1','6') }, 448 { V4L2_PIX_FMT_RGB555, VLC_FOURCC('R','V','1','5') }, 449 { V4L2_PIX_FMT_BGR24, VLC_FOURCC('R','V','2','4') }, 450 { V4L2_PIX_FMT_BGR32, VLC_FOURCC('R','V','3','2') }, 451 { V4L2_PIX_FMT_YUYV, VLC_FOURCC('Y','U','Y','2') }, 452 { V4L2_PIX_FMT_YUYV, VLC_FOURCC('Y','U','Y','V') }, 453 { V4L2_PIX_FMT_UYVY, VLC_FOURCC('U','Y','V','Y') }, 454 { V4L2_PIX_FMT_Y41P, VLC_FOURCC('I','4','1','N') }, 455 { V4L2_PIX_FMT_YUV422P, VLC_FOURCC('I','4','2','2') }, 456 { V4L2_PIX_FMT_YVU420, VLC_FOURCC('Y','V','1','2') }, 457 { V4L2_PIX_FMT_YUV411P, VLC_FOURCC('I','4','1','1') }, 458 { V4L2_PIX_FMT_YUV410, VLC_FOURCC('I','4','1','0') }, 448 { V4L2_PIX_FMT_GREY, VLC_FOURCC('G','R','E','Y'), 0, 0, 0 }, 449 { V4L2_PIX_FMT_HI240, VLC_FOURCC('I','2','4','0'), 0, 0, 0 }, 450 { V4L2_PIX_FMT_RGB555, VLC_FOURCC('R','V','1','5'), 0x001f,0x03e0,0x7c00 }, 451 { V4L2_PIX_FMT_RGB565, VLC_FOURCC('R','V','1','6'), 0x001f,0x07e0,0xf800 }, 452 /* Won't work since we don't know how to handle such gmask values 453 * correctly 454 { V4L2_PIX_FMT_RGB555X, VLC_FOURCC('R','V','1','5'), 0x007c,0xe003,0x1f00 }, 455 { V4L2_PIX_FMT_RGB565X, VLC_FOURCC('R','V','1','6'), 0x00f8,0xe007,0x1f00 }, 456 */ 457 { V4L2_PIX_FMT_BGR24, VLC_FOURCC('R','V','2','4'), 0xff0000,0xff00,0xff }, 458 { V4L2_PIX_FMT_RGB24, VLC_FOURCC('R','V','2','4'), 0xff,0xff00,0xff0000 }, 459 { V4L2_PIX_FMT_BGR32, VLC_FOURCC('R','V','3','2'), 0xff0000,0xff00,0xff }, 460 { V4L2_PIX_FMT_RGB32, VLC_FOURCC('R','V','3','2'), 0xff,0xff00,0xff0000 }, 461 { V4L2_PIX_FMT_YUYV, VLC_FOURCC('Y','U','Y','2'), 0, 0, 0 }, 462 { V4L2_PIX_FMT_YUYV, VLC_FOURCC('Y','U','Y','V'), 0, 0, 0 }, 463 { V4L2_PIX_FMT_UYVY, VLC_FOURCC('U','Y','V','Y'), 0, 0, 0 }, 464 { V4L2_PIX_FMT_Y41P, VLC_FOURCC('I','4','1','N'), 0, 0, 0 }, 465 { V4L2_PIX_FMT_YUV422P, VLC_FOURCC('I','4','2','2'), 0, 0, 0 }, 466 { V4L2_PIX_FMT_YVU420, VLC_FOURCC('Y','V','1','2'), 0, 0, 0 }, 467 { V4L2_PIX_FMT_YUV411P, VLC_FOURCC('I','4','1','1'), 0, 0, 0 }, 468 { V4L2_PIX_FMT_YUV410, VLC_FOURCC('I','4','1','0'), 0, 0, 0 }, 459 469 460 470 /* Raw data types, not in V4L2 spec but still in videodev2.h and supported 461 471 * by VLC */ 462 { V4L2_PIX_FMT_YUV420, VLC_FOURCC('I','4','2','0') },472 { V4L2_PIX_FMT_YUV420, VLC_FOURCC('I','4','2','0'), 0, 0, 0 }, 463 473 /* FIXME { V4L2_PIX_FMT_RGB444, VLC_FOURCC('R','V','3','2') }, */ 464 474 465 475 /* Compressed data types */ 466 { V4L2_PIX_FMT_MJPEG, VLC_FOURCC('M','J','P','G') },476 { V4L2_PIX_FMT_MJPEG, VLC_FOURCC('M','J','P','G'), 0, 0, 0 }, 467 477 #if 0 468 478 { V4L2_PIX_FMT_JPEG, VLC_FOURCC('J','P','E','G') }, … … 470 480 { V4L2_PIX_FMT_MPEG, VLC_FOURCC('?','?','?','?') }, 471 481 #endif 472 { 0, 0 }482 { 0, 0, 0, 0, 0 } 473 483 }; 474 484 … … 476 486 * List of V4L2 chromas were confident enough to use as fallbacks if the 477 487 * user hasn't provided a --v4l2-chroma value. 488 * 489 * Try YUV chromas first, then RGB little endian and MJPEG as last resort. 478 490 */ 479 491 static const __u32 p_chroma_fallbacks[] = 480 492 { V4L2_PIX_FMT_YUV420, V4L2_PIX_FMT_YVU420, V4L2_PIX_FMT_YUV422P, 481 V4L2_PIX_FMT_YUYV, V4L2_PIX_FMT_UYVY, V4L2_PIX_FMT_MJPEG }; 493 V4L2_PIX_FMT_YUYV, V4L2_PIX_FMT_UYVY, V4L2_PIX_FMT_BGR24, 494 V4L2_PIX_FTM_BGR32, V4L2_PIX_FMT_MJPEG }; 482 495 483 496 static const struct … … 1817 1830 enum v4l2_buf_type buf_type; 1818 1831 char *psz_device = p_sys->psz_vdev; 1832 es_format_t es_fmt; 1819 1833 1820 1834 if( ( i_fd = open( psz_device, O_RDWR ) ) < 0 ) … … 2055 2069 { 2056 2070 p_sys->i_fourcc = v4l2chroma_to_fourcc[i].i_fourcc; 2071 es_format_Init( &es_fmt, VIDEO_ES, p_sys->i_fourcc ); 2072 es_fmt.video.i_rmask = v4l2chroma_to_fourcc[i].i_rmask; 2073 es_fmt.video.i_gmask = v4l2chroma_to_fourcc[i].i_gmask; 2074 es_fmt.video.i_bmask = v4l2chroma_to_fourcc[i].i_bmask; 2057 2075 break; 2058 2076 } … … 2132 2150 2133 2151 /* Add */ 2134 es_format_t es_fmt;2135 es_format_Init( &es_fmt, VIDEO_ES, p_sys->i_fourcc );2136 2152 es_fmt.video.i_width = p_sys->i_width; 2137 2153 es_fmt.video.i_height = p_sys->i_height; 2138 2154 es_fmt.video.i_aspect = 4 * VOUT_ASPECT_FACTOR / 3; 2139 2140 /* Setup rgb mask for RGB formats */2141 if( p_sys->i_fourcc == VLC_FOURCC( 'R','V','2','4' ) )2142 {2143 /* This is in BGR format */2144 es_fmt.video.i_bmask = 0x00ff0000;2145 es_fmt.video.i_gmask = 0x0000ff00;2146 es_fmt.video.i_rmask = 0x000000ff;2147 }2148 2155 2149 2156 msg_Dbg( p_demux, "added new video es %4.4s %dx%d",
