Changeset 4340

Show
Ignore:
Timestamp:
12/15/08 02:16:08 (6 years ago)
Author:
douglask
Message:

Code now supports 720x576, 360x288 & 180x144.

In particular, the Kworld USB2800 only supports 360x288, 360x576 & 720x288, so VIC V4L2 capture now works for it with 360x288.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • vic/branches/mpeg4/video/grabber-v4l2.cpp

    r4339 r4340  
    7878}; 
    7979 
    80 #define NTSC_WIDTH  640 
    81 #define NTSC_HEIGHT 480 
    82 #define PAL_WIDTH   768 
    83 #define PAL_HEIGHT  576 
     80#define PAL_BT601_WIDTH   720 
     81#define PAL_BT601_HEIGHT  576 
     82#define VGA_WIDTH  640 
     83#define VGA_HEIGHT 480 
    8484#define CIF_WIDTH   352 
    8585#define CIF_HEIGHT  288 
     
    8888#define CF_420 1 
    8989#define CF_CIF 2 
     90 
     91#define CS_VC        0 /* 4CIF (704x576), CIF (352x288), QCIF (176x144) */ 
     92#define CS_VGA       1 /* VGA (640x480), 1/4 VGA (320x240), 1/16 VGA (160x120) */ 
     93#define CS_BT601_PAL 2 /* ITU-R Recommendation BT.601 720x576 (plus 360x288 & 180x144) */ 
    9094 
    9195/* YUV Byte order */ 
     
    362366        v4l2_ioctl(fd_, VIDIOC_G_FMT, &fmt); 
    363367 
    364         unsigned int test_width[] = {CIF_WIDTH, 320, 0}; 
    365         unsigned int test_height[] = {CIF_HEIGHT, 240, 0}; 
     368        unsigned int test_width[] =  {CIF_WIDTH,  PAL_BT601_WIDTH/2,  VGA_WIDTH/2, 0}; 
     369        unsigned int test_height[] = {CIF_HEIGHT, PAL_BT601_HEIGHT/2, VGA_HEIGHT/2, 0}; 
    366370        for (unsigned int i = 0; test_width[i] != 0; i++) { 
    367371                fmt.fmt.pix.width = test_width[i]; 
     
    11101114        int input; 
    11111115        int format_ok = 0; 
    1112         int try_ntsc = 0; 
     1116        int capture_standard = CS_VC; // initially try video conferencing resolutions 
    11131117 
    11141118        switch (cformat_) { 
     
    12041208                                                switch(decimate_) { 
    12051209                                                case 1: 
    1206                                                         if (!try_ntsc) { 
    1207                                                                 debug_msg("V4L2: trying NTSC resolution ...\n"); 
    1208                                                                 width_ = NTSC_WIDTH; 
    1209                                                                 height_ = NTSC_HEIGHT; 
    1210                                                                 try_ntsc = 1; 
    1211                                                         } else { 
     1210                                                        switch (capture_standard) { 
     1211                                                        case CS_VC : 
     1212                                                                debug_msg("V4L2: trying VGA resolution ...\n"); 
     1213                                                                width_ = VGA_WIDTH; 
     1214                                                                height_ = VGA_HEIGHT; 
     1215                                                                capture_standard = CS_VGA; 
     1216                                                                break; 
     1217                                                        case CS_VGA : 
     1218                                                                debug_msg("V4L2: trying ITU-R BT.601 PAL resolution ...\n"); 
     1219                                                                width_ = PAL_BT601_WIDTH; 
     1220                                                                height_ = PAL_BT601_HEIGHT; 
     1221                                                                capture_standard = CS_BT601_PAL; 
     1222                                                                break; 
     1223                                                        default : 
    12121224                                                                debug_msg("V4L2: trying resolution under ...\n"); 
    12131225                                                                decimate_ = 2; 
    1214                                                                 try_ntsc = 0; 
     1226                                                                capture_standard = CS_VC; 
    12151227                                                        } 
    12161228                                                        break; 
    12171229                                                case 2: 
    1218                                                         if (!try_ntsc) { 
    1219                                                                 debug_msg("V4L2: trying 1/4 NTSC resolution ...\n"); 
    1220                                                                 width_ = NTSC_WIDTH / 2; 
    1221                                                                 height_ = NTSC_HEIGHT / 2; 
    1222                                                                 try_ntsc = 1; 
    1223                                                         } else { 
     1230                                                        switch (capture_standard) { 
     1231                                                        case CS_VC : 
     1232                                                                debug_msg("V4L2: trying 1/4 VGA resolution ...\n"); 
     1233                                                                width_ = VGA_WIDTH / 2; 
     1234                                                                height_ = VGA_HEIGHT / 2; 
     1235                                                                capture_standard = CS_VGA; 
     1236                                                                break; 
     1237                                                        case CS_VGA : 
     1238                                                                debug_msg("V4L2: trying 1/4 ITU-R BT.601 PAL resolution ...\n"); 
     1239                                                                width_ = PAL_BT601_WIDTH / 2; 
     1240                                                                height_ = PAL_BT601_HEIGHT / 2; 
     1241                                                                capture_standard = CS_BT601_PAL; 
     1242                                                                break; 
     1243                                                        default : 
    12241244                                                                debug_msg("V4L2: trying resolution under ...\n"); 
    12251245                                                                decimate_ = 4; 
    1226                                                                 try_ntsc = 0; 
     1246                                                                capture_standard = CS_VC; 
    12271247                                                        } 
    12281248                                                        break; 
    12291249                                                default: 
    1230                                                         if (!try_ntsc) { 
    1231                                                                 debug_msg("V4L2: trying 1/16 NTSC resolution ...\n"); 
    1232                                                                 width_ = NTSC_WIDTH / 4; 
    1233                                                                 height_ = NTSC_HEIGHT / 4; 
    1234                                                                 try_ntsc = 0; 
    1235                                                         } else { 
     1250                                                        switch (capture_standard) { 
     1251                                                        case CS_VC : 
     1252                                                                debug_msg("V4L2: trying 1/16 VGA resolution ...\n"); 
     1253                                                                width_ = VGA_WIDTH / 4; 
     1254                                                                height_ = VGA_HEIGHT / 4; 
     1255                                                                capture_standard = CS_VGA; 
     1256                                                                break; 
     1257                                                        case CS_VGA : 
     1258                                                                debug_msg("V4L2: trying 1/16 ITU-R BT.601 PAL resolution ...\n"); 
     1259                                                                width_ = PAL_BT601_WIDTH / 4; 
     1260                                                                height_ = PAL_BT601_HEIGHT / 4; 
     1261                                                                capture_standard = CS_BT601_PAL; 
     1262                                                                break; 
     1263                                                        default : 
    12361264                                                                debug_msg("V4L2: giving up ...\n"); 
    12371265                                                                format_ok = 1; 
     1266                                                                capture_standard = CS_VC; 
    12381267                                                        } 
    12391268                                                        break;