Lines 35-41
Link Here
|
35 |
#ifdef HAVE_CONFIG_H |
35 |
#ifdef HAVE_CONFIG_H |
36 |
# include "config.h" |
36 |
# include "config.h" |
37 |
#endif |
37 |
#endif |
|
|
38 |
#ifdef HAVE_LINUX_VIDEODEV_H |
38 |
#include <linux/videodev.h> |
39 |
#include <linux/videodev.h> |
|
|
40 |
#endif |
39 |
#include <linux/videodev2.h> |
41 |
#include <linux/videodev2.h> |
40 |
#include "videoinput.h" |
42 |
#include "videoinput.h" |
41 |
#include "mixer.h" |
43 |
#include "mixer.h" |
Lines 101-107
Link Here
|
101 |
return 0; |
103 |
return 0; |
102 |
} |
104 |
} |
103 |
} |
105 |
} |
104 |
|
106 |
#ifdef HAVE_LINUX_VIDEODEV_H |
105 |
static int videoinput_get_v4l1_norm( int norm ) |
107 |
static int videoinput_get_v4l1_norm( int norm ) |
106 |
{ |
108 |
{ |
107 |
if( norm == VIDEOINPUT_NTSC ) { |
109 |
if( norm == VIDEOINPUT_NTSC ) { |
Lines 122-128
Link Here
|
122 |
return 0; |
124 |
return 0; |
123 |
} |
125 |
} |
124 |
} |
126 |
} |
125 |
|
127 |
#endif |
126 |
static int videoinput_get_audmode_v4l2( int mode ) |
128 |
static int videoinput_get_audmode_v4l2( int mode ) |
127 |
{ |
129 |
{ |
128 |
if( mode == VIDEOINPUT_MONO ) { |
130 |
if( mode == VIDEOINPUT_MONO ) { |
Lines 226-232
Link Here
|
226 |
int have_mmap; |
228 |
int have_mmap; |
227 |
uint8_t *map; |
229 |
uint8_t *map; |
228 |
struct video_mmap *grab_buf; |
230 |
struct video_mmap *grab_buf; |
|
|
231 |
#ifdef HAVE_LINUX_VIDEODEV_H |
229 |
struct video_mbuf gb_buffers; |
232 |
struct video_mbuf gb_buffers; |
|
|
233 |
#endif |
230 |
|
234 |
|
231 |
/* V4L1 read-mode state. */ |
235 |
/* V4L1 read-mode state. */ |
232 |
int grab_size; |
236 |
int grab_size; |
Lines 235-252
Link Here
|
235 |
|
239 |
|
236 |
const char *videoinput_get_audio_mode_name( videoinput_t *vidin, int mode ) |
240 |
const char *videoinput_get_audio_mode_name( videoinput_t *vidin, int mode ) |
237 |
{ |
241 |
{ |
238 |
if( mode == VIDEO_SOUND_MONO ) { |
242 |
if( mode == VIDEOINPUT_MONO ) { |
239 |
return "Mono"; |
243 |
return "Mono"; |
240 |
} else if( mode == VIDEO_SOUND_STEREO ) { |
244 |
} else if( mode == VIDEOINPUT_STEREO ) { |
241 |
return "Stereo"; |
245 |
return "Stereo"; |
242 |
} else if( vidin->norm == VIDEOINPUT_NTSC ) { |
246 |
} else if( vidin->norm == VIDEOINPUT_NTSC ) { |
243 |
if( mode == VIDEO_SOUND_LANG2 ) { |
247 |
if( mode == VIDEOINPUT_LANG2 ) { |
244 |
return "SAP"; |
248 |
return "SAP"; |
245 |
} |
249 |
} |
246 |
} else { |
250 |
} else { |
247 |
if( mode == VIDEO_SOUND_LANG1 ) { |
251 |
if( mode == VIDEOINPUT_LANG1 ) { |
248 |
return "Language 1"; |
252 |
return "Language 1"; |
249 |
} else if( mode == VIDEO_SOUND_LANG2 ) { |
253 |
} else if( mode == VIDEOINPUT_LANG2 ) { |
250 |
return "Language 2"; |
254 |
return "Language 2"; |
251 |
} |
255 |
} |
252 |
} |
256 |
} |
Lines 302-313
Link Here
|
302 |
frameid, strerror( errno ) ); |
306 |
frameid, strerror( errno ) ); |
303 |
} |
307 |
} |
304 |
vidin->capbuffers[ frameid ].free = 1; |
308 |
vidin->capbuffers[ frameid ].free = 1; |
305 |
} else { |
309 |
} |
|
|
310 |
#ifdef HAVE_LINUX_VIDEODEV_H |
311 |
else { |
306 |
if( ioctl( vidin->grab_fd, VIDIOCMCAPTURE, vidin->grab_buf + frameid ) < 0 ) { |
312 |
if( ioctl( vidin->grab_fd, VIDIOCMCAPTURE, vidin->grab_buf + frameid ) < 0 ) { |
307 |
fprintf( stderr, "videoinput: Can't free frame %d: %s\n", |
313 |
fprintf( stderr, "videoinput: Can't free frame %d: %s\n", |
308 |
frameid, strerror( errno ) ); |
314 |
frameid, strerror( errno ) ); |
309 |
} |
315 |
} |
310 |
} |
316 |
} |
|
|
317 |
#endif |
311 |
} |
318 |
} |
312 |
|
319 |
|
313 |
void videoinput_free_frame( videoinput_t *vidin, int frameid ) |
320 |
void videoinput_free_frame( videoinput_t *vidin, int frameid ) |
Lines 327-332
Link Here
|
327 |
vidin->curframe = 0; |
334 |
vidin->curframe = 0; |
328 |
} |
335 |
} |
329 |
|
336 |
|
|
|
337 |
#ifdef HAVE_LINUX_VIDEODEV_H |
330 |
static void wait_for_frame_v4l1( videoinput_t *vidin, int frameid ) |
338 |
static void wait_for_frame_v4l1( videoinput_t *vidin, int frameid ) |
331 |
{ |
339 |
{ |
332 |
alarms = 0; |
340 |
alarms = 0; |
Lines 347-352
Link Here
|
347 |
} |
355 |
} |
348 |
alarm( 0 ); |
356 |
alarm( 0 ); |
349 |
} |
357 |
} |
|
|
358 |
#endif |
350 |
|
359 |
|
351 |
static void wait_for_frame_v4l2( videoinput_t * vidin ) |
360 |
static void wait_for_frame_v4l2( videoinput_t * vidin ) |
352 |
{ |
361 |
{ |
Lines 394-400
Link Here
|
394 |
vidin->capbuffers[ cur_buf.index ].free = 0; |
403 |
vidin->capbuffers[ cur_buf.index ].free = 0; |
395 |
*frameid = cur_buf.index; |
404 |
*frameid = cur_buf.index; |
396 |
return vidin->capbuffers[ cur_buf.index ].data; |
405 |
return vidin->capbuffers[ cur_buf.index ].data; |
397 |
} else { |
406 |
} |
|
|
407 |
#ifdef HAVE_LINUX_VIDEODEV_H |
408 |
else { |
398 |
if( vidin->have_mmap ) { |
409 |
if( vidin->have_mmap ) { |
399 |
uint8_t *cur; |
410 |
uint8_t *cur; |
400 |
wait_for_frame_v4l1( vidin, vidin->curframe ); |
411 |
wait_for_frame_v4l1( vidin, vidin->curframe ); |
Lines 413-425
Link Here
|
413 |
} |
424 |
} |
414 |
} |
425 |
} |
415 |
} |
426 |
} |
|
|
427 |
#endif |
428 |
return 0; |
416 |
} |
429 |
} |
417 |
|
430 |
|
418 |
int videoinput_buffer_invalid( videoinput_t *vidin, int frameid ) |
431 |
int videoinput_buffer_invalid( videoinput_t *vidin, int frameid ) |
419 |
{ |
432 |
{ |
420 |
if( !vidin->isv4l2 ) { |
433 |
if( !vidin->isv4l2 ) { |
421 |
return 0; |
434 |
return 0; |
422 |
} else { |
435 |
} |
|
|
436 |
else { |
423 |
return vidin->capbuffers[ frameid ].free; |
437 |
return vidin->capbuffers[ frameid ].free; |
424 |
} |
438 |
} |
425 |
} |
439 |
} |
Lines 428-437
Link Here
|
428 |
int volume, int norm, int verbose, char *error_string ) |
442 |
int volume, int norm, int verbose, char *error_string ) |
429 |
{ |
443 |
{ |
430 |
videoinput_t *vidin = malloc( sizeof( videoinput_t ) ); |
444 |
videoinput_t *vidin = malloc( sizeof( videoinput_t ) ); |
|
|
445 |
#ifdef HAVE_LINUX_VIDEODEV_H |
431 |
struct video_capability caps_v4l1; |
446 |
struct video_capability caps_v4l1; |
432 |
struct v4l2_capability caps_v4l2; |
|
|
433 |
struct video_picture grab_pict; |
447 |
struct video_picture grab_pict; |
434 |
struct video_window grab_win; |
448 |
struct video_window grab_win; |
|
|
449 |
#endif |
450 |
struct v4l2_capability caps_v4l2; |
435 |
int i; |
451 |
int i; |
436 |
|
452 |
|
437 |
if( capwidth & 1 ) { |
453 |
if( capwidth & 1 ) { |
Lines 497-502
Link Here
|
497 |
* device. |
513 |
* device. |
498 |
*/ |
514 |
*/ |
499 |
if( ioctl( vidin->grab_fd, VIDIOC_QUERYCAP, &caps_v4l2 ) < 0 ) { |
515 |
if( ioctl( vidin->grab_fd, VIDIOC_QUERYCAP, &caps_v4l2 ) < 0 ) { |
|
|
516 |
#ifdef HAVE_LINUX_VIDEODEV_H |
500 |
/* Can't get V4L2 capabilities, maybe this is a V4L1 device? */ |
517 |
/* Can't get V4L2 capabilities, maybe this is a V4L1 device? */ |
501 |
if( ioctl( vidin->grab_fd, VIDIOCGCAP, &caps_v4l1 ) < 0 ) { |
518 |
if( ioctl( vidin->grab_fd, VIDIOCGCAP, &caps_v4l1 ) < 0 ) { |
502 |
fprintf( stderr, "videoinput: %s is not a video4linux device.\n", |
519 |
fprintf( stderr, "videoinput: %s is not a video4linux device.\n", |
Lines 514-519
Link Here
|
514 |
"%s", caps_v4l1.name ); |
531 |
"%s", caps_v4l1.name ); |
515 |
snprintf( vidin->shortdriver, sizeof( vidin->shortdriver ), |
532 |
snprintf( vidin->shortdriver, sizeof( vidin->shortdriver ), |
516 |
"%s", caps_v4l1.name ); |
533 |
"%s", caps_v4l1.name ); |
|
|
534 |
#else |
535 |
return 0; |
536 |
#endif |
517 |
} else { |
537 |
} else { |
518 |
if( vidin->verbose ) { |
538 |
if( vidin->verbose ) { |
519 |
fprintf( stderr, "videoinput: Using video4linux2 driver '%s', card '%s' (bus %s).\n" |
539 |
fprintf( stderr, "videoinput: Using video4linux2 driver '%s', card '%s' (bus %s).\n" |
Lines 553-559
Link Here
|
553 |
free( vidin ); |
573 |
free( vidin ); |
554 |
return 0; |
574 |
return 0; |
555 |
} |
575 |
} |
556 |
} else { |
576 |
} |
|
|
577 |
#ifdef HAVE_LINUX_VIDEODEV_H |
578 |
else { |
557 |
/* The capabilities should tell us how many inputs this card has. */ |
579 |
/* The capabilities should tell us how many inputs this card has. */ |
558 |
vidin->numinputs = caps_v4l1.channels; |
580 |
vidin->numinputs = caps_v4l1.channels; |
559 |
if( vidin->numinputs == 0 ) { |
581 |
if( vidin->numinputs == 0 ) { |
Lines 565-571
Link Here
|
565 |
return 0; |
587 |
return 0; |
566 |
} |
588 |
} |
567 |
} |
589 |
} |
|
|
590 |
#endif |
568 |
|
591 |
|
|
|
592 |
#ifdef HAVE_LINUX_VIDEODEV_H |
569 |
/* Check if this is a bttv-based card. Code taken from xawtv. */ |
593 |
/* Check if this is a bttv-based card. Code taken from xawtv. */ |
570 |
#define BTTV_VERSION _IOR('v' , BASE_VIDIOCPRIVATE+6, int) |
594 |
#define BTTV_VERSION _IOR('v' , BASE_VIDIOCPRIVATE+6, int) |
571 |
/* dirty hack time / v4l design flaw -- works with bttv only |
595 |
/* dirty hack time / v4l design flaw -- works with bttv only |
Lines 595-605
Link Here
|
595 |
return 0; |
619 |
return 0; |
596 |
} |
620 |
} |
597 |
} |
621 |
} |
|
|
622 |
#endif |
598 |
|
623 |
|
599 |
/* On initialization, set to input 0. This is just to start things up. */ |
624 |
/* On initialization, set to input 0. This is just to start things up. */ |
600 |
videoinput_set_input_num( vidin, 0 ); |
625 |
videoinput_set_input_num( vidin, 0 ); |
601 |
|
626 |
|
602 |
/* Test for audio support. */ |
627 |
#ifdef HAVE_LINUX_VIDEODEV_H |
|
|
628 |
/* Test for audio support. */ |
603 |
if( !vidin->isv4l2 ) { |
629 |
if( !vidin->isv4l2 ) { |
604 |
struct video_audio audio; |
630 |
struct video_audio audio; |
605 |
|
631 |
|
Lines 623-631
Link Here
|
623 |
fprintf( stderr, "\n" ); |
649 |
fprintf( stderr, "\n" ); |
624 |
} |
650 |
} |
625 |
} |
651 |
} |
626 |
|
652 |
#endif |
627 |
/* Set to stereo by default. */ |
653 |
/* Set to stereo by default. */ |
628 |
videoinput_set_audio_mode( vidin, VIDEO_SOUND_STEREO ); |
654 |
videoinput_set_audio_mode( vidin, VIDEOINPUT_STEREO ); |
|
|
655 |
|
629 |
|
656 |
|
630 |
/** |
657 |
/** |
631 |
* Once we're here, we've set the hardware norm. Now confirm that |
658 |
* Once we're here, we've set the hardware norm. Now confirm that |
Lines 702-708
Link Here
|
702 |
} |
729 |
} |
703 |
} |
730 |
} |
704 |
|
731 |
|
705 |
} else { |
732 |
} |
|
|
733 |
#ifdef HAVE_LINUX_VIDEODEV_H |
734 |
else { |
706 |
if( ioctl( vidin->grab_fd, VIDIOCGCAP, &caps_v4l1 ) < 0 ) { |
735 |
if( ioctl( vidin->grab_fd, VIDIOCGCAP, &caps_v4l1 ) < 0 ) { |
707 |
fprintf( stderr, "videoinput: video4linux device '%s' refuses " |
736 |
fprintf( stderr, "videoinput: video4linux device '%s' refuses " |
708 |
"to provide set capability information, giving up.\n", |
737 |
"to provide set capability information, giving up.\n", |
Lines 790-795
Link Here
|
790 |
return 0; |
819 |
return 0; |
791 |
} |
820 |
} |
792 |
} |
821 |
} |
|
|
822 |
#endif |
793 |
|
823 |
|
794 |
if( vidin->isv4l2 ) { |
824 |
if( vidin->isv4l2 ) { |
795 |
struct v4l2_requestbuffers req; |
825 |
struct v4l2_requestbuffers req; |
Lines 866-872
Link Here
|
866 |
videoinput_start_capture_v4l2( vidin ); |
896 |
videoinput_start_capture_v4l2( vidin ); |
867 |
|
897 |
|
868 |
return vidin; |
898 |
return vidin; |
869 |
} else { |
899 |
} |
|
|
900 |
#ifdef HAVE_LINUX_VIDEODEV_H |
901 |
else { |
870 |
/* Try to set up mmap-based capture. */ |
902 |
/* Try to set up mmap-based capture. */ |
871 |
if( ioctl( vidin->grab_fd, VIDIOCGMBUF, &(vidin->gb_buffers) ) < 0 ) { |
903 |
if( ioctl( vidin->grab_fd, VIDIOCGMBUF, &(vidin->gb_buffers) ) < 0 ) { |
872 |
fprintf( stderr, "videoinput: Can't get capture buffer properties. No mmap support?\n" |
904 |
fprintf( stderr, "videoinput: Can't get capture buffer properties. No mmap support?\n" |
Lines 931-936
Link Here
|
931 |
|
963 |
|
932 |
return vidin; |
964 |
return vidin; |
933 |
} |
965 |
} |
|
|
966 |
#endif |
967 |
return 0; |
934 |
} |
968 |
} |
935 |
|
969 |
|
936 |
void videoinput_delete( videoinput_t *vidin ) |
970 |
void videoinput_delete( videoinput_t *vidin ) |
Lines 947-953
Link Here
|
947 |
for( i = 0; i < vidin->numframes; i++ ) { |
981 |
for( i = 0; i < vidin->numframes; i++ ) { |
948 |
munmap( vidin->capbuffers[ i ].data, vidin->capbuffers[ i ].length ); |
982 |
munmap( vidin->capbuffers[ i ].data, vidin->capbuffers[ i ].length ); |
949 |
} |
983 |
} |
950 |
} else { |
984 |
} |
|
|
985 |
#ifdef HAVE_LINUX_VIDEODEV_H |
986 |
else { |
951 |
if( vidin->have_mmap ) { |
987 |
if( vidin->have_mmap ) { |
952 |
munmap( vidin->map, vidin->gb_buffers.size ); |
988 |
munmap( vidin->map, vidin->gb_buffers.size ); |
953 |
free( vidin->grab_buf ); |
989 |
free( vidin->grab_buf ); |
Lines 955-961
Link Here
|
955 |
free( vidin->grab_data ); |
991 |
free( vidin->grab_data ); |
956 |
} |
992 |
} |
957 |
} |
993 |
} |
958 |
|
994 |
#endif |
959 |
close( vidin->grab_fd ); |
995 |
close( vidin->grab_fd ); |
960 |
free( vidin ); |
996 |
free( vidin ); |
961 |
} |
997 |
} |
Lines 992-1005
Link Here
|
992 |
{ |
1028 |
{ |
993 |
if( vidin->isv4l2 ) { |
1029 |
if( vidin->isv4l2 ) { |
994 |
return (int) ((videoinput_get_control_v4l2( vidin, V4L2_CID_HUE ) * 100.0) + 0.5); |
1030 |
return (int) ((videoinput_get_control_v4l2( vidin, V4L2_CID_HUE ) * 100.0) + 0.5); |
995 |
} else { |
1031 |
} |
|
|
1032 |
#ifdef HAVE_LINUX_VIDEODEV_H |
1033 |
else { |
996 |
struct video_picture grab_pict; |
1034 |
struct video_picture grab_pict; |
997 |
|
1035 |
|
998 |
if( ioctl( vidin->grab_fd, VIDIOCGPICT, &grab_pict ) >= 0 ) { |
1036 |
if( ioctl( vidin->grab_fd, VIDIOCGPICT, &grab_pict ) >= 0 ) { |
999 |
return (int) ((((double) grab_pict.hue / 65535.0) * 100.0) + 0.5); |
1037 |
return (int) ((((double) grab_pict.hue / 65535.0) * 100.0) + 0.5); |
1000 |
} |
1038 |
} |
1001 |
} |
1039 |
} |
1002 |
|
1040 |
#endif |
1003 |
return 0; |
1041 |
return 0; |
1004 |
} |
1042 |
} |
1005 |
|
1043 |
|
Lines 1010-1016
Link Here
|
1010 |
|
1048 |
|
1011 |
if( vidin->isv4l2 ) { |
1049 |
if( vidin->isv4l2 ) { |
1012 |
videoinput_set_control_v4l2( vidin, V4L2_CID_HUE, ((double) newhue) / 100.0 ); |
1050 |
videoinput_set_control_v4l2( vidin, V4L2_CID_HUE, ((double) newhue) / 100.0 ); |
1013 |
} else { |
1051 |
} |
|
|
1052 |
#ifdef HAVE_LINUX_VIDEODEV_H |
1053 |
else { |
1014 |
struct video_picture grab_pict; |
1054 |
struct video_picture grab_pict; |
1015 |
|
1055 |
|
1016 |
if( ioctl( vidin->grab_fd, VIDIOCGPICT, &grab_pict ) >= 0 ) { |
1056 |
if( ioctl( vidin->grab_fd, VIDIOCGPICT, &grab_pict ) >= 0 ) { |
Lines 1018-1023
Link Here
|
1018 |
ioctl( vidin->grab_fd, VIDIOCSPICT, &grab_pict ); |
1058 |
ioctl( vidin->grab_fd, VIDIOCSPICT, &grab_pict ); |
1019 |
} |
1059 |
} |
1020 |
} |
1060 |
} |
|
|
1061 |
#endif |
1021 |
} |
1062 |
} |
1022 |
|
1063 |
|
1023 |
void videoinput_set_hue_relative( videoinput_t *vidin, int offset ) |
1064 |
void videoinput_set_hue_relative( videoinput_t *vidin, int offset ) |
Lines 1032-1045
Link Here
|
1032 |
{ |
1073 |
{ |
1033 |
if( vidin->isv4l2 ) { |
1074 |
if( vidin->isv4l2 ) { |
1034 |
return (int) ((videoinput_get_control_v4l2( vidin, V4L2_CID_BRIGHTNESS ) * 100.0) + 0.5); |
1075 |
return (int) ((videoinput_get_control_v4l2( vidin, V4L2_CID_BRIGHTNESS ) * 100.0) + 0.5); |
1035 |
} else { |
1076 |
} |
|
|
1077 |
#ifdef HAVE_LINUX_VIDEODEV_H |
1078 |
else { |
1036 |
struct video_picture grab_pict; |
1079 |
struct video_picture grab_pict; |
1037 |
|
1080 |
|
1038 |
if( ioctl( vidin->grab_fd, VIDIOCGPICT, &grab_pict ) >= 0 ) { |
1081 |
if( ioctl( vidin->grab_fd, VIDIOCGPICT, &grab_pict ) >= 0 ) { |
1039 |
return (int) ((((double) grab_pict.brightness / 65535.0) * 100.0) + 0.5); |
1082 |
return (int) ((((double) grab_pict.brightness / 65535.0) * 100.0) + 0.5); |
1040 |
} |
1083 |
} |
1041 |
} |
1084 |
} |
1042 |
|
1085 |
#endif |
1043 |
return 0; |
1086 |
return 0; |
1044 |
} |
1087 |
} |
1045 |
|
1088 |
|
Lines 1050-1056
Link Here
|
1050 |
|
1093 |
|
1051 |
if( vidin->isv4l2 ) { |
1094 |
if( vidin->isv4l2 ) { |
1052 |
videoinput_set_control_v4l2( vidin, V4L2_CID_BRIGHTNESS, ((double) newbright) / 100.0 ); |
1095 |
videoinput_set_control_v4l2( vidin, V4L2_CID_BRIGHTNESS, ((double) newbright) / 100.0 ); |
1053 |
} else { |
1096 |
} |
|
|
1097 |
#ifdef HAVE_LINUX_VIDEODEV_H |
1098 |
else { |
1054 |
struct video_picture grab_pict; |
1099 |
struct video_picture grab_pict; |
1055 |
|
1100 |
|
1056 |
if( ioctl( vidin->grab_fd, VIDIOCGPICT, &grab_pict ) >= 0 ) { |
1101 |
if( ioctl( vidin->grab_fd, VIDIOCGPICT, &grab_pict ) >= 0 ) { |
Lines 1058-1063
Link Here
|
1058 |
ioctl( vidin->grab_fd, VIDIOCSPICT, &grab_pict ); |
1103 |
ioctl( vidin->grab_fd, VIDIOCSPICT, &grab_pict ); |
1059 |
} |
1104 |
} |
1060 |
} |
1105 |
} |
|
|
1106 |
#endif |
1061 |
} |
1107 |
} |
1062 |
|
1108 |
|
1063 |
void videoinput_set_brightness_relative( videoinput_t *vidin, int offset ) |
1109 |
void videoinput_set_brightness_relative( videoinput_t *vidin, int offset ) |
Lines 1072-1085
Link Here
|
1072 |
{ |
1118 |
{ |
1073 |
if( vidin->isv4l2 ) { |
1119 |
if( vidin->isv4l2 ) { |
1074 |
return (int) ((videoinput_get_control_v4l2( vidin, V4L2_CID_CONTRAST ) * 100.0) + 0.5); |
1120 |
return (int) ((videoinput_get_control_v4l2( vidin, V4L2_CID_CONTRAST ) * 100.0) + 0.5); |
1075 |
} else { |
1121 |
} |
|
|
1122 |
#ifdef HAVE_LINUX_VIDEODEV_H |
1123 |
else { |
1076 |
struct video_picture grab_pict; |
1124 |
struct video_picture grab_pict; |
1077 |
|
1125 |
|
1078 |
if( ioctl( vidin->grab_fd, VIDIOCGPICT, &grab_pict ) >= 0 ) { |
1126 |
if( ioctl( vidin->grab_fd, VIDIOCGPICT, &grab_pict ) >= 0 ) { |
1079 |
return (int) ((((double) grab_pict.contrast / 65535.0) * 100.0) + 0.5); |
1127 |
return (int) ((((double) grab_pict.contrast / 65535.0) * 100.0) + 0.5); |
1080 |
} |
1128 |
} |
1081 |
} |
1129 |
} |
1082 |
|
1130 |
#endif |
1083 |
return 0; |
1131 |
return 0; |
1084 |
} |
1132 |
} |
1085 |
|
1133 |
|
Lines 1090-1096
Link Here
|
1090 |
|
1138 |
|
1091 |
if( vidin->isv4l2 ) { |
1139 |
if( vidin->isv4l2 ) { |
1092 |
videoinput_set_control_v4l2( vidin, V4L2_CID_CONTRAST, ((double) newcont) / 100.0 ); |
1140 |
videoinput_set_control_v4l2( vidin, V4L2_CID_CONTRAST, ((double) newcont) / 100.0 ); |
1093 |
} else { |
1141 |
} |
|
|
1142 |
#ifdef HAVE_LINUX_VIDEODEV_H |
1143 |
else { |
1094 |
struct video_picture grab_pict; |
1144 |
struct video_picture grab_pict; |
1095 |
|
1145 |
|
1096 |
if( ioctl( vidin->grab_fd, VIDIOCGPICT, &grab_pict ) >= 0 ) { |
1146 |
if( ioctl( vidin->grab_fd, VIDIOCGPICT, &grab_pict ) >= 0 ) { |
Lines 1098-1103
Link Here
|
1098 |
ioctl( vidin->grab_fd, VIDIOCSPICT, &grab_pict ); |
1148 |
ioctl( vidin->grab_fd, VIDIOCSPICT, &grab_pict ); |
1099 |
} |
1149 |
} |
1100 |
} |
1150 |
} |
|
|
1151 |
#endif |
1101 |
} |
1152 |
} |
1102 |
|
1153 |
|
1103 |
void videoinput_set_contrast_relative( videoinput_t *vidin, int offset ) |
1154 |
void videoinput_set_contrast_relative( videoinput_t *vidin, int offset ) |
Lines 1112-1125
Link Here
|
1112 |
{ |
1163 |
{ |
1113 |
if( vidin->isv4l2 ) { |
1164 |
if( vidin->isv4l2 ) { |
1114 |
return (int) ((videoinput_get_control_v4l2( vidin, V4L2_CID_SATURATION ) * 100.0) + 0.5); |
1165 |
return (int) ((videoinput_get_control_v4l2( vidin, V4L2_CID_SATURATION ) * 100.0) + 0.5); |
1115 |
} else { |
1166 |
} |
|
|
1167 |
#ifdef HAVE_LINUX_VIDEODEV_H |
1168 |
else { |
1116 |
struct video_picture grab_pict; |
1169 |
struct video_picture grab_pict; |
1117 |
|
1170 |
|
1118 |
if( ioctl( vidin->grab_fd, VIDIOCGPICT, &grab_pict ) >= 0 ) { |
1171 |
if( ioctl( vidin->grab_fd, VIDIOCGPICT, &grab_pict ) >= 0 ) { |
1119 |
return (int) ((((double) grab_pict.colour / 65535.0) * 100.0) + 0.5); |
1172 |
return (int) ((((double) grab_pict.colour / 65535.0) * 100.0) + 0.5); |
1120 |
} |
1173 |
} |
1121 |
} |
1174 |
} |
1122 |
|
1175 |
#endif |
1123 |
return 0; |
1176 |
return 0; |
1124 |
} |
1177 |
} |
1125 |
|
1178 |
|
Lines 1130-1136
Link Here
|
1130 |
|
1183 |
|
1131 |
if( vidin->isv4l2 ) { |
1184 |
if( vidin->isv4l2 ) { |
1132 |
videoinput_set_control_v4l2( vidin, V4L2_CID_SATURATION, ((double) newsaturation) / 100.0 ); |
1185 |
videoinput_set_control_v4l2( vidin, V4L2_CID_SATURATION, ((double) newsaturation) / 100.0 ); |
1133 |
} else { |
1186 |
} |
|
|
1187 |
#ifdef HAVE_LINUX_VIDEODEV_H |
1188 |
else { |
1134 |
struct video_picture grab_pict; |
1189 |
struct video_picture grab_pict; |
1135 |
|
1190 |
|
1136 |
if( ioctl( vidin->grab_fd, VIDIOCGPICT, &grab_pict ) >= 0 ) { |
1191 |
if( ioctl( vidin->grab_fd, VIDIOCGPICT, &grab_pict ) >= 0 ) { |
Lines 1138-1143
Link Here
|
1138 |
ioctl( vidin->grab_fd, VIDIOCSPICT, &grab_pict ); |
1193 |
ioctl( vidin->grab_fd, VIDIOCSPICT, &grab_pict ); |
1139 |
} |
1194 |
} |
1140 |
} |
1195 |
} |
|
|
1196 |
#endif |
1141 |
} |
1197 |
} |
1142 |
|
1198 |
|
1143 |
void videoinput_set_saturation_relative( videoinput_t *vidin, int offset ) |
1199 |
void videoinput_set_saturation_relative( videoinput_t *vidin, int offset ) |
Lines 1166-1172
Link Here
|
1166 |
if( !mute && vidin->volume > 0 ) { |
1222 |
if( !mute && vidin->volume > 0 ) { |
1167 |
videoinput_set_control_v4l2( vidin, V4L2_CID_AUDIO_VOLUME, ((double) vidin->volume) / 100.0 ); |
1223 |
videoinput_set_control_v4l2( vidin, V4L2_CID_AUDIO_VOLUME, ((double) vidin->volume) / 100.0 ); |
1168 |
} |
1224 |
} |
1169 |
} else { |
1225 |
} |
|
|
1226 |
#ifdef HAVE_LINUX_VIDEODEV_H |
1227 |
else { |
1170 |
struct video_audio audio; |
1228 |
struct video_audio audio; |
1171 |
|
1229 |
|
1172 |
if( ioctl( vidin->grab_fd, VIDIOCGAUDIO, &audio ) < 0 ) { |
1230 |
if( ioctl( vidin->grab_fd, VIDIOCGAUDIO, &audio ) < 0 ) { |
Lines 1190-1195
Link Here
|
1190 |
} |
1248 |
} |
1191 |
} |
1249 |
} |
1192 |
} |
1250 |
} |
|
|
1251 |
#endif |
1193 |
vidin->hw_muted = mute; |
1252 |
vidin->hw_muted = mute; |
1194 |
} |
1253 |
} |
1195 |
} |
1254 |
} |
Lines 1219-1225
Link Here
|
1219 |
vidin->audiomode = mode; |
1278 |
vidin->audiomode = mode; |
1220 |
} |
1279 |
} |
1221 |
} |
1280 |
} |
1222 |
} else { |
1281 |
} |
|
|
1282 |
#ifdef HAVE_LINUX_VIDEODEV_H |
1283 |
else { |
1223 |
struct video_audio audio; |
1284 |
struct video_audio audio; |
1224 |
|
1285 |
|
1225 |
if( ioctl( vidin->grab_fd, VIDIOCGAUDIO, &audio ) < 0 ) { |
1286 |
if( ioctl( vidin->grab_fd, VIDIOCGAUDIO, &audio ) < 0 ) { |
Lines 1248-1253
Link Here
|
1248 |
} |
1309 |
} |
1249 |
} |
1310 |
} |
1250 |
} |
1311 |
} |
|
|
1312 |
#endif |
1251 |
} |
1313 |
} |
1252 |
} |
1314 |
} |
1253 |
|
1315 |
|
Lines 1294-1306
Link Here
|
1294 |
videoinput_free_all_frames( vidin ); |
1356 |
videoinput_free_all_frames( vidin ); |
1295 |
videoinput_start_capture_v4l2( vidin ); |
1357 |
videoinput_start_capture_v4l2( vidin ); |
1296 |
} |
1358 |
} |
1297 |
} else { |
1359 |
} |
|
|
1360 |
#ifdef HAVE_LINUX_VIDEODEV_H |
1361 |
else { |
1298 |
if( ioctl( vidin->grab_fd, VIDIOCSFREQ, &frequency ) < 0 ) { |
1362 |
if( ioctl( vidin->grab_fd, VIDIOCSFREQ, &frequency ) < 0 ) { |
1299 |
fprintf( stderr, "videoinput: Tuner present, but our request to change " |
1363 |
fprintf( stderr, "videoinput: Tuner present, but our request to change " |
1300 |
"to frequency %d failed with this error: %s.\n", freqKHz, strerror( errno ) ); |
1364 |
"to frequency %d failed with this error: %s.\n", freqKHz, strerror( errno ) ); |
1301 |
fprintf( stderr, "videoinput: Please file a bug report at " PACKAGE_BUGREPORT "\n" ); |
1365 |
fprintf( stderr, "videoinput: Please file a bug report at " PACKAGE_BUGREPORT "\n" ); |
1302 |
} |
1366 |
} |
1303 |
} |
1367 |
} |
|
|
1368 |
#endif |
1304 |
} |
1369 |
} |
1305 |
} |
1370 |
} |
1306 |
|
1371 |
|
Lines 1322-1328
Link Here
|
1322 |
return 0; |
1387 |
return 0; |
1323 |
} |
1388 |
} |
1324 |
frequency = freqinfo.frequency; |
1389 |
frequency = freqinfo.frequency; |
1325 |
} else { |
1390 |
} |
|
|
1391 |
#ifdef HAVE_LINUX_VIDEODEV_H |
1392 |
else { |
1326 |
if( ioctl( vidin->grab_fd, VIDIOCGFREQ, &frequency ) < 0 ) { |
1393 |
if( ioctl( vidin->grab_fd, VIDIOCGFREQ, &frequency ) < 0 ) { |
1327 |
fprintf( stderr, "videoinput: Tuner refuses to tell us the current frequency: %s\n", |
1394 |
fprintf( stderr, "videoinput: Tuner refuses to tell us the current frequency: %s\n", |
1328 |
strerror( errno ) ); |
1395 |
strerror( errno ) ); |
Lines 1330-1336
Link Here
|
1330 |
return 0; |
1397 |
return 0; |
1331 |
} |
1398 |
} |
1332 |
} |
1399 |
} |
1333 |
|
1400 |
#endif |
1334 |
if( !vidin->tunerlow ) { |
1401 |
if( !vidin->tunerlow ) { |
1335 |
frequency *= 1000; /* switch from MHz to KHz */ |
1402 |
frequency *= 1000; /* switch from MHz to KHz */ |
1336 |
} |
1403 |
} |
Lines 1355-1361
Link Here
|
1355 |
} else if( !tuner.signal ) { |
1422 |
} else if( !tuner.signal ) { |
1356 |
return 0; |
1423 |
return 0; |
1357 |
} |
1424 |
} |
1358 |
} else { |
1425 |
} |
|
|
1426 |
#ifdef HAVE_LINUX_VIDEODEV_H |
1427 |
else { |
1359 |
struct video_tuner tuner; |
1428 |
struct video_tuner tuner; |
1360 |
|
1429 |
|
1361 |
if( ioctl( vidin->grab_fd, VIDIOCGTUNER, &tuner ) < 0 ) { |
1430 |
if( ioctl( vidin->grab_fd, VIDIOCGTUNER, &tuner ) < 0 ) { |
Lines 1367-1372
Link Here
|
1367 |
return 0; |
1436 |
return 0; |
1368 |
} |
1437 |
} |
1369 |
} |
1438 |
} |
|
|
1439 |
#endif |
1370 |
} |
1440 |
} |
1371 |
return 1; |
1441 |
return 1; |
1372 |
} |
1442 |
} |
Lines 1386-1392
Link Here
|
1386 |
} else { |
1456 |
} else { |
1387 |
vidin->tunerlow = (tuner.capability & V4L2_TUNER_CAP_LOW) ? 1 : 0; |
1457 |
vidin->tunerlow = (tuner.capability & V4L2_TUNER_CAP_LOW) ? 1 : 0; |
1388 |
} |
1458 |
} |
1389 |
} else { |
1459 |
} |
|
|
1460 |
#ifdef HAVE_LINUX_VIDEODEV_H |
1461 |
else { |
1390 |
struct video_tuner tuner; |
1462 |
struct video_tuner tuner; |
1391 |
int tuner_number = -1; |
1463 |
int tuner_number = -1; |
1392 |
int found = 0; |
1464 |
int found = 0; |
Lines 1498-1503
Link Here
|
1498 |
vidin->hastuner = 1; |
1570 |
vidin->hastuner = 1; |
1499 |
} |
1571 |
} |
1500 |
} |
1572 |
} |
|
|
1573 |
#endif |
1501 |
} |
1574 |
} |
1502 |
|
1575 |
|
1503 |
|
1576 |
|
Lines 1560-1566
Link Here
|
1560 |
videoinput_free_all_frames( vidin ); |
1633 |
videoinput_free_all_frames( vidin ); |
1561 |
videoinput_start_capture_v4l2( vidin ); |
1634 |
videoinput_start_capture_v4l2( vidin ); |
1562 |
} |
1635 |
} |
1563 |
} else { |
1636 |
} |
|
|
1637 |
#ifdef HAVE_LINUX_VIDEODEV_H |
1638 |
else { |
1564 |
if( inputnum >= vidin->numinputs ) { |
1639 |
if( inputnum >= vidin->numinputs ) { |
1565 |
fprintf( stderr, "videoinput: Requested input number %d not valid, " |
1640 |
fprintf( stderr, "videoinput: Requested input number %d not valid, " |
1566 |
"max is %d.\n", inputnum, vidin->numinputs ); |
1641 |
"max is %d.\n", inputnum, vidin->numinputs ); |
Lines 1595-1601
Link Here
|
1595 |
} |
1670 |
} |
1596 |
} |
1671 |
} |
1597 |
} |
1672 |
} |
1598 |
|
1673 |
#endif |
1599 |
/* Once we've set the input, go look for a tuner. */ |
1674 |
/* Once we've set the input, go look for a tuner. */ |
1600 |
videoinput_find_and_set_tuner( vidin ); |
1675 |
videoinput_find_and_set_tuner( vidin ); |
1601 |
} |
1676 |
} |
Lines 1678-1685
Link Here
|
1678 |
|
1753 |
|
1679 |
int videoinput_get_audio_mode( videoinput_t *vidin ) |
1754 |
int videoinput_get_audio_mode( videoinput_t *vidin ) |
1680 |
{ |
1755 |
{ |
1681 |
if( !vidin->audiomode || vidin->audiomode > VIDEO_SOUND_LANG2 ) { |
1756 |
if( !vidin->audiomode || vidin->audiomode > VIDEOINPUT_LANG2 ) { |
1682 |
return VIDEO_SOUND_MONO; |
1757 |
return VIDEOINPUT_MONO; |
1683 |
} else { |
1758 |
} else { |
1684 |
return vidin->audiomode; |
1759 |
return vidin->audiomode; |
1685 |
} |
1760 |
} |
Lines 1771-1777
Link Here
|
1771 |
if( vidin->isv4l2 ) { |
1846 |
if( vidin->isv4l2 ) { |
1772 |
videoinput_set_control_v4l2( vidin, V4L2_CID_AUDIO_VOLUME, |
1847 |
videoinput_set_control_v4l2( vidin, V4L2_CID_AUDIO_VOLUME, |
1773 |
((double) vidin->volume) / 100.0 ); |
1848 |
((double) vidin->volume) / 100.0 ); |
1774 |
} else { |
1849 |
} |
|
|
1850 |
#ifdef HAVE_LINUX_VIDEODEV_H |
1851 |
else { |
1775 |
struct video_audio audio; |
1852 |
struct video_audio audio; |
1776 |
|
1853 |
|
1777 |
if( ioctl( vidin->grab_fd, VIDIOCGAUDIO, &audio ) < 0 ) { |
1854 |
if( ioctl( vidin->grab_fd, VIDIOCGAUDIO, &audio ) < 0 ) { |
Lines 1790-1795
Link Here
|
1790 |
} |
1867 |
} |
1791 |
} |
1868 |
} |
1792 |
} |
1869 |
} |
|
|
1870 |
#endif |
1793 |
} |
1871 |
} |
1794 |
} |
1872 |
} |
1795 |
|
1873 |
|