Mercurial > libavformat.hg
annotate grab_bktr.c @ 1960:c0289552590f libavformat
Change the vhook code to send real timestamps to the filters instead of the
current time of day, which is useless, and which the filters could just as
easily query for themselves.
patch by Bobby Bingham, uhmmmm gmail com
author | diego |
---|---|
date | Thu, 29 Mar 2007 05:24:35 +0000 |
parents | 62792a60f740 |
children | b7016078f7c7 |
rev | line source |
---|---|
795
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
1 /* |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
2 * *BSD video grab interface |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
3 * Copyright (c) 2002 Steve O'Hara-Smith |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
4 * based on |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
5 * Linux video grab interface |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
6 * Copyright (c) 2000,2001 Gerard Lantau. |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
7 * and |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
8 * simple_grab.c Copyright (c) 1999 Roger Hardiman |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
9 * |
1358
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1169
diff
changeset
|
10 * This file is part of FFmpeg. |
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1169
diff
changeset
|
11 * |
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1169
diff
changeset
|
12 * FFmpeg is free software; you can redistribute it and/or |
795
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
13 * modify it under the terms of the GNU Lesser General Public |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
14 * License as published by the Free Software Foundation; either |
1358
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1169
diff
changeset
|
15 * version 2.1 of the License, or (at your option) any later version. |
795
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
16 * |
1358
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1169
diff
changeset
|
17 * FFmpeg is distributed in the hope that it will be useful, |
795
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
20 * Lesser General Public License for more details. |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
21 * |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
22 * You should have received a copy of the GNU Lesser General Public |
1358
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1169
diff
changeset
|
23 * License along with FFmpeg; if not, write to the Free Software |
896
edbe5c3717f9
Update licensing information: The FSF changed postal address.
diego
parents:
885
diff
changeset
|
24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
795
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
25 */ |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
26 #include "avformat.h" |
1601 | 27 #if defined (HAVE_DEV_BKTR_IOCTL_METEOR_H) && defined (HAVE_DEV_BKTR_IOCTL_BT848_H) |
1108 | 28 # include <dev/bktr/ioctl_meteor.h> |
29 # include <dev/bktr/ioctl_bt848.h> | |
1601 | 30 #elif defined (HAVE_MACHINE_IOCTL_METEOR_H) && defined (HAVE_MACHINE_IOCTL_BT848_H) |
31 # include <machine/ioctl_meteor.h> | |
32 # include <machine/ioctl_bt848.h> | |
33 #elif defined (HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H) && defined (HAVE_DEV_VIDEO_METEOR_IOCTL_BT848_H) | |
795
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
34 # include <dev/video/meteor/ioctl_meteor.h> |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
35 # include <dev/video/bktr/ioctl_bt848.h> |
1601 | 36 #elif HAVE_DEV_IC_BT8XX_H |
795
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
37 # include <dev/ic/bt8xx.h> |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
38 #endif |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
39 #include <unistd.h> |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
40 #include <fcntl.h> |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
41 #include <sys/ioctl.h> |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
42 #include <sys/mman.h> |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
43 #include <sys/time.h> |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
44 #include <signal.h> |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
45 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
46 typedef struct { |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
47 int video_fd; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
48 int tuner_fd; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
49 int width, height; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
50 int frame_rate; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
51 int frame_rate_base; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
52 u_int64_t per_frame; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
53 } VideoData; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
54 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
55 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
56 #define PAL 1 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
57 #define PALBDGHI 1 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
58 #define NTSC 2 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
59 #define NTSCM 2 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
60 #define SECAM 3 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
61 #define PALN 4 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
62 #define PALM 5 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
63 #define NTSCJ 6 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
64 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
65 /* PAL is 768 x 576. NTSC is 640 x 480 */ |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
66 #define PAL_HEIGHT 576 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
67 #define SECAM_HEIGHT 576 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
68 #define NTSC_HEIGHT 480 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
69 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
70 #ifndef VIDEO_FORMAT |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
71 #define VIDEO_FORMAT NTSC |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
72 #endif |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
73 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
74 static int bktr_dev[] = { METEOR_DEV0, METEOR_DEV1, METEOR_DEV2, |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
75 METEOR_DEV3, METEOR_DEV_SVIDEO }; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
76 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
77 uint8_t *video_buf; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
78 size_t video_buf_size; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
79 u_int64_t last_frame_time; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
80 volatile sig_atomic_t nsignals; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
81 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
82 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
83 static void catchsignal(int signal) |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
84 { |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
85 nsignals++; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
86 return; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
87 } |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
88 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
89 static int bktr_init(const char *video_device, int width, int height, |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
90 int format, int *video_fd, int *tuner_fd, int idev, double frequency) |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
91 { |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
92 struct meteor_geomet geo; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
93 int h_max; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
94 long ioctl_frequency; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
95 char *arg; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
96 int c; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
97 struct sigaction act, old; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
98 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
99 if (idev < 0 || idev > 4) |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
100 { |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
101 arg = getenv ("BKTR_DEV"); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
102 if (arg) |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
103 idev = atoi (arg); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
104 if (idev < 0 || idev > 4) |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
105 idev = 1; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
106 } |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
107 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
108 if (format < 1 || format > 6) |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
109 { |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
110 arg = getenv ("BKTR_FORMAT"); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
111 if (arg) |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
112 format = atoi (arg); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
113 if (format < 1 || format > 6) |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
114 format = VIDEO_FORMAT; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
115 } |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
116 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
117 if (frequency <= 0) |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
118 { |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
119 arg = getenv ("BKTR_FREQUENCY"); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
120 if (arg) |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
121 frequency = atof (arg); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
122 if (frequency <= 0) |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
123 frequency = 0.0; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
124 } |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
125 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
126 memset(&act, 0, sizeof(act)); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
127 sigemptyset(&act.sa_mask); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
128 act.sa_handler = catchsignal; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
129 sigaction(SIGUSR1, &act, &old); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
130 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
131 *tuner_fd = open("/dev/tuner0", O_RDONLY); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
132 if (*tuner_fd < 0) |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
133 perror("Warning: Tuner not opened, continuing"); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
134 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
135 *video_fd = open(video_device, O_RDONLY); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
136 if (*video_fd < 0) { |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
137 perror(video_device); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
138 return -1; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
139 } |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
140 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
141 geo.rows = height; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
142 geo.columns = width; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
143 geo.frames = 1; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
144 geo.oformat = METEOR_GEO_YUV_422 | METEOR_GEO_YUV_12; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
145 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
146 switch (format) { |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
147 case PAL: h_max = PAL_HEIGHT; c = BT848_IFORM_F_PALBDGHI; break; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
148 case PALN: h_max = PAL_HEIGHT; c = BT848_IFORM_F_PALN; break; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
149 case PALM: h_max = PAL_HEIGHT; c = BT848_IFORM_F_PALM; break; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
150 case SECAM: h_max = SECAM_HEIGHT; c = BT848_IFORM_F_SECAM; break; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
151 case NTSC: h_max = NTSC_HEIGHT; c = BT848_IFORM_F_NTSCM; break; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
152 case NTSCJ: h_max = NTSC_HEIGHT; c = BT848_IFORM_F_NTSCJ; break; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
153 default: h_max = PAL_HEIGHT; c = BT848_IFORM_F_PALBDGHI; break; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
154 } |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
155 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
156 if (height <= h_max / 2) |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
157 geo.oformat |= METEOR_GEO_EVEN_ONLY; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
158 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
159 if (ioctl(*video_fd, METEORSETGEO, &geo) < 0) { |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
160 perror("METEORSETGEO"); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
161 return -1; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
162 } |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
163 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
164 if (ioctl(*video_fd, BT848SFMT, &c) < 0) { |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
165 perror("BT848SFMT"); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
166 return -1; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
167 } |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
168 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
169 c = bktr_dev[idev]; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
170 if (ioctl(*video_fd, METEORSINPUT, &c) < 0) { |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
171 perror("METEORSINPUT"); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
172 return -1; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
173 } |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
174 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
175 video_buf_size = width * height * 12 / 8; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
176 |
885 | 177 video_buf = (uint8_t *)mmap((caddr_t)0, video_buf_size, |
795
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
178 PROT_READ, MAP_SHARED, *video_fd, (off_t)0); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
179 if (video_buf == MAP_FAILED) { |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
180 perror("mmap"); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
181 return -1; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
182 } |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
183 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
184 if (frequency != 0.0) { |
885 | 185 ioctl_frequency = (unsigned long)(frequency*16); |
795
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
186 if (ioctl(*tuner_fd, TVTUNER_SETFREQ, &ioctl_frequency) < 0) |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
187 perror("TVTUNER_SETFREQ"); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
188 } |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
189 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
190 c = AUDIO_UNMUTE; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
191 if (ioctl(*tuner_fd, BT848_SAUDIO, &c) < 0) |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
192 perror("TVTUNER_SAUDIO"); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
193 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
194 c = METEOR_CAP_CONTINOUS; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
195 ioctl(*video_fd, METEORCAPTUR, &c); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
196 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
197 c = SIGUSR1; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
198 ioctl(*video_fd, METEORSSIGNAL, &c); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
199 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
200 return 0; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
201 } |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
202 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
203 static void bktr_getframe(u_int64_t per_frame) |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
204 { |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
205 u_int64_t curtime; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
206 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
207 curtime = av_gettime(); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
208 if (!last_frame_time |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
209 || ((last_frame_time + per_frame) > curtime)) { |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
210 if (!usleep(last_frame_time + per_frame + per_frame / 8 - curtime)) { |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
211 if (!nsignals) |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
212 av_log(NULL, AV_LOG_INFO, |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
213 "SLEPT NO signals - %d microseconds late\n", |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
214 (int)(av_gettime() - last_frame_time - per_frame)); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
215 } |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
216 } |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
217 nsignals = 0; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
218 last_frame_time = curtime; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
219 } |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
220 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
221 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
222 /* note: we support only one picture read at a time */ |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
223 static int grab_read_packet(AVFormatContext *s1, AVPacket *pkt) |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
224 { |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
225 VideoData *s = s1->priv_data; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
226 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
227 if (av_new_packet(pkt, video_buf_size) < 0) |
1787
eb16c64144ee
This fixes error handling for BeOS, removing the need for some ifdefs.
mmu_man
parents:
1601
diff
changeset
|
228 return AVERROR(EIO); |
795
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
229 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
230 bktr_getframe(s->per_frame); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
231 |
921 | 232 pkt->pts = av_gettime(); |
795
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
233 memcpy(pkt->data, video_buf, video_buf_size); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
234 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
235 return video_buf_size; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
236 } |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
237 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
238 static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap) |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
239 { |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
240 VideoData *s = s1->priv_data; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
241 AVStream *st; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
242 int width, height; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
243 int frame_rate; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
244 int frame_rate_base; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
245 int format = -1; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
246 |
1003 | 247 if (ap->width <= 0 || ap->height <= 0 || ap->time_base.den <= 0) |
795
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
248 return -1; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
249 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
250 width = ap->width; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
251 height = ap->height; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
252 frame_rate = ap->time_base.den; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
253 frame_rate_base = ap->time_base.num; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
254 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
255 st = av_new_stream(s1, 0); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
256 if (!st) |
1787
eb16c64144ee
This fixes error handling for BeOS, removing the need for some ifdefs.
mmu_man
parents:
1601
diff
changeset
|
257 return AVERROR(ENOMEM); |
921 | 258 av_set_pts_info(st, 64, 1, 1000000); /* 64 bits pts in use */ |
795
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
259 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
260 s->width = width; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
261 s->height = height; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
262 s->frame_rate = frame_rate; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
263 s->frame_rate_base = frame_rate_base; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
264 s->per_frame = ((u_int64_t)1000000 * s->frame_rate_base) / s->frame_rate; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
265 |
833 | 266 st->codec->codec_type = CODEC_TYPE_VIDEO; |
267 st->codec->pix_fmt = PIX_FMT_YUV420P; | |
268 st->codec->codec_id = CODEC_ID_RAWVIDEO; | |
269 st->codec->width = width; | |
270 st->codec->height = height; | |
271 st->codec->time_base.den = frame_rate; | |
272 st->codec->time_base.num = frame_rate_base; | |
795
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
273 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
274 if (ap->standard) { |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
275 if (!strcasecmp(ap->standard, "pal")) |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
276 format = PAL; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
277 else if (!strcasecmp(ap->standard, "secam")) |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
278 format = SECAM; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
279 else if (!strcasecmp(ap->standard, "ntsc")) |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
280 format = NTSC; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
281 } |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
282 |
1795
62792a60f740
implement new grabbing interface, as described here:
gpoirier
parents:
1787
diff
changeset
|
283 if (bktr_init(s1->filename, width, height, format, |
795
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
284 &(s->video_fd), &(s->tuner_fd), -1, 0.0) < 0) |
1787
eb16c64144ee
This fixes error handling for BeOS, removing the need for some ifdefs.
mmu_man
parents:
1601
diff
changeset
|
285 return AVERROR(EIO); |
795
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
286 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
287 nsignals = 0; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
288 last_frame_time = 0; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
289 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
290 return 0; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
291 } |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
292 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
293 static int grab_read_close(AVFormatContext *s1) |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
294 { |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
295 VideoData *s = s1->priv_data; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
296 int c; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
297 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
298 c = METEOR_CAP_STOP_CONT; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
299 ioctl(s->video_fd, METEORCAPTUR, &c); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
300 close(s->video_fd); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
301 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
302 c = AUDIO_MUTE; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
303 ioctl(s->tuner_fd, BT848_SAUDIO, &c); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
304 close(s->tuner_fd); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
305 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
306 munmap((caddr_t)video_buf, video_buf_size); |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
307 |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
308 return 0; |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
309 } |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
310 |
1167 | 311 AVInputFormat video_grab_device_demuxer = { |
795
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
312 "bktr", |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
313 "video grab", |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
314 sizeof(VideoData), |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
315 NULL, |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
316 grab_read_header, |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
317 grab_read_packet, |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
318 grab_read_close, |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
319 .flags = AVFMT_NOFILE, |
391669d461d4
*BSD bktr grab support by (Jacob Meuser: jakemsr, jakemsr com)
michael
parents:
diff
changeset
|
320 }; |