annotate stream/tvi_v4l.c @ 24576:6704a924d4aa

According to MSDN a thread must call CoUninitialize once for each successful call it has made to CoInitialize or CoInitializeEx, including any call that returns S_FALSE. Only the CoUninitialize call corresponding to the CoInitialize or CoInitializeEx call that initialized the library can close it. patch by Gianluigi Tiesi, mplayer netfarm it
author diego
date Sun, 23 Sep 2007 20:37:33 +0000
parents 9e71e0345c35
children cdd41bcc9603
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
1 /*
3284
702e399a4b3e update (audio support is coming:)
alex
parents: 3243
diff changeset
2 Video 4 Linux input
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
3
10368
6fb8a6a4a071 removing my (nonworking) email address
alex
parents: 10019
diff changeset
4 (C) Alex Beregszaszi
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
5
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
6 Some ideas are based on xawtv/libng's grab-v4l.c written by
09d5c9834580 tv update
alex
parents: 2790
diff changeset
7 Gerd Knorr <kraxel@bytesex.org>
09d5c9834580 tv update
alex
parents: 2790
diff changeset
8
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
9 Multithreading, a/v sync and native ALSA support by
20646
ab2a5307c029 changed email address
henry
parents: 19431
diff changeset
10 Jindrich Makovicka <makovick@gmail.com>
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
11
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
12 Mjpeg hardware encoding support by
22507
a46ab26b2d5e Source files should not contain non-ASCII characters.
diego
parents: 22381
diff changeset
13 Ivan Szanto <szivan@freemail.hu>
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
14
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
15 CODE IS UNDER DEVELOPMENT, NO FEATURE REQUESTS PLEASE!
09d5c9834580 tv update
alex
parents: 2790
diff changeset
16 */
09d5c9834580 tv update
alex
parents: 2790
diff changeset
17
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
18 #include "config.h"
98769cea155c added tv subsystem
alex
parents:
diff changeset
19
98769cea155c added tv subsystem
alex
parents:
diff changeset
20 #include <stdio.h>
98769cea155c added tv subsystem
alex
parents:
diff changeset
21 #include <errno.h>
98769cea155c added tv subsystem
alex
parents:
diff changeset
22 #include <fcntl.h>
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
23 #include <signal.h>
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
24 #include <sys/ioctl.h>
98769cea155c added tv subsystem
alex
parents:
diff changeset
25 #include <sys/types.h>
6553
d000112bd06e Paul Ortyl's patch - tv4l timestamps (not so precise :()
alex
parents: 6529
diff changeset
26 #include <sys/time.h>
10621
9f4af7d95d87 this small patch allows to compile the file libmpdemux/tvi_v4l.c properly,
diego
parents: 10593
diff changeset
27
9f4af7d95d87 this small patch allows to compile the file libmpdemux/tvi_v4l.c properly,
diego
parents: 10593
diff changeset
28 /* Necessary to prevent collisions between <linux/time.h> and <sys/time.h> when V4L2 is installed. */
9f4af7d95d87 this small patch allows to compile the file libmpdemux/tvi_v4l.c properly,
diego
parents: 10593
diff changeset
29 #define _LINUX_TIME_H
9f4af7d95d87 this small patch allows to compile the file libmpdemux/tvi_v4l.c properly,
diego
parents: 10593
diff changeset
30
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
31 #include <linux/videodev.h>
98769cea155c added tv subsystem
alex
parents:
diff changeset
32 #include <unistd.h>
98769cea155c added tv subsystem
alex
parents:
diff changeset
33 #include <sys/mman.h>
2931
bce9c945b29c tv interface update
alex
parents: 2841
diff changeset
34 #include <stdlib.h>
bce9c945b29c tv interface update
alex
parents: 2841
diff changeset
35 #include <string.h>
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
36 #include <pthread.h>
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
37 #ifdef HAVE_SYS_SYSINFO_H
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
38 #include <sys/sysinfo.h>
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
39 #endif
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
40
2830
596a6ba3520f never include files from public headers...
arpi
parents: 2819
diff changeset
41 #include "mp_msg.h"
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16273
diff changeset
42 #include "libaf/af_format.h"
19431
ac69ba536915 Explicitly include libmpcodecs/img_format.h and libvo/fastmemcpy.h.
diego
parents: 19271
diff changeset
43 #include "libmpcodecs/img_format.h"
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16273
diff changeset
44 #include "libvo/fastmemcpy.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16273
diff changeset
45 #include "libvo/videodev_mjpeg.h"
2830
596a6ba3520f never include files from public headers...
arpi
parents: 2819
diff changeset
46
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
47 #include "tv.h"
98769cea155c added tv subsystem
alex
parents:
diff changeset
48
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
49 #include "audio_in.h"
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
50
23883
d65439444b75 Removing global variables from tv://
voroshil
parents: 23724
diff changeset
51 static tvi_handle_t *tvi_init_v4l(tv_param_t* tv_param);
22381
6cabac4d35b5 tv driver loading rework. As a side effect "-tv driver=help" option is
voroshil
parents: 20646
diff changeset
52
6cabac4d35b5 tv driver loading rework. As a side effect "-tv driver=help" option is
voroshil
parents: 20646
diff changeset
53 tvi_info_t tvi_info_v4l = {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
54 tvi_init_v4l,
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
55 "Video 4 Linux input",
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
56 "v4l",
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
57 "Alex Beregszaszi",
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
58 "under development"
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
59 };
09d5c9834580 tv update
alex
parents: 2790
diff changeset
60
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
61 #define PAL_WIDTH 768
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
62 #define PAL_HEIGHT 576
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
63 #define PAL_FPS 25
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
64
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
65 #define NTSC_WIDTH 640
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
66 #define NTSC_HEIGHT 480
16273
rfelker
parents: 14245
diff changeset
67 #define NTSC_FPS (30000.0/1001.0)
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
68
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
69 #define MAX_AUDIO_CHANNELS 10
3815
622a9ade4517 updated
alex
parents: 3711
diff changeset
70
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
71 #define VID_BUF_SIZE_IMMEDIATE 2
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
72 #define VIDEO_AVG_BUFFER_SIZE 600
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
73
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
74 typedef struct {
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
75 /* general */
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
76 char *video_device;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
77 int video_fd;
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
78 struct video_capability capability;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
79 struct video_channel *channels;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
80 int act_channel;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
81 struct video_tuner tuner;
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
82
09d5c9834580 tv update
alex
parents: 2790
diff changeset
83 /* video */
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
84 struct video_picture picture;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
85 int format; /* output format */
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
86 int width;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
87 int height;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
88 int bytesperline;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
89 float fps;
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
90
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
91 struct video_mbuf mbuf;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
92 unsigned char *mmap;
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
93 struct video_mmap *buf;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
94 int nbuf;
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
95
09d5c9834580 tv update
alex
parents: 2790
diff changeset
96 /* audio */
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
97 char *audio_device;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
98 audio_in_t audio_in;
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
99
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
100 int audio_id;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
101 struct video_audio audio[MAX_AUDIO_CHANNELS];
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
102 int audio_channels[MAX_AUDIO_CHANNELS];
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
103
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
104 /* buffering stuff */
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
105 int immediate_mode;
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
106
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
107 int audio_buffer_size;
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
108 int aud_skew_cnt;
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
109 unsigned char *audio_ringbuffer;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
110 long long *audio_skew_buffer;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
111 volatile int audio_head;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
112 volatile int audio_tail;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
113 volatile int audio_cnt;
8131
6b9a3fceaef9 skew calculations modified to use integers
henry
parents: 8022
diff changeset
114 volatile long long audio_skew;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
115 volatile double audio_skew_factor;
8131
6b9a3fceaef9 skew calculations modified to use integers
henry
parents: 8022
diff changeset
116 volatile long long audio_skew_measure_time;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
117 volatile int audio_drop;
6553
d000112bd06e Paul Ortyl's patch - tv4l timestamps (not so precise :()
alex
parents: 6529
diff changeset
118
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
119 int first;
8417
15e3d9c2c0ac allocate the video buffer on the fly, instead of one big chunk at startup
henry
parents: 8335
diff changeset
120 int video_buffer_size_max;
15e3d9c2c0ac allocate the video buffer on the fly, instead of one big chunk at startup
henry
parents: 8335
diff changeset
121 volatile int video_buffer_size_current;
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
122 unsigned char **video_ringbuffer;
8417
15e3d9c2c0ac allocate the video buffer on the fly, instead of one big chunk at startup
henry
parents: 8335
diff changeset
123 long long *video_timebuffer;
9607
e2eaeb3cb089 correct small framerate fluctuations directly in the capture thread
henry
parents: 9216
diff changeset
124 long long *video_avg_buffer;
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
125 int video_avg_ptr;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
126 int video_interval_sum;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
127 volatile int video_head;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
128 volatile int video_tail;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
129 volatile int video_cnt;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
130
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
131 volatile int shutdown;
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
132
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
133 pthread_t audio_grabber_thread;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
134 pthread_t video_grabber_thread;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
135 pthread_mutex_t audio_starter;
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
136 pthread_mutex_t skew_mutex;
8417
15e3d9c2c0ac allocate the video buffer on the fly, instead of one big chunk at startup
henry
parents: 8335
diff changeset
137 pthread_mutex_t video_buffer_mutex;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
138
8131
6b9a3fceaef9 skew calculations modified to use integers
henry
parents: 8022
diff changeset
139 long long starttime;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
140 double audio_secs_per_block;
8131
6b9a3fceaef9 skew calculations modified to use integers
henry
parents: 8022
diff changeset
141 long long audio_skew_total;
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
142 long audio_recv_blocks_total;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
143 long audio_sent_blocks_total;
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
144 long mjpeg_bufsize;
23926
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
145 #ifdef HAVE_TV_TELETEXT
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
146 char *vbi_dev;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
147 int vbi_fd;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
148 int vbi_bufsize;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
149 int vbi_shutdown;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
150 pthread_t vbi_grabber_thread;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
151 void *priv_vbi;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
152 #endif
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
153
23883
d65439444b75 Removing global variables from tv://
voroshil
parents: 23724
diff changeset
154 tv_param_t *tv_param;
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
155 } priv_t;
98769cea155c added tv subsystem
alex
parents:
diff changeset
156
98769cea155c added tv subsystem
alex
parents:
diff changeset
157 #include "tvi_def.h"
98769cea155c added tv subsystem
alex
parents:
diff changeset
158
2841
7ff47d6ae6e9 updated audio and tuner checking
alex
parents: 2837
diff changeset
159 static const char *device_cap2name[] = {
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
160 "capture", "tuner", "teletext", "overlay", "chromakey", "clipping",
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
161 "frameram", "scales", "monochrome", "subcapture", "mpeg-decoder",
09d5c9834580 tv update
alex
parents: 2790
diff changeset
162 "mpeg-encoder", "mjpeg-decoder", "mjpeg-encoder", NULL
09d5c9834580 tv update
alex
parents: 2790
diff changeset
163 };
09d5c9834580 tv update
alex
parents: 2790
diff changeset
164
2841
7ff47d6ae6e9 updated audio and tuner checking
alex
parents: 2837
diff changeset
165 static const char *device_palette2name[] = {
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
166 "-", "grey", "hi240", "rgb16", "rgb24", "rgb32", "rgb15", "yuv422",
09d5c9834580 tv update
alex
parents: 2790
diff changeset
167 "yuyv", "uyvy", "yuv420", "yuv411", "raw", "yuv422p", "yuv411p",
7532
26cd91676fb6 complex patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
alex
parents: 7472
diff changeset
168 "yuv420p", "yuv410p"
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
169 };
7532
26cd91676fb6 complex patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
alex
parents: 7472
diff changeset
170 #define PALETTE(x) ((x < sizeof(device_palette2name)/sizeof(char*)) ? device_palette2name[x] : "UNKNOWN")
26cd91676fb6 complex patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
alex
parents: 7472
diff changeset
171
26cd91676fb6 complex patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
alex
parents: 7472
diff changeset
172 static const char *norm2name(int mode)
26cd91676fb6 complex patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
alex
parents: 7472
diff changeset
173 {
26cd91676fb6 complex patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
alex
parents: 7472
diff changeset
174 switch (mode) {
26cd91676fb6 complex patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
alex
parents: 7472
diff changeset
175 case VIDEO_MODE_PAL:
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
176 return "pal";
7532
26cd91676fb6 complex patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
alex
parents: 7472
diff changeset
177 case VIDEO_MODE_SECAM:
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
178 return "secam";
7532
26cd91676fb6 complex patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
alex
parents: 7472
diff changeset
179 case VIDEO_MODE_NTSC:
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
180 return "ntsc";
7532
26cd91676fb6 complex patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
alex
parents: 7472
diff changeset
181 case VIDEO_MODE_AUTO:
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
182 return "auto";
7532
26cd91676fb6 complex patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
alex
parents: 7472
diff changeset
183 default:
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
184 return "unknown";
7532
26cd91676fb6 complex patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
alex
parents: 7472
diff changeset
185 }
26cd91676fb6 complex patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
alex
parents: 7472
diff changeset
186 };
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
187
7163
a193df8b275b v4l audio fixes by Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz>
alex
parents: 7070
diff changeset
188 static const char *audio_mode2name(int mode)
a193df8b275b v4l audio fixes by Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz>
alex
parents: 7070
diff changeset
189 {
a193df8b275b v4l audio fixes by Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz>
alex
parents: 7070
diff changeset
190 switch (mode) {
a193df8b275b v4l audio fixes by Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz>
alex
parents: 7070
diff changeset
191 case VIDEO_SOUND_MONO:
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
192 return "mono";
7163
a193df8b275b v4l audio fixes by Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz>
alex
parents: 7070
diff changeset
193 case VIDEO_SOUND_STEREO:
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
194 return "stereo";
7163
a193df8b275b v4l audio fixes by Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz>
alex
parents: 7070
diff changeset
195 case VIDEO_SOUND_LANG1:
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
196 return "language1";
7163
a193df8b275b v4l audio fixes by Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz>
alex
parents: 7070
diff changeset
197 case VIDEO_SOUND_LANG2:
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
198 return "language2";
7163
a193df8b275b v4l audio fixes by Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz>
alex
parents: 7070
diff changeset
199 default:
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
200 return "unknown";
7163
a193df8b275b v4l audio fixes by Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz>
alex
parents: 7070
diff changeset
201 }
2841
7ff47d6ae6e9 updated audio and tuner checking
alex
parents: 2837
diff changeset
202 };
7ff47d6ae6e9 updated audio and tuner checking
alex
parents: 2837
diff changeset
203
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
204 static void *audio_grabber(void *data);
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
205 static void *video_grabber(void *data);
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
206
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
207 static int palette2depth(int palette)
09d5c9834580 tv update
alex
parents: 2790
diff changeset
208 {
2810
1f0bcdb49910 tv update
alex
parents: 2802
diff changeset
209 switch(palette)
1f0bcdb49910 tv update
alex
parents: 2802
diff changeset
210 {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
211 /* component */
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
212 case VIDEO_PALETTE_RGB555:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
213 return(15);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
214 case VIDEO_PALETTE_RGB565:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
215 return(16);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
216 case VIDEO_PALETTE_RGB24:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
217 return(24);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
218 case VIDEO_PALETTE_RGB32:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
219 return(32);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
220 /* planar */
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
221 case VIDEO_PALETTE_YUV411P:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
222 case VIDEO_PALETTE_YUV420P:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
223 case VIDEO_PALETTE_YUV410P:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
224 return(12);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
225 /* packed */
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
226 case VIDEO_PALETTE_YUV422P:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
227 case VIDEO_PALETTE_YUV422:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
228 case VIDEO_PALETTE_YUYV:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
229 case VIDEO_PALETTE_UYVY:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
230 case VIDEO_PALETTE_YUV420:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
231 case VIDEO_PALETTE_YUV411:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
232 return(16);
2810
1f0bcdb49910 tv update
alex
parents: 2802
diff changeset
233 }
1f0bcdb49910 tv update
alex
parents: 2802
diff changeset
234 return(-1);
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
235 }
09d5c9834580 tv update
alex
parents: 2790
diff changeset
236
09d5c9834580 tv update
alex
parents: 2790
diff changeset
237 static int format2palette(int format)
09d5c9834580 tv update
alex
parents: 2790
diff changeset
238 {
2810
1f0bcdb49910 tv update
alex
parents: 2802
diff changeset
239 switch(format)
1f0bcdb49910 tv update
alex
parents: 2802
diff changeset
240 {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
241 case IMGFMT_BGR15:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
242 return(VIDEO_PALETTE_RGB555);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
243 case IMGFMT_BGR16:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
244 return(VIDEO_PALETTE_RGB565);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
245 case IMGFMT_BGR24:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
246 return(VIDEO_PALETTE_RGB24);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
247 case IMGFMT_BGR32:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
248 return(VIDEO_PALETTE_RGB32);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
249 case IMGFMT_YV12:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
250 case IMGFMT_I420:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
251 return(VIDEO_PALETTE_YUV420P);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
252 case IMGFMT_YUY2:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
253 return(VIDEO_PALETTE_YUV422);
11656
1bd451a6d4ae make outfmt=uyvy work with rivatv patch by Stephen Beahm
faust3
parents: 10776
diff changeset
254 case IMGFMT_UYVY:
1bd451a6d4ae make outfmt=uyvy work with rivatv patch by Stephen Beahm
faust3
parents: 10776
diff changeset
255 return(VIDEO_PALETTE_UYVY);
2810
1f0bcdb49910 tv update
alex
parents: 2802
diff changeset
256 }
1f0bcdb49910 tv update
alex
parents: 2802
diff changeset
257 return(-1);
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
258 }
09d5c9834580 tv update
alex
parents: 2790
diff changeset
259
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
260 // sets and sanitizes audio buffer/block sizes
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
261 static void setup_audio_buffer_sizes(priv_t *priv)
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
262 {
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
263 int bytes_per_sample = priv->audio_in.bytes_per_sample;
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
264
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
265 // make the audio buffer at least 5 seconds long
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
266 priv->audio_buffer_size = 1 + 5*priv->audio_in.samplerate
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
267 *priv->audio_in.channels
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
268 *bytes_per_sample/priv->audio_in.blocksize;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
269 if (priv->audio_buffer_size < 256) priv->audio_buffer_size = 256;
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
270
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
271 // make the skew buffer at least 1 second long
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
272 priv->aud_skew_cnt = 1 + 1*priv->audio_in.samplerate
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
273 *priv->audio_in.channels
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
274 *bytes_per_sample/priv->audio_in.blocksize;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
275 if (priv->aud_skew_cnt < 16) priv->aud_skew_cnt = 16;
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
276
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
277 mp_msg(MSGT_TV, MSGL_V, "Audio capture - buffer %d blocks of %d bytes, skew average from %d meas.\n",
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
278 priv->audio_buffer_size, priv->audio_in.blocksize, priv->aud_skew_cnt);
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
279 }
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
280
23883
d65439444b75 Removing global variables from tv://
voroshil
parents: 23724
diff changeset
281 static tvi_handle_t *tvi_init_v4l(tv_param_t* tv_param)
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
282 {
98769cea155c added tv subsystem
alex
parents:
diff changeset
283 tvi_handle_t *h;
98769cea155c added tv subsystem
alex
parents:
diff changeset
284 priv_t *priv;
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
285
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
286 h = new_handle();
98769cea155c added tv subsystem
alex
parents:
diff changeset
287 if (!h)
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
288 return(NULL);
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
289
98769cea155c added tv subsystem
alex
parents:
diff changeset
290 priv = h->priv;
98769cea155c added tv subsystem
alex
parents:
diff changeset
291
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
292 /* set video device name */
23883
d65439444b75 Removing global variables from tv://
voroshil
parents: 23724
diff changeset
293 if (!tv_param->device)
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
294 priv->video_device = strdup("/dev/video0");
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
295 else
23883
d65439444b75 Removing global variables from tv://
voroshil
parents: 23724
diff changeset
296 priv->video_device = strdup(tv_param->device);
3611
178c562948ff checkings for malloc results (potential memleaks)
pl
parents: 3284
diff changeset
297
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
298 /* set video device name */
23883
d65439444b75 Removing global variables from tv://
voroshil
parents: 23724
diff changeset
299 if (!tv_param->adevice)
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
300 priv->audio_device = NULL;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
301 else {
23883
d65439444b75 Removing global variables from tv://
voroshil
parents: 23724
diff changeset
302 priv->audio_device = strdup(tv_param->adevice);
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
303 }
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
304
3611
178c562948ff checkings for malloc results (potential memleaks)
pl
parents: 3284
diff changeset
305 /* allocation failed */
178c562948ff checkings for malloc results (potential memleaks)
pl
parents: 3284
diff changeset
306 if (!priv->video_device) {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
307 free_handle(h);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
308 return(NULL);
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
309 }
98769cea155c added tv subsystem
alex
parents:
diff changeset
310
23925
f54903679ad0 10l: wrong pointer was initialized (causes crash during startup).
voroshil
parents: 23885
diff changeset
311 priv->tv_param=tv_param;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
312 return(h);
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
313 }
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
314
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
315 /* retrieves info about audio channels from the BTTV */
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
316 static void init_v4l_audio(priv_t *priv)
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
317 {
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
318 int i;
7163
a193df8b275b v4l audio fixes by Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz>
alex
parents: 7070
diff changeset
319 int reqmode;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
320
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
321 if (!priv->capability.audios) return;
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
322
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
323 /* audio chanlist */
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
324
7318
85897ab199a4 changed message leveles (too many non-sense info messages)
alex
parents: 7317
diff changeset
325 mp_msg(MSGT_TV, MSGL_V, " Audio devices: %d\n", priv->capability.audios);
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
326
7532
26cd91676fb6 complex patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
alex
parents: 7472
diff changeset
327 mp_msg(MSGT_TV, MSGL_V, "Video capture card reports the audio setup as follows:\n");
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
328 for (i = 0; i < priv->capability.audios; i++)
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
329 {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
330 if (i >= MAX_AUDIO_CHANNELS)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
331 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
332 mp_msg(MSGT_TV, MSGL_ERR, "no space for more audio channels (increase in source!) (%d > %d)\n",
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
333 i, MAX_AUDIO_CHANNELS);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
334 i = priv->capability.audios;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
335 break;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
336 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
337
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
338 priv->audio[i].audio = i;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
339 if (ioctl(priv->video_fd, VIDIOCGAUDIO, &priv->audio[i]) == -1)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
340 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
341 mp_msg(MSGT_TV, MSGL_ERR, "ioctl get audio failed: %s\n", strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
342 break;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
343 }
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
344
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
345 /* mute all channels */
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
346 priv->audio[i].flags |= VIDEO_AUDIO_MUTE;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
347 reqmode = -1;
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
348 if (priv->tv_param->amode >= 0) {
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
349 switch (priv->tv_param->amode) {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
350 case 0:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
351 reqmode = VIDEO_SOUND_MONO;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
352 break;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
353 case 1:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
354 reqmode = VIDEO_SOUND_STEREO;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
355 break;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
356 case 2:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
357 reqmode = VIDEO_SOUND_LANG1;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
358 break;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
359 case 3:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
360 reqmode = VIDEO_SOUND_LANG2;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
361 break;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
362 default:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
363 mp_msg(MSGT_TV, MSGL_ERR, "Unknown audio mode requested.\n");
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
364 break;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
365 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
366 if (reqmode >= 0) priv->audio[i].mode = reqmode;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
367 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
368 ioctl(priv->video_fd, VIDIOCSAUDIO, &priv->audio[i]);
3815
622a9ade4517 updated
alex
parents: 3711
diff changeset
369
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
370 // get the parameters back
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
371 if (ioctl(priv->video_fd, VIDIOCGAUDIO, &priv->audio[i]) == -1)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
372 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
373 mp_msg(MSGT_TV, MSGL_ERR, "ioctl get audio failed: %s\n", strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
374 break;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
375 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
376
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
377 switch(priv->audio[i].mode)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
378 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
379 case VIDEO_SOUND_MONO:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
380 case VIDEO_SOUND_LANG1:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
381 case VIDEO_SOUND_LANG2:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
382 priv->audio_channels[i] = 1;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
383 break;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
384 case VIDEO_SOUND_STEREO:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
385 priv->audio_channels[i] = 2;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
386 break;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
387 default:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
388 mp_msg(MSGT_TV, MSGL_ERR, "Card reports an unknown audio mode !\n");
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
389 mp_msg(MSGT_TV, MSGL_ERR, "Trying two channel audio. Use forcechan to override.\n");
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
390 priv->audio_channels[i] = 2;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
391 break;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
392 }
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
393
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
394 if (reqmode >= 0 && priv->audio[i].mode != reqmode) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
395 mp_msg(MSGT_TV, MSGL_ERR, "Audio mode setup warning!\n");
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
396 mp_msg(MSGT_TV, MSGL_ERR, "Requested mode was %s, but v4l still reports %s.\n",
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
397 audio_mode2name(reqmode), audio_mode2name(priv->audio[i].mode));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
398 mp_msg(MSGT_TV, MSGL_ERR, "You may need \"forcechan\" option to force stereo/mono audio recording.\n");
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
399 }
7163
a193df8b275b v4l audio fixes by Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz>
alex
parents: 7070
diff changeset
400
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
401 /* display stuff */
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
402 mp_msg(MSGT_TV, MSGL_V, " %d: %s: ", priv->audio[i].audio,
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
403 priv->audio[i].name);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
404 if (priv->audio[i].flags & VIDEO_AUDIO_MUTABLE) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
405 mp_msg(MSGT_TV, MSGL_V, "muted=%s ",
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
406 (priv->audio[i].flags & VIDEO_AUDIO_MUTE) ? "yes" : "no");
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
407 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
408 mp_msg(MSGT_TV, MSGL_V, "vol=%d bass=%d treble=%d balance=%d mode=%s",
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
409 priv->audio[i].volume, priv->audio[i].bass, priv->audio[i].treble,
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
410 priv->audio[i].balance, audio_mode2name(priv->audio[i].mode));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
411 mp_msg(MSGT_TV, MSGL_V, " chan=%d\n", priv->audio_channels[i]);
7163
a193df8b275b v4l audio fixes by Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz>
alex
parents: 7070
diff changeset
412
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
413 if (priv->tv_param->forcechan >= 0)
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
414 priv->audio_channels[i] = priv->tv_param->forcechan;
7163
a193df8b275b v4l audio fixes by Jindrich Makovicka <makovick@KMLinux.fjfi.cvut.cz>
alex
parents: 7070
diff changeset
415
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
416 // we'll call VIDIOCSAUDIO again when starting capture
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
417 // let's set audio mode to requested mode again for the case
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
418 // when VIDIOCGAUDIO just cannot report the mode correctly
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
419 if (reqmode >= 0) priv->audio[i].mode = reqmode;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
420 }
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
421 }
98769cea155c added tv subsystem
alex
parents:
diff changeset
422
11814
9e88ceb462c7 compile fix when v4l2 is present but disabled
alex
parents: 11775
diff changeset
423 #if !defined(__LINUX_VIDEODEV2_H) && !defined(VIDIOC_QUERYCAP)
10593
27711ab2889f v4l2 check
henry
parents: 10368
diff changeset
424 struct v4l2_capability
27711ab2889f v4l2 check
henry
parents: 10368
diff changeset
425 {
27711ab2889f v4l2 check
henry
parents: 10368
diff changeset
426 __u8 driver[16]; /* i.e. "bttv" */
27711ab2889f v4l2 check
henry
parents: 10368
diff changeset
427 __u8 card[32]; /* i.e. "Hauppauge WinTV" */
27711ab2889f v4l2 check
henry
parents: 10368
diff changeset
428 __u8 bus_info[32]; /* "PCI:" + pci_dev->slot_name */
27711ab2889f v4l2 check
henry
parents: 10368
diff changeset
429 __u32 version; /* should use KERNEL_VERSION() */
27711ab2889f v4l2 check
henry
parents: 10368
diff changeset
430 __u32 capabilities; /* Device capabilities */
27711ab2889f v4l2 check
henry
parents: 10368
diff changeset
431 __u32 reserved[4];
27711ab2889f v4l2 check
henry
parents: 10368
diff changeset
432 };
27711ab2889f v4l2 check
henry
parents: 10368
diff changeset
433
27711ab2889f v4l2 check
henry
parents: 10368
diff changeset
434 #define VIDIOC_QUERYCAP _IOR ('V', 0, struct v4l2_capability)
10621
9f4af7d95d87 this small patch allows to compile the file libmpdemux/tvi_v4l.c properly,
diego
parents: 10593
diff changeset
435 #endif
10593
27711ab2889f v4l2 check
henry
parents: 10368
diff changeset
436
3815
622a9ade4517 updated
alex
parents: 3711
diff changeset
437 static int init(priv_t *priv)
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
438 {
98769cea155c added tv subsystem
alex
parents:
diff changeset
439 int i;
98769cea155c added tv subsystem
alex
parents:
diff changeset
440
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
441 if (priv->tv_param->immediate == 1)
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
442 priv->tv_param->noaudio = 1;
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
443
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
444 priv->video_ringbuffer = NULL;
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
445 priv->video_timebuffer = NULL;
9607
e2eaeb3cb089 correct small framerate fluctuations directly in the capture thread
henry
parents: 9216
diff changeset
446 priv->video_avg_buffer = NULL;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
447 priv->audio_ringbuffer = NULL;
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
448 priv->audio_skew_buffer = NULL;
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
449
3815
622a9ade4517 updated
alex
parents: 3711
diff changeset
450 priv->video_fd = open(priv->video_device, O_RDWR);
17366
934380353fd6 massive attack: mp_msg printf format fixes
rathann
parents: 17012
diff changeset
451 mp_msg(MSGT_TV, MSGL_DBG2, "Video fd: %d, %p\n", priv->video_fd,
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
452 priv->video_device);
3815
622a9ade4517 updated
alex
parents: 3711
diff changeset
453 if (priv->video_fd == -1)
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
454 {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
455 mp_msg(MSGT_TV, MSGL_ERR, "unable to open '%s': %s\n",
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
456 priv->video_device, strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
457 goto err;
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
458 }
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
459
10593
27711ab2889f v4l2 check
henry
parents: 10368
diff changeset
460 /* check for v4l2 */
27711ab2889f v4l2 check
henry
parents: 10368
diff changeset
461 if (ioctl(priv->video_fd, VIDIOC_QUERYCAP, &priv->capability) == 0) {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
462 mp_msg(MSGT_TV, MSGL_ERR, "=================================================================\n");
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
463 mp_msg(MSGT_TV, MSGL_ERR, " WARNING: YOU ARE USING V4L DEMUXER WITH V4L2 DRIVERS!!!\n");
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
464 mp_msg(MSGT_TV, MSGL_ERR, " As the V4L1 compatibility layer is broken, this may not work.\n");
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
465 mp_msg(MSGT_TV, MSGL_ERR, " If you encounter any problems, use driver=v4l2 instead.\n");
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
466 mp_msg(MSGT_TV, MSGL_ERR, " Bugreports on driver=v4l with v4l2 drivers will be ignored.\n");
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
467 mp_msg(MSGT_TV, MSGL_ERR, "=================================================================\n");
10593
27711ab2889f v4l2 check
henry
parents: 10368
diff changeset
468 }
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
469
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
470 /* get capabilities (priv->capability is needed!) */
3815
622a9ade4517 updated
alex
parents: 3711
diff changeset
471 if (ioctl(priv->video_fd, VIDIOCGCAP, &priv->capability) == -1)
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
472 {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
473 mp_msg(MSGT_TV, MSGL_ERR, "ioctl get capabilites failed: %s\n", strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
474 goto err;
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
475 }
98769cea155c added tv subsystem
alex
parents:
diff changeset
476
3815
622a9ade4517 updated
alex
parents: 3711
diff changeset
477 fcntl(priv->video_fd, F_SETFD, FD_CLOEXEC);
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
478
2818
9f68d309f8cb printf's changed into mp_msg
alex
parents: 2814
diff changeset
479 mp_msg(MSGT_TV, MSGL_INFO, "Selected device: %s\n", priv->capability.name);
9f68d309f8cb printf's changed into mp_msg
alex
parents: 2814
diff changeset
480 mp_msg(MSGT_TV, MSGL_INFO, " Capabilites: ");
2841
7ff47d6ae6e9 updated audio and tuner checking
alex
parents: 2837
diff changeset
481 for (i = 0; device_cap2name[i] != NULL; i++)
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
482 if (priv->capability.type & (1 << i))
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
483 mp_msg(MSGT_TV, MSGL_INFO, "%s ", device_cap2name[i]);
2818
9f68d309f8cb printf's changed into mp_msg
alex
parents: 2814
diff changeset
484 mp_msg(MSGT_TV, MSGL_INFO, "\n");
9f68d309f8cb printf's changed into mp_msg
alex
parents: 2814
diff changeset
485 mp_msg(MSGT_TV, MSGL_INFO, " Device type: %d\n", priv->capability.type);
9f68d309f8cb printf's changed into mp_msg
alex
parents: 2814
diff changeset
486 mp_msg(MSGT_TV, MSGL_INFO, " Supported sizes: %dx%d => %dx%d\n",
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
487 priv->capability.minwidth, priv->capability.minheight,
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
488 priv->capability.maxwidth, priv->capability.maxheight);
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
489 priv->width = priv->capability.minwidth;
98769cea155c added tv subsystem
alex
parents:
diff changeset
490 priv->height = priv->capability.minheight;
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
491
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
492 /* somewhere here could disable priv->tv_param->mjpeg, if it is not a capability */
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
493
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
494 /* initialize if necessary */
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
495 if ( priv->tv_param->mjpeg )
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
496 {
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
497 struct mjpeg_params bparm;
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
498 struct mjpeg_requestbuffers breq; /* buffer requests */
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
499
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
500 if (ioctl(priv->video_fd, MJPIOC_G_PARAMS, &bparm) < 0)
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
501 {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
502 mp_msg(MSGT_TV, MSGL_ERR,
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
503 " MJP: Error getting video parameters: %s\n", strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
504 goto err;
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
505 }
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
506
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
507 mp_msg(MSGT_TV, MSGL_INFO,
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
508 " MJP: previous params: x: %d, y: %d, w: %d, h: %d, decim: %d, fields: %d,\n",
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
509 bparm.img_x, bparm.img_y, bparm.img_width, bparm.img_height,
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
510 bparm.decimation, bparm.field_per_buff);
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
511
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
512 mp_msg(MSGT_TV, MSGL_INFO,
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
513 " MJP: HorDcm: %d, VerDcm: %d, TmpDcm: %d\n",
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
514 bparm.HorDcm, bparm.VerDcm, bparm.TmpDcm);
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
515
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
516 bparm.input = priv->tv_param->input; /* tv */
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
517 if (!strcasecmp(priv->tv_param->norm, "pal"))
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
518 bparm.norm = 0; /* PAL */
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
519 else if (!strcasecmp(priv->tv_param->norm, "ntsc"))
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
520 bparm.norm = 1; /* NTSC */
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
521 else if (!strcasecmp(priv->tv_param->norm, "secam"))
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
522 bparm.norm = 2; /* SECAM */
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
523 bparm.quality = priv->tv_param->quality;
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
524 bparm.decimation = priv->tv_param->decimation;
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
525
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
526 mp_msg(MSGT_TV, MSGL_INFO, " MJP: setting params to decimation: %d, quality: %d\n",
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
527 bparm.decimation, bparm.quality);
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
528
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
529 if (ioctl(priv->video_fd, MJPIOC_S_PARAMS, &bparm) < 0)
23149
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
530 {
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
531 mp_msg(MSGT_TV, MSGL_ERR,
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
532 " MJP: Error setting video parameters: %s\n", strerror(errno));
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
533 goto err;
23149
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
534 }
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
535
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
536 if (ioctl(priv->video_fd, MJPIOC_G_PARAMS, &bparm) < 0)
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
537 {
23149
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
538 mp_msg(MSGT_TV, MSGL_ERR,
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
539 " MJP: Error getting video parameters: %s\n", strerror(errno));
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
540 goto err;
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
541 }
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
542
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
543 mp_msg(MSGT_TV, MSGL_INFO,
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
544 " MJP: current params: x: %d, y: %d, w: %d, h: %d, decim: %d, fields: %d,\n",
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
545 bparm.img_x, bparm.img_y, bparm.img_width, bparm.img_height,
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
546 bparm.decimation, bparm.field_per_buff);
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
547
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
548 mp_msg(MSGT_TV, MSGL_INFO,
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
549 " MJP: HorDcm: %d, VerDcm: %d, TmpDcm: %d\n",
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
550 bparm.HorDcm, bparm.VerDcm, bparm.TmpDcm);
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
551
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
552
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
553 breq.count = 64;
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
554 priv -> nbuf = breq.count;
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
555 priv->mbuf.frames = priv -> nbuf;
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
556 priv->mjpeg_bufsize = 256*1024;
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
557 if (priv->tv_param->buffer_size >= 0)
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
558 priv->mjpeg_bufsize = priv->tv_param->buffer_size*1024;
23142
4978352462a0 cosmetics: Fix one more stray wrongly indented line.
diego
parents: 23141
diff changeset
559 breq.size = priv -> mjpeg_bufsize;
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
560 if (ioctl(priv->video_fd, MJPIOC_REQBUFS,&(breq)) < 0)
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
561 {
23149
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
562 mp_msg (MSGT_TV, MSGL_ERR,
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
563 " MJP: Error requesting video buffers: %s\n", strerror(errno));
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
564 goto err;
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
565 }
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
566 mp_msg(MSGT_TV, MSGL_INFO,
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
567 " MJP: Got %ld buffers of size %ld KB\n",
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
568 breq.count, breq.size/1024);
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
569
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
570 priv -> mmap = mmap(0, breq.count * breq.size,
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
571 PROT_READ|PROT_WRITE, MAP_SHARED, priv->video_fd, 0);
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
572 if (priv -> mmap == MAP_FAILED)
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
573 {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
574 mp_msg(MSGT_TV, MSGL_INFO,
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
575 " MJP: Error mapping video buffers: %s\n", strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
576 goto err;
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
577 }
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
578 }
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
579
2818
9f68d309f8cb printf's changed into mp_msg
alex
parents: 2814
diff changeset
580 mp_msg(MSGT_TV, MSGL_INFO, " Inputs: %d\n", priv->capability.channels);
18885
5c8acc972551 rm unnecesary casts from void* - part 4
reynaldo
parents: 18589
diff changeset
581 priv->channels = calloc(priv->capability.channels, sizeof(struct video_channel));
3611
178c562948ff checkings for malloc results (potential memleaks)
pl
parents: 3284
diff changeset
582 if (!priv->channels)
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
583 goto malloc_failed;
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
584 memset(priv->channels, 0, sizeof(struct video_channel)*priv->capability.channels);
98769cea155c added tv subsystem
alex
parents:
diff changeset
585 for (i = 0; i < priv->capability.channels; i++)
98769cea155c added tv subsystem
alex
parents:
diff changeset
586 {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
587 priv->channels[i].channel = i;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
588 if (ioctl(priv->video_fd, VIDIOCGCHAN, &priv->channels[i]) == -1)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
589 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
590 mp_msg(MSGT_TV, MSGL_ERR, "ioctl get channel failed: %s\n", strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
591 break;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
592 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
593 mp_msg(MSGT_TV, MSGL_INFO, " %d: %s: %s%s%s%s (tuner:%d, norm:%s)\n", i,
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
594 priv->channels[i].name,
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
595 (priv->channels[i].flags & VIDEO_VC_TUNER) ? "tuner " : "",
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
596 (priv->channels[i].flags & VIDEO_VC_AUDIO) ? "audio " : "",
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
597 (priv->channels[i].flags & VIDEO_TYPE_TV) ? "tv " : "",
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
598 (priv->channels[i].flags & VIDEO_TYPE_CAMERA) ? "camera " : "",
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
599 priv->channels[i].tuners,
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
600 norm2name(priv->channels[i].norm));
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
601 }
7532
26cd91676fb6 complex patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
alex
parents: 7472
diff changeset
602 priv->act_channel = 0;
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
603
09d5c9834580 tv update
alex
parents: 2790
diff changeset
604 if (!(priv->capability.type & VID_TYPE_CAPTURE))
09d5c9834580 tv update
alex
parents: 2790
diff changeset
605 {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
606 mp_msg(MSGT_TV, MSGL_ERR, "Only grabbing supported (for overlay use another program)\n");
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
607 goto err;
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
608 }
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
609
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
610
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
611 /* init v4l audio even when we don't capture */
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
612 init_v4l_audio(priv);
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
613
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
614 if (!priv->capability.audios && !priv->tv_param->force_audio) priv->tv_param->noaudio = 1;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
615
3815
622a9ade4517 updated
alex
parents: 3711
diff changeset
616 /* audio init */
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
617 if (!priv->tv_param->noaudio) {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
618
11775
66e491c35dc8 ALSA 1.x audio out driver
henry
parents: 11656
diff changeset
619 #if defined(HAVE_ALSA9) || defined(HAVE_ALSA1X)
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
620 if (priv->tv_param->alsa)
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
621 audio_in_init(&priv->audio_in, AUDIO_IN_ALSA);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
622 else
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
623 audio_in_init(&priv->audio_in, AUDIO_IN_OSS);
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
624 #else
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
625 audio_in_init(&priv->audio_in, AUDIO_IN_OSS);
3815
622a9ade4517 updated
alex
parents: 3711
diff changeset
626 #endif
622a9ade4517 updated
alex
parents: 3711
diff changeset
627
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
628 if (priv->audio_device) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
629 audio_in_set_device(&priv->audio_in, priv->audio_device);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
630 }
7070
aaac9080b8a3 v4l capture update by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
arpi
parents: 7058
diff changeset
631
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
632 if (priv->tv_param->audio_id < priv->capability.audios)
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
633 priv->audio_id = priv->tv_param->audio_id;
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
634 else
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
635 priv->audio_id = 0;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
636 audio_in_set_samplerate(&priv->audio_in, 44100);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
637 if (priv->capability.audios) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
638 audio_in_set_channels(&priv->audio_in, priv->audio_channels[priv->audio_id]);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
639 } else {
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
640 if (priv->tv_param->forcechan >= 0) {
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
641 audio_in_set_channels(&priv->audio_in, priv->tv_param->forcechan);
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
642 } else {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
643 audio_in_set_channels(&priv->audio_in, 2);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
644 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
645 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
646 if (audio_in_setup(&priv->audio_in) < 0) return 0;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
647 setup_audio_buffer_sizes(priv);
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
648 }
3815
622a9ade4517 updated
alex
parents: 3711
diff changeset
649
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
650 return(1);
98769cea155c added tv subsystem
alex
parents:
diff changeset
651
3611
178c562948ff checkings for malloc results (potential memleaks)
pl
parents: 3284
diff changeset
652 malloc_failed:
178c562948ff checkings for malloc results (potential memleaks)
pl
parents: 3284
diff changeset
653 if (priv->channels)
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
654 free(priv->channels);
3611
178c562948ff checkings for malloc results (potential memleaks)
pl
parents: 3284
diff changeset
655 if (priv->buf)
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
656 free(priv->buf);
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
657 err:
3815
622a9ade4517 updated
alex
parents: 3711
diff changeset
658 if (priv->video_fd != -1)
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
659 close(priv->video_fd);
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
660 return(0);
98769cea155c added tv subsystem
alex
parents:
diff changeset
661 }
98769cea155c added tv subsystem
alex
parents:
diff changeset
662
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
663 static int uninit(priv_t *priv)
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
664 {
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
665 unsigned long num;
23926
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
666
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
667 #ifdef HAVE_TV_TELETEXT
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
668 priv->vbi_shutdown=1;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
669 if(priv->vbi_grabber_thread)
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
670 pthread_join(priv->vbi_grabber_thread, NULL);
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
671
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
672 teletext_control(priv->priv_vbi,TV_VBI_CONTROL_STOP,(void*)1);
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
673 priv->priv_vbi=NULL;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
674
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
675 if(priv->vbi_fd){
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
676 close(priv->vbi_fd);
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
677 priv->vbi_fd=0;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
678 }
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
679
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
680 if(priv->vbi_dev){
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
681 free(priv->vbi_dev);
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
682 priv->vbi_dev=0;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
683 }
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
684
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
685 #endif
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
686
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
687 priv->shutdown = 1;
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
688
7318
85897ab199a4 changed message leveles (too many non-sense info messages)
alex
parents: 7317
diff changeset
689 mp_msg(MSGT_TV, MSGL_V, "Waiting for threads to finish... ");
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
690 if (!priv->tv_param->noaudio) {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
691 pthread_join(priv->audio_grabber_thread, NULL);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
692 pthread_mutex_destroy(&priv->audio_starter);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
693 pthread_mutex_destroy(&priv->skew_mutex);
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
694 }
8417
15e3d9c2c0ac allocate the video buffer on the fly, instead of one big chunk at startup
henry
parents: 8335
diff changeset
695 pthread_mutex_destroy(&priv->video_buffer_mutex);
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
696 pthread_join(priv->video_grabber_thread, NULL);
7318
85897ab199a4 changed message leveles (too many non-sense info messages)
alex
parents: 7317
diff changeset
697 mp_msg(MSGT_TV, MSGL_V, "done\n");
3815
622a9ade4517 updated
alex
parents: 3711
diff changeset
698
8703
c9c309ab9891 supress clicks/noise when changing channels
henry
parents: 8671
diff changeset
699 if (priv->capability.audios) {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
700 priv->audio[priv->audio_id].flags |= VIDEO_AUDIO_MUTE;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
701 ioctl(priv->video_fd, VIDIOCSAUDIO, &priv->audio[priv->audio_id]);
8703
c9c309ab9891 supress clicks/noise when changing channels
henry
parents: 8671
diff changeset
702 }
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
703
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
704 if ( priv->tv_param->mjpeg )
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
705 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
706 num = -1;
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
707 if (ioctl(priv->video_fd, MJPIOC_QBUF_CAPT, &num) < 0)
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
708 mp_msg(MSGT_TV, MSGL_ERR, "\n MJP: ioctl MJPIOC_QBUF_CAPT failed: %s\n", strerror(errno));
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
709 }
9745
c79bcf85f68c 10L, close isn't enouth we must munmap too.
albeu
parents: 9663
diff changeset
710 else
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
711 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
712 // We need to munmap as close don't close mem mappings
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
713 if(munmap(priv->mmap,priv->mbuf.size))
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
714 mp_msg(MSGT_TV, MSGL_ERR, "Munmap failed: %s\n",strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
715 }
9745
c79bcf85f68c 10L, close isn't enouth we must munmap too.
albeu
parents: 9663
diff changeset
716
c79bcf85f68c 10L, close isn't enouth we must munmap too.
albeu
parents: 9663
diff changeset
717 if(close(priv->video_fd))
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
718 mp_msg(MSGT_TV, MSGL_ERR, "Close tv failed: %s\n",strerror(errno));
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
719
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
720 audio_in_uninit(&priv->audio_in);
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
721
8417
15e3d9c2c0ac allocate the video buffer on the fly, instead of one big chunk at startup
henry
parents: 8335
diff changeset
722 if (priv->video_ringbuffer) {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
723 int i;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
724 for (i = 0; i < priv->video_buffer_size_current; i++) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
725 free(priv->video_ringbuffer[i]);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
726 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
727 free(priv->video_ringbuffer);
8417
15e3d9c2c0ac allocate the video buffer on the fly, instead of one big chunk at startup
henry
parents: 8335
diff changeset
728 }
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
729
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
730 if (priv->video_timebuffer)
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
731 free(priv->video_timebuffer);
9607
e2eaeb3cb089 correct small framerate fluctuations directly in the capture thread
henry
parents: 9216
diff changeset
732 if (priv->video_avg_buffer)
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
733 free(priv->video_avg_buffer);
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
734 if (!priv->tv_param->noaudio) {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
735 if (priv->audio_ringbuffer)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
736 free(priv->audio_ringbuffer);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
737 if (priv->audio_skew_buffer)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
738 free(priv->audio_skew_buffer);
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
739 }
2931
bce9c945b29c tv interface update
alex
parents: 2841
diff changeset
740
bce9c945b29c tv interface update
alex
parents: 2841
diff changeset
741 return(1);
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
742 }
98769cea155c added tv subsystem
alex
parents:
diff changeset
743
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
744 static int get_capture_buffer_size(priv_t *priv)
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
745 {
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
746 int bufsize, cnt;
7905
b062996d9794 added an option for specifying the size of capture buffer
henry
parents: 7844
diff changeset
747
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
748 if (priv->tv_param->buffer_size >= 0) {
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
749 bufsize = priv->tv_param->buffer_size*1024*1024;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
750 } else {
7905
b062996d9794 added an option for specifying the size of capture buffer
henry
parents: 7844
diff changeset
751 #ifdef HAVE_SYS_SYSINFO_H
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
752 struct sysinfo si;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
753
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
754 sysinfo(&si);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
755 if (si.totalram<2*1024*1024) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
756 bufsize = 1024*1024;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
757 } else {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
758 bufsize = si.totalram/2;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
759 }
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
760 #else
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
761 bufsize = 16*1024*1024;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
762 #endif
7905
b062996d9794 added an option for specifying the size of capture buffer
henry
parents: 7844
diff changeset
763 }
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
764
7532
26cd91676fb6 complex patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
alex
parents: 7472
diff changeset
765 cnt = bufsize/(priv->height*priv->bytesperline);
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
766 if (cnt < 2) cnt = 2;
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
767
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
768 return cnt;
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
769 }
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
770
23926
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
771 #ifdef HAVE_TV_TELETEXT
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
772 static int vbi_init(priv_t* priv,char* device)
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
773 {
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
774 int vbi_fd=0;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
775 struct video_capability cap;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
776
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
777 if(!device)
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
778 return TVI_CONTROL_FALSE;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
779
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
780 priv->vbi_dev=strdup(device);
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
781
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
782 vbi_fd=open(priv->vbi_dev,O_RDWR);
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
783 if(vbi_fd<0){
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
784 mp_msg(MSGT_TV,MSGL_ERR,"vbi: could not open device %s\n",priv->vbi_dev);
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
785 return TVI_CONTROL_FALSE;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
786 }
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
787
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
788 if(ioctl(vbi_fd,VIDIOCGCAP,&cap)<0){
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
789 mp_msg(MSGT_TV,MSGL_ERR,"vbi: Query capatibilities failed for %s\n",priv->vbi_dev);
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
790 close(vbi_fd);
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
791 return TVI_CONTROL_FALSE;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
792 }
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
793 if(!cap.type & VID_TYPE_CAPTURE){
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
794 mp_msg(MSGT_TV,MSGL_ERR,"vbi: %s is not capture device\n",priv->vbi_dev);
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
795 close(vbi_fd);
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
796 return TVI_CONTROL_FALSE;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
797 }
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
798
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
799 priv->vbi_fd=vbi_fd;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
800 mp_msg(MSGT_TV,MSGL_DBG3,"vbi: init ok\n");
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
801 return TVI_CONTROL_TRUE;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
802 }
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
803
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
804 static int vbi_get_props(priv_t* priv,tt_stream_props* ptsp)
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
805 {
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
806 struct vbi_format fmt;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
807 int res;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
808 if(!priv || !ptsp)
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
809 return TVI_CONTROL_FALSE;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
810
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
811 memset(&fmt,0,sizeof(struct vbi_format));
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
812 if((res=ioctl(priv->vbi_fd,VIDIOCGVBIFMT,&fmt))<0){
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
813 mp_msg(MSGT_TV,MSGL_ERR,"vbi_get_props: Query format failed: %x\n",res);
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
814 return TVI_CONTROL_FALSE;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
815 }
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
816
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
817 ptsp->interlaced=(fmt.flags& VBI_INTERLACED?1:0);
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
818 if(fmt.start[1]>0 && fmt.count[1]){
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
819 if(fmt.start[1]>=286)
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
820 //625
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
821 ptsp->offset=10.2e-6*fmt.sampling_rate;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
822 else
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
823 //525
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
824 ptsp->offset=9.2e-6*fmt.sampling_rate;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
825 }else
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
826 ptsp->offset=9.7e-6*fmt.sampling_rate;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
827
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
828 ptsp->sampling_rate=fmt.sampling_rate;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
829 ptsp->samples_per_line=fmt.samples_per_line,
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
830
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
831 ptsp->count[0]=fmt.count[0];
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
832 ptsp->count[1]=fmt.count[1];
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
833 ptsp->bufsize = ptsp->samples_per_line * (ptsp->count[0] + ptsp->count[1]);
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
834
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
835 mp_msg(MSGT_TV,MSGL_V,"vbi_get_props: sampling_rate=%d,offset:%d,samples_per_line: %d\n interlaced:%s, count=[%d,%d]\n",
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
836 ptsp->sampling_rate,
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
837 ptsp->offset,
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
838 ptsp->samples_per_line,
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
839 ptsp->interlaced?"Yes":"No",
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
840 ptsp->count[0],
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
841 ptsp->count[1]);
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
842
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
843 return TVI_CONTROL_TRUE;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
844 }
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
845
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
846 static void *vbi_grabber(void *data)
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
847 {
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
848 priv_t *priv = (priv_t *) data;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
849 int bytes,seq,prev_seq;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
850 unsigned char* buf;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
851 tt_stream_props tsp;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
852
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
853 if(!priv->priv_vbi){
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
854 mp_msg(MSGT_TV,MSGL_WARN,"vbi: vbi not initialized. stopping thread.\n");
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
855 return NULL;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
856 }
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
857
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
858 if(vbi_get_props(priv,&tsp)!=TVI_CONTROL_TRUE)
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
859 return NULL;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
860
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
861 buf=malloc(tsp.bufsize);
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
862 seq=0;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
863 prev_seq=0;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
864 mp_msg(MSGT_TV,MSGL_V,"vbi: vbi capture thread started.\n");
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
865
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
866 while (!priv->vbi_shutdown){
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
867 bytes=read(priv->vbi_fd,buf,tsp.bufsize);
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
868 if (bytes!=tsp.bufsize){
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
869 mp_msg(MSGT_TV,MSGL_WARN,"vbi: expecting bytes: %d, got: %d",tsp.bufsize,bytes);
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
870 break;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
871 }
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
872 seq=*(int*)(buf+bytes-4);
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
873 if(seq<=1) continue;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
874 if (prev_seq && seq!=prev_seq+1){
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
875 prev_seq=0;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
876 seq=0;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
877 }
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
878 prev_seq=seq;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
879 teletext_control(priv->priv_vbi,TV_VBI_CONTROL_DECODE_PAGE,&buf);
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
880 mp_msg(MSGT_TV,MSGL_DBG3,"grabber: seq:%d\n",seq);
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
881 }
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
882 free(buf);
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
883 return NULL;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
884 }
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
885 #endif //HAVE_TV_TELETEXT
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
886
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
887 static int start(priv_t *priv)
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
888 {
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
889 int i;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
890 int bytes_per_sample;
23354
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
891 struct video_window win;
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
892
3815
622a9ade4517 updated
alex
parents: 3711
diff changeset
893 if (ioctl(priv->video_fd, VIDIOCGPICT, &priv->picture) == -1)
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
894 {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
895 mp_msg(MSGT_TV, MSGL_ERR, "ioctl get picture failed: %s\n", strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
896 return(0);
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
897 }
98769cea155c added tv subsystem
alex
parents:
diff changeset
898
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
899 priv->picture.palette = format2palette(priv->format);
09d5c9834580 tv update
alex
parents: 2790
diff changeset
900 priv->picture.depth = palette2depth(priv->picture.palette);
3815
622a9ade4517 updated
alex
parents: 3711
diff changeset
901
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
902 if (priv->format != IMGFMT_BGR15) {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
903 priv->bytesperline = priv->width * priv->picture.depth / 8;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
904 } else {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
905 priv->bytesperline = priv->width * 2;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
906 }
3815
622a9ade4517 updated
alex
parents: 3711
diff changeset
907
7318
85897ab199a4 changed message leveles (too many non-sense info messages)
alex
parents: 7317
diff changeset
908 mp_msg(MSGT_TV, MSGL_V, "Picture values:\n");
7532
26cd91676fb6 complex patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
alex
parents: 7472
diff changeset
909 mp_msg(MSGT_TV, MSGL_V, " Depth: %d, Palette: %s (Format: %s)\n", priv->picture.depth,
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
910 PALETTE(priv->picture.palette), vo_format_name(priv->format));
7318
85897ab199a4 changed message leveles (too many non-sense info messages)
alex
parents: 7317
diff changeset
911 mp_msg(MSGT_TV, MSGL_V, " Brightness: %d, Hue: %d, Colour: %d, Contrast: %d\n",
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
912 priv->picture.brightness, priv->picture.hue,
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
913 priv->picture.colour, priv->picture.contrast);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
914
3815
622a9ade4517 updated
alex
parents: 3711
diff changeset
915 if (ioctl(priv->video_fd, VIDIOCSPICT, &priv->picture) == -1)
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
916 {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
917 mp_msg(MSGT_TV, MSGL_ERR, "ioctl set picture failed: %s\n", strerror(errno));
23354
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
918 mp_msg(MSGT_TV, MSGL_ERR, "The 'outfmt' of '%s' is likely not supported by your card\n",
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
919 vo_format_name(priv->format));
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
920 return 0;
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
921 }
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
922
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
923 /* Set capture size */
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
924 win.x = 0;
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
925 win.y = 0;
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
926 win.width = priv->width;
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
927 win.height = priv->height;
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
928 win.chromakey = -1;
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
929 win.flags = 0;
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
930 win.clipcount = 0;
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
931 if (ioctl(priv->video_fd, VIDIOCSWIN, &win) == -1)
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
932 mp_msg(MSGT_TV, MSGL_ERR, "ioctl set window failed: %s\n", strerror(errno));
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
933
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
934 if ( !priv->tv_param->mjpeg )
23354
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
935 {
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
936 /* map grab buffer */
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
937 if (ioctl(priv->video_fd, VIDIOCGMBUF, &priv->mbuf) == -1)
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
938 {
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
939 mp_msg(MSGT_TV, MSGL_ERR, "ioctl get mbuf failed: %s\n", strerror(errno));
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
940 return 0;
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
941 }
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
942
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
943 mp_msg(MSGT_TV, MSGL_V, "mbuf: size=%d, frames=%d\n",
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
944 priv->mbuf.size, priv->mbuf.frames);
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
945 priv->mmap = mmap(0, priv->mbuf.size, PROT_READ|PROT_WRITE,
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
946 MAP_SHARED, priv->video_fd, 0);
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
947 if (priv->mmap == (unsigned char *)-1)
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
948 {
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
949 mp_msg(MSGT_TV, MSGL_ERR, "Unable to map memory for buffers: %s\n", strerror(errno));
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
950 return 0;
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
951 }
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
952 mp_msg(MSGT_TV, MSGL_DBG2, "our buffer: %p\n", priv->mmap);
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
953
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
954 /* num of buffers */
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
955 priv->nbuf = priv->mbuf.frames;
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
956
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
957 /* video buffers */
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
958 priv->buf = calloc(priv->nbuf, sizeof(struct video_mmap));
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
959 if (!priv->buf)
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
960 return 0;
09f0cb23d9c9 make v4l1 driver work properly.
voroshil
parents: 23150
diff changeset
961 memset(priv->buf, 0, priv->nbuf * sizeof(struct video_mmap));
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
962 }
98769cea155c added tv subsystem
alex
parents:
diff changeset
963
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
964 if ( !priv->tv_param->mjpeg )
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
965 {
23149
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
966 priv->nbuf = priv->mbuf.frames;
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
967 for (i=0; i < priv->nbuf; i++)
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
968 {
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
969 priv->buf[i].format = priv->picture.palette;
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
970 priv->buf[i].frame = i;
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
971 priv->buf[i].width = priv->width;
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
972 priv->buf[i].height = priv->height;
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
973 mp_msg(MSGT_TV, MSGL_DBG2, "buffer: %d => %p\n", i, &priv->buf[i]);
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
974 }
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
975 }
2837
c63562f5f56f tuning worx (can set frequency)
alex
parents: 2830
diff changeset
976
2931
bce9c945b29c tv interface update
alex
parents: 2841
diff changeset
977 #if 0
bce9c945b29c tv interface update
alex
parents: 2841
diff changeset
978 {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
979 struct video_play_mode pmode;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
980
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
981 pmode.mode = VID_PLAY_NORMAL;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
982 pmode.p1 = 1;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
983 pmode.p2 = 0;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
984 if (ioctl(priv->video_fd, VIDIOCSPLAYMODE, &pmode) == -1)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
985 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
986 mp_msg(MSGT_TV, MSGL_ERR, "ioctl set play mode failed: %s\n", strerror(errno));
23149
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
987 // return(0);
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
988 }
2931
bce9c945b29c tv interface update
alex
parents: 2841
diff changeset
989 }
bce9c945b29c tv interface update
alex
parents: 2841
diff changeset
990 #endif
2837
c63562f5f56f tuning worx (can set frequency)
alex
parents: 2830
diff changeset
991
c63562f5f56f tuning worx (can set frequency)
alex
parents: 2830
diff changeset
992 #if 0
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
993 // initialize video capture
3815
622a9ade4517 updated
alex
parents: 3711
diff changeset
994 if (ioctl(priv->video_fd, VIDIOCCAPTURE, &one) == -1)
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
995 {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
996 mp_msg(MSGT_TV, MSGL_ERR, "FATAL: ioctl ccapture failed: %s\n", strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
997 return(0);
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
998 }
2837
c63562f5f56f tuning worx (can set frequency)
alex
parents: 2830
diff changeset
999 #endif
c63562f5f56f tuning worx (can set frequency)
alex
parents: 2830
diff changeset
1000
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1001 /* setup audio parameters */
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
1002 if (!priv->tv_param->noaudio) {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1003 setup_audio_buffer_sizes(priv);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1004 bytes_per_sample = priv->audio_in.bytes_per_sample;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1005 priv->audio_skew_buffer = calloc(priv->aud_skew_cnt, sizeof(long long));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1006 if (!priv->audio_skew_buffer) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1007 mp_msg(MSGT_TV, MSGL_ERR, "cannot allocate skew buffer: %s\n", strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1008 return 0;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1009 }
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1010
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1011 priv->audio_ringbuffer = calloc(priv->audio_in.blocksize, priv->audio_buffer_size);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1012 if (!priv->audio_ringbuffer) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1013 mp_msg(MSGT_TV, MSGL_ERR, "cannot allocate audio buffer: %s\n", strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1014 return 0;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1015 }
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1016
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1017 priv->audio_secs_per_block = (double)priv->audio_in.blocksize/(priv->audio_in.samplerate
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1018 *priv->audio_in.channels
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1019 *bytes_per_sample);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1020 priv->audio_head = 0;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1021 priv->audio_tail = 0;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1022 priv->audio_cnt = 0;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1023 priv->audio_drop = 0;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1024 priv->audio_skew = 0;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1025 priv->audio_skew_total = 0;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1026 priv->audio_recv_blocks_total = 0;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1027 priv->audio_sent_blocks_total = 0;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1028 }
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1029
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1030 /* setup video parameters */
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1031 if (priv->immediate_mode) {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1032 priv->video_buffer_size_max = VID_BUF_SIZE_IMMEDIATE;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1033 } else {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1034 priv->video_buffer_size_max = get_capture_buffer_size(priv);
6553
d000112bd06e Paul Ortyl's patch - tv4l timestamps (not so precise :()
alex
parents: 6529
diff changeset
1035 }
8417
15e3d9c2c0ac allocate the video buffer on the fly, instead of one big chunk at startup
henry
parents: 8335
diff changeset
1036 priv->video_buffer_size_current = 0;
6553
d000112bd06e Paul Ortyl's patch - tv4l timestamps (not so precise :()
alex
parents: 6529
diff changeset
1037
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
1038 if (!priv->tv_param->noaudio) {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1039 if (priv->video_buffer_size_max < 3.0*priv->fps*priv->audio_secs_per_block) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1040 mp_msg(MSGT_TV, MSGL_ERR, "Video buffer shorter than 3 times audio frame duration.\n"
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1041 "You will probably experience heavy framedrops.\n");
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1042 }
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1043 }
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1044
8417
15e3d9c2c0ac allocate the video buffer on the fly, instead of one big chunk at startup
henry
parents: 8335
diff changeset
1045 mp_msg(MSGT_TV, MSGL_V, "Using a ring buffer for maximum %d frames, %d MB total size.\n",
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1046 priv->video_buffer_size_max,
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1047 priv->video_buffer_size_max*priv->height*priv->bytesperline/(1024*1024));
7532
26cd91676fb6 complex patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
alex
parents: 7472
diff changeset
1048
18885
5c8acc972551 rm unnecesary casts from void* - part 4
reynaldo
parents: 18589
diff changeset
1049 priv->video_ringbuffer = calloc(priv->video_buffer_size_max, sizeof(unsigned char*));
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1050 if (!priv->video_ringbuffer) {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1051 mp_msg(MSGT_TV, MSGL_ERR, "cannot allocate video buffer: %s\n", strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1052 return 0;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1053 }
8417
15e3d9c2c0ac allocate the video buffer on the fly, instead of one big chunk at startup
henry
parents: 8335
diff changeset
1054 for (i = 0; i < priv->video_buffer_size_max; i++)
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1055 priv->video_ringbuffer[i] = NULL;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1056
18885
5c8acc972551 rm unnecesary casts from void* - part 4
reynaldo
parents: 18589
diff changeset
1057 priv->video_timebuffer = calloc(priv->video_buffer_size_max, sizeof(long long));
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1058 if (!priv->video_timebuffer) {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1059 mp_msg(MSGT_TV, MSGL_ERR, "cannot allocate time buffer: %s\n", strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1060 return 0;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1061 }
18885
5c8acc972551 rm unnecesary casts from void* - part 4
reynaldo
parents: 18589
diff changeset
1062 priv->video_avg_buffer = malloc(sizeof(long long) * VIDEO_AVG_BUFFER_SIZE);
9607
e2eaeb3cb089 correct small framerate fluctuations directly in the capture thread
henry
parents: 9216
diff changeset
1063 if (!priv->video_avg_buffer) {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1064 mp_msg(MSGT_TV, MSGL_ERR, "cannot allocate period buffer: %s\n", strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1065 return 0;
9607
e2eaeb3cb089 correct small framerate fluctuations directly in the capture thread
henry
parents: 9216
diff changeset
1066 }
e2eaeb3cb089 correct small framerate fluctuations directly in the capture thread
henry
parents: 9216
diff changeset
1067 priv->video_interval_sum = (1e6/priv->fps)*VIDEO_AVG_BUFFER_SIZE;
e2eaeb3cb089 correct small framerate fluctuations directly in the capture thread
henry
parents: 9216
diff changeset
1068 for (i = 0; i < VIDEO_AVG_BUFFER_SIZE; i++) {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1069 priv->video_avg_buffer[i] = 1e6/priv->fps;
9607
e2eaeb3cb089 correct small framerate fluctuations directly in the capture thread
henry
parents: 9216
diff changeset
1070 }
e2eaeb3cb089 correct small framerate fluctuations directly in the capture thread
henry
parents: 9216
diff changeset
1071
e2eaeb3cb089 correct small framerate fluctuations directly in the capture thread
henry
parents: 9216
diff changeset
1072 priv->video_avg_ptr = 0;
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1073
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1074 priv->video_head = 0;
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1075 priv->video_tail = 0;
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1076 priv->video_cnt = 0;
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1077 priv->first = 1;
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1078
7532
26cd91676fb6 complex patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
alex
parents: 7472
diff changeset
1079 if (priv->capability.audios) {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1080 /* enable audio */
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
1081 if (priv->tv_param->volume >= 0)
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
1082 priv->audio[priv->audio_id].volume = priv->tv_param->volume;
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
1083 if (priv->tv_param->bass >= 0)
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
1084 priv->audio[priv->audio_id].bass = priv->tv_param->bass;
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
1085 if (priv->tv_param->treble >= 0)
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
1086 priv->audio[priv->audio_id].treble = priv->tv_param->treble;
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
1087 if (priv->tv_param->balance >= 0)
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
1088 priv->audio[priv->audio_id].balance = priv->tv_param->balance;
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1089 priv->audio[priv->audio_id].flags &= ~VIDEO_AUDIO_MUTE;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1090 mp_msg(MSGT_TV, MSGL_V, "Enabling tv audio. Requested setup is:\n");
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1091 mp_msg(MSGT_TV, MSGL_V, "id=%d vol=%d bass=%d treble=%d balance=%d mode=%s",
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1092 priv->audio_id,
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1093 priv->audio[priv->audio_id].volume, priv->audio[priv->audio_id].bass, priv->audio[priv->audio_id].treble,
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1094 priv->audio[priv->audio_id].balance, audio_mode2name(priv->audio[priv->audio_id].mode));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1095 mp_msg(MSGT_TV, MSGL_V, " chan=%d\n", priv->audio_channels[priv->audio_id]);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1096 ioctl(priv->video_fd, VIDIOCSAUDIO, &priv->audio[priv->audio_id]);
7532
26cd91676fb6 complex patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
alex
parents: 7472
diff changeset
1097 }
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1098
23926
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1099 #ifdef HAVE_TV_TELETEXT
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1100 /* start vbi thread */
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1101 if(priv->priv_vbi){
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1102 priv->vbi_shutdown = 0;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1103 pthread_create(&priv->vbi_grabber_thread, NULL, vbi_grabber, priv);
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1104 }
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1105 #endif
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1106
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1107 /* launch capture threads */
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1108 priv->shutdown = 0;
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
1109 if (!priv->tv_param->noaudio) {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1110 pthread_mutex_init(&priv->audio_starter, NULL);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1111 pthread_mutex_init(&priv->skew_mutex, NULL);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1112 pthread_mutex_lock(&priv->audio_starter);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1113 pthread_create(&priv->audio_grabber_thread, NULL, audio_grabber, priv);
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1114 }
8417
15e3d9c2c0ac allocate the video buffer on the fly, instead of one big chunk at startup
henry
parents: 8335
diff changeset
1115 pthread_mutex_init(&priv->video_buffer_mutex, NULL);
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1116 /* we'll launch the video capture later, when a first request for a frame arrives */
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1117
2837
c63562f5f56f tuning worx (can set frequency)
alex
parents: 2830
diff changeset
1118 return(1);
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
1119 }
98769cea155c added tv subsystem
alex
parents:
diff changeset
1120
9663
596ad944a65e color equalizer for tv input
henry
parents: 9634
diff changeset
1121
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
1122 static int control(priv_t *priv, int cmd, void *arg)
98769cea155c added tv subsystem
alex
parents:
diff changeset
1123 {
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1124 mp_msg(MSGT_TV, MSGL_DBG2, "\ndebug: control(priv=%p, cmd=%d, arg=%p)\n",
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1125 priv, cmd, arg);
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
1126 switch(cmd)
98769cea155c added tv subsystem
alex
parents:
diff changeset
1127 {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1128 /* ========== GENERIC controls =========== */
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1129 case TVI_CONTROL_IS_VIDEO:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1130 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1131 if (priv->capability.type & VID_TYPE_CAPTURE)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1132 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1133 return(TVI_CONTROL_FALSE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1134 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1135 case TVI_CONTROL_IS_AUDIO:
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
1136 if (priv->tv_param->force_audio) return(TVI_CONTROL_TRUE);
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1137 if (priv->channels[priv->act_channel].flags & VIDEO_VC_AUDIO)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1138 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1139 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1140 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1141 return(TVI_CONTROL_FALSE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1142 case TVI_CONTROL_IS_TUNER:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1143 {
23149
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
1144 // if (priv->capability.type & VID_TYPE_TUNER)
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1145 if (priv->channels[priv->act_channel].flags & VIDEO_VC_TUNER)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1146 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1147 return(TVI_CONTROL_FALSE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1148 }
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
1149
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1150 /* ========== VIDEO controls =========== */
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1151 case TVI_CONTROL_VID_GET_FORMAT:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1152 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1153 int output_fmt = -1;
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
1154
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1155 output_fmt = priv->format;
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
1156 if ( priv->tv_param->mjpeg )
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1157 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1158 mp_msg(MSGT_TV, MSGL_INFO, " MJP: setting sh_video->format to mjpg\n");
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1159 output_fmt = 0x47504a4d;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1160 output_fmt = 0x67706a6d;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1161 *(int *)arg = output_fmt;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1162 mp_msg(MSGT_TV, MSGL_V, "Output format: %s\n", "mjpg");
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1163 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1164 else
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1165 {
23149
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
1166 *(int *)arg = output_fmt;
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
1167 mp_msg(MSGT_TV, MSGL_V, "Output format: %s\n", vo_format_name(output_fmt));
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1168 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1169 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1170 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1171 case TVI_CONTROL_VID_SET_FORMAT:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1172 priv->format = *(int *)arg;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1173 // !HACK! v4l uses BGR format instead of RGB
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1174 // and we have to correct this. Fortunately,
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1175 // tv.c reads later the format back so we
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1176 // can persuade it to use what we want.
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1177 if (IMGFMT_IS_RGB(priv->format)) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1178 priv->format &= ~IMGFMT_RGB_MASK;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1179 priv->format |= IMGFMT_BGR;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1180 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1181 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1182 case TVI_CONTROL_VID_GET_PLANES:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1183 *(int *)arg = 1; /* FIXME, also not needed at this time */
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1184 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1185 case TVI_CONTROL_VID_GET_BITS:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1186 *(int *)arg = palette2depth(format2palette(priv->format));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1187 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1188 case TVI_CONTROL_VID_GET_WIDTH:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1189 *(int *)arg = priv->width;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1190 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1191 case TVI_CONTROL_VID_CHK_WIDTH:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1192 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1193 int req_width = *(int *)arg;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1194
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1195 mp_msg(MSGT_TV, MSGL_V, "Requested width: %d\n", req_width);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1196 if ((req_width >= priv->capability.minwidth) &&
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1197 (req_width <= priv->capability.maxwidth))
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1198 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1199 return(TVI_CONTROL_FALSE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1200 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1201 case TVI_CONTROL_VID_SET_WIDTH:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1202 priv->width = *(int *)arg;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1203 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1204 case TVI_CONTROL_VID_GET_HEIGHT:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1205 *(int *)arg = priv->height;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1206 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1207 case TVI_CONTROL_VID_CHK_HEIGHT:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1208 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1209 int req_height = *(int *)arg;
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
1210
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1211 mp_msg(MSGT_TV, MSGL_V, "Requested height: %d\n", req_height);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1212 if ((req_height >= priv->capability.minheight) &&
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1213 (req_height <= priv->capability.maxheight))
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1214 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1215 return(TVI_CONTROL_FALSE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1216 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1217 case TVI_CONTROL_VID_SET_HEIGHT:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1218 priv->height = *(int *)arg;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1219 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1220 case TVI_CONTROL_VID_GET_PICTURE:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1221 if (ioctl(priv->video_fd, VIDIOCGPICT, &priv->picture) == -1)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1222 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1223 mp_msg(MSGT_TV, MSGL_ERR, "ioctl get picture failed: %s\n", strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1224 return(TVI_CONTROL_FALSE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1225 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1226 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1227 case TVI_CONTROL_VID_SET_PICTURE:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1228 if (ioctl(priv->video_fd, VIDIOCSPICT, &priv->picture) == -1)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1229 {
23150
adb59d6f5b8b typo fix.
voroshil
parents: 23149
diff changeset
1230 mp_msg(MSGT_TV, MSGL_ERR, "ioctl set picture failed: %s\n", strerror(errno));
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1231 return(TVI_CONTROL_FALSE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1232 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1233 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1234 case TVI_CONTROL_VID_SET_BRIGHTNESS:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1235 priv->picture.brightness = (327*(*(int *)arg+100)) + 68;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1236 return control(priv, TVI_CONTROL_VID_SET_PICTURE, 0);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1237 case TVI_CONTROL_VID_SET_HUE:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1238 priv->picture.hue = (327*(*(int *)arg+100)) + 68;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1239 return control(priv, TVI_CONTROL_VID_SET_PICTURE, 0);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1240 case TVI_CONTROL_VID_SET_SATURATION:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1241 priv->picture.colour = (327*(*(int *)arg+100)) + 68;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1242 return control(priv, TVI_CONTROL_VID_SET_PICTURE, 0);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1243 case TVI_CONTROL_VID_SET_CONTRAST:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1244 priv->picture.contrast = (327*(*(int *)arg+100)) + 68;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1245 return control(priv, TVI_CONTROL_VID_SET_PICTURE, 0);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1246 case TVI_CONTROL_VID_GET_BRIGHTNESS:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1247 if(!control(priv, TVI_CONTROL_VID_GET_PICTURE, 0)) return 0;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1248 *(int*)arg = ((int)priv->picture.brightness-68)/327-100;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1249 return 1;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1250 case TVI_CONTROL_VID_GET_HUE:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1251 if(!control(priv, TVI_CONTROL_VID_GET_PICTURE, 0)) return 0;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1252 *(int*)arg = ((int)priv->picture.hue-68)/327-100;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1253 return 1;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1254 case TVI_CONTROL_VID_GET_SATURATION:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1255 if(!control(priv, TVI_CONTROL_VID_GET_PICTURE, 0)) return 0;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1256 *(int*)arg = ((int)priv->picture.colour-68)/327-100;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1257 return 1;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1258 case TVI_CONTROL_VID_GET_CONTRAST:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1259 if(!control(priv, TVI_CONTROL_VID_GET_PICTURE, 0)) return 0;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1260 *(int*)arg = ((int)priv->picture.contrast-68)/327-100;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1261 return 1;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1262 case TVI_CONTROL_VID_GET_FPS:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1263 *(float *)arg=priv->fps;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1264 return(TVI_CONTROL_TRUE);
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1265
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1266 /* ========== TUNER controls =========== */
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1267 case TVI_CONTROL_TUN_GET_FREQ:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1268 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1269 unsigned long freq;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1270
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1271 if (ioctl(priv->video_fd, VIDIOCGFREQ, &freq) == -1)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1272 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1273 mp_msg(MSGT_TV, MSGL_ERR, "ioctl get freq failed: %s\n", strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1274 return(TVI_CONTROL_FALSE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1275 }
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1276
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1277 /* tuner uses khz not mhz ! */
23149
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
1278 // if (priv->tuner.flags & VIDEO_TUNER_LOW)
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
1279 // freq /= 1000;
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1280 *(unsigned long *)arg = freq;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1281 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1282 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1283 case TVI_CONTROL_TUN_SET_FREQ:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1284 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1285 /* argument is in MHz ! */
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1286 unsigned long freq = *(unsigned long *)arg;
7532
26cd91676fb6 complex patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
alex
parents: 7472
diff changeset
1287
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1288 if (priv->capability.audios) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1289 priv->audio[priv->audio_id].flags |= VIDEO_AUDIO_MUTE;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1290 ioctl(priv->video_fd, VIDIOCSAUDIO, &priv->audio[priv->audio_id]);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1291 }
8485
4e32317f08be don't give up when set_tuner fails; more zero div sanity checks
henry
parents: 8477
diff changeset
1292
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1293 mp_msg(MSGT_TV, MSGL_V, "requested frequency: %.3f\n", (float)freq/16);
7532
26cd91676fb6 complex patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
alex
parents: 7472
diff changeset
1294
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1295 /* tuner uses khz not mhz ! */
23149
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
1296 // if (priv->tuner.flags & VIDEO_TUNER_LOW)
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
1297 // freq *= 1000;
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
1298 // mp_msg(MSGT_TV, MSGL_V, " requesting from driver: freq=%.3f\n", (float)freq/16);
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1299 if (ioctl(priv->video_fd, VIDIOCSFREQ, &freq) == -1)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1300 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1301 mp_msg(MSGT_TV, MSGL_ERR, "ioctl set freq failed: %s\n", strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1302 return(TVI_CONTROL_FALSE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1303 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1304 usleep(100000); // wait to suppress noise during switching
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
1305
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1306 if (priv->capability.audios) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1307 priv->audio[priv->audio_id].flags &= ~VIDEO_AUDIO_MUTE;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1308 ioctl(priv->video_fd, VIDIOCSAUDIO, &priv->audio[priv->audio_id]);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1309 }
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1310
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1311 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1312 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1313 case TVI_CONTROL_TUN_GET_TUNER:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1314 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1315 if (ioctl(priv->video_fd, VIDIOCGTUNER, &priv->tuner) == -1)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1316 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1317 mp_msg(MSGT_TV, MSGL_ERR, "ioctl get tuner failed: %s\n", strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1318 return(TVI_CONTROL_FALSE);
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1319 }
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1320
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1321 mp_msg(MSGT_TV, MSGL_V, "Tuner (%s) range: %lu -> %lu\n", priv->tuner.name,
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1322 priv->tuner.rangelow, priv->tuner.rangehigh);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1323 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1324 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1325 case TVI_CONTROL_TUN_SET_TUNER:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1326 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1327 if (ioctl(priv->video_fd, VIDIOCSTUNER, &priv->tuner) == -1)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1328 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1329 mp_msg(MSGT_TV, MSGL_ERR, "ioctl set tuner failed: %s\n", strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1330 return(TVI_CONTROL_FALSE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1331 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1332 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1333 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1334 case TVI_CONTROL_TUN_SET_NORM:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1335 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1336 int req_mode = *(int *)arg;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1337
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1338 if ((req_mode != TV_NORM_PAL) && (req_mode != TV_NORM_NTSC) && (req_mode != TV_NORM_SECAM)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1339 && (req_mode != TV_NORM_PALNC) && (req_mode != TV_NORM_PALM) && (req_mode != TV_NORM_PALN)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1340 && (req_mode != TV_NORM_NTSCJP)) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1341 mp_msg(MSGT_TV, MSGL_ERR, "Unknown norm!\n");
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1342 return(TVI_CONTROL_FALSE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1343 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1344
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1345 if (priv->channels[priv->act_channel].flags & VIDEO_VC_TUNER) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1346 int prev_mode;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1347
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1348 control(priv, TVI_CONTROL_TUN_GET_TUNER, 0);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1349 if (((req_mode == TV_NORM_PAL
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1350 || req_mode == TV_NORM_PALNC
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1351 || req_mode == TV_NORM_PALN) && !(priv->tuner.flags & VIDEO_TUNER_PAL)) ||
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1352 ((req_mode == TV_NORM_NTSC
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1353 || req_mode == TV_NORM_NTSCJP
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1354 || req_mode == TV_NORM_PALM) && !(priv->tuner.flags & VIDEO_TUNER_NTSC)) ||
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1355 ((req_mode == TV_NORM_SECAM) && !(priv->tuner.flags & VIDEO_TUNER_SECAM)))
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1356 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1357 mp_msg(MSGT_TV, MSGL_ERR, "Tuner isn't capable to set norm!\n");
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1358 return(TVI_CONTROL_FALSE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1359 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1360
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1361 prev_mode = priv->tuner.mode;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1362
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1363 switch(req_mode) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1364 case TV_NORM_PAL:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1365 case TV_NORM_PALNC:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1366 case TV_NORM_PALN:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1367 priv->tuner.mode = VIDEO_MODE_PAL;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1368 break;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1369 case TV_NORM_NTSC:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1370 case TV_NORM_NTSCJP:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1371 case TV_NORM_PALM:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1372 priv->tuner.mode = VIDEO_MODE_NTSC;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1373 break;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1374 case TV_NORM_SECAM:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1375 priv->tuner.mode = VIDEO_MODE_SECAM;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1376 break;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1377 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1378
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1379 if (control(priv, TVI_CONTROL_TUN_SET_TUNER, &priv->tuner) != TVI_CONTROL_TRUE) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1380 // norm setting failed, but maybe it's only because it's fixed
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1381 if (priv->tuner.mode != prev_mode) return(TVI_CONTROL_FALSE); // no it really failed
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1382 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1383
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1384 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1385
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1386 switch(req_mode) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1387 case TV_NORM_PAL:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1388 priv->channels[priv->act_channel].norm = VIDEO_MODE_PAL;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1389 break;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1390 case TV_NORM_NTSC:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1391 priv->channels[priv->act_channel].norm = VIDEO_MODE_NTSC;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1392 break;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1393 case TV_NORM_SECAM:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1394 priv->channels[priv->act_channel].norm = VIDEO_MODE_SECAM;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1395 break;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1396 case TV_NORM_PALNC:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1397 priv->channels[priv->act_channel].norm = 3;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1398 break;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1399 case TV_NORM_PALM:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1400 priv->channels[priv->act_channel].norm = 4;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1401 break;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1402 case TV_NORM_PALN:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1403 priv->channels[priv->act_channel].norm = 5;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1404 break;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1405 case TV_NORM_NTSCJP:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1406 priv->channels[priv->act_channel].norm = 6;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1407 break;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1408 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1409 if (ioctl(priv->video_fd, VIDIOCSCHAN, &priv->channels[priv->act_channel]) == -1)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1410 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1411 mp_msg(MSGT_TV, MSGL_ERR, "ioctl set chan failed: %s\n", strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1412 return(TVI_CONTROL_FALSE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1413 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1414
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1415 if (ioctl(priv->video_fd, VIDIOCGCAP, &priv->capability) == -1) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1416 mp_msg(MSGT_TV, MSGL_ERR, "ioctl get capabilites failed: %s\n", strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1417 return(TVI_CONTROL_FALSE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1418 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1419
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1420 if(req_mode == TV_NORM_PAL || req_mode == TV_NORM_SECAM || req_mode == TV_NORM_PALN || req_mode == TV_NORM_PALNC) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1421 priv->fps = PAL_FPS;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1422 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1423
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1424 if(req_mode == TV_NORM_NTSC || req_mode == TV_NORM_NTSCJP || req_mode == TV_NORM_PALM) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1425 priv->fps = NTSC_FPS;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1426 }
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1427
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1428 if(priv->height > priv->capability.maxheight) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1429 priv->height = priv->capability.maxheight;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1430 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1431
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1432 if(priv->width > priv->capability.maxwidth) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1433 priv->width = priv->capability.maxwidth;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1434 }
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1435
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1436 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1437 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1438 case TVI_CONTROL_TUN_GET_NORM:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1439 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1440 *(int *)arg = priv->tuner.mode;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1441
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1442 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1443 }
24105
9e71e0345c35 Automatic TV channels scanning ability for MPlayer.
voroshil
parents: 23926
diff changeset
1444 case TVI_CONTROL_TUN_GET_SIGNAL:
9e71e0345c35 Automatic TV channels scanning ability for MPlayer.
voroshil
parents: 23926
diff changeset
1445 {
9e71e0345c35 Automatic TV channels scanning ability for MPlayer.
voroshil
parents: 23926
diff changeset
1446 if (ioctl(priv->video_fd, VIDIOCGTUNER, &priv->tuner) == -1)
9e71e0345c35 Automatic TV channels scanning ability for MPlayer.
voroshil
parents: 23926
diff changeset
1447 {
9e71e0345c35 Automatic TV channels scanning ability for MPlayer.
voroshil
parents: 23926
diff changeset
1448 mp_msg(MSGT_TV, MSGL_ERR, "ioctl get tuner failed: %s\n", strerror(errno));
9e71e0345c35 Automatic TV channels scanning ability for MPlayer.
voroshil
parents: 23926
diff changeset
1449 return(TVI_CONTROL_FALSE);
9e71e0345c35 Automatic TV channels scanning ability for MPlayer.
voroshil
parents: 23926
diff changeset
1450 }
9e71e0345c35 Automatic TV channels scanning ability for MPlayer.
voroshil
parents: 23926
diff changeset
1451 *(int*)arg=100*(priv->tuner.signal>>8)/255;
9e71e0345c35 Automatic TV channels scanning ability for MPlayer.
voroshil
parents: 23926
diff changeset
1452 return(TVI_CONTROL_TRUE);
9e71e0345c35 Automatic TV channels scanning ability for MPlayer.
voroshil
parents: 23926
diff changeset
1453 }
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
1454
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1455 /* ========== AUDIO controls =========== */
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1456 case TVI_CONTROL_AUD_GET_FORMAT:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1457 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1458 *(int *)arg = AF_FORMAT_S16_LE;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1459 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1460 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1461 case TVI_CONTROL_AUD_GET_CHANNELS:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1462 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1463 *(int *)arg = priv->audio_in.channels;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1464 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1465 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1466 case TVI_CONTROL_AUD_GET_SAMPLERATE:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1467 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1468 *(int *)arg = priv->audio_in.samplerate;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1469 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1470 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1471 case TVI_CONTROL_AUD_GET_SAMPLESIZE:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1472 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1473 *(int *)arg = priv->audio_in.bytes_per_sample;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1474 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1475 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1476 case TVI_CONTROL_AUD_SET_SAMPLERATE:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1477 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1478 if (audio_in_set_samplerate(&priv->audio_in, *(int *)arg) < 0) return TVI_CONTROL_FALSE;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1479 setup_audio_buffer_sizes(priv);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1480 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1481 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1482 /* ========== SPECIFIC controls =========== */
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1483 case TVI_CONTROL_SPC_GET_INPUT:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1484 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1485 int req_chan = *(int *)arg;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1486 int i;
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
1487
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1488 for (i = 0; i < priv->capability.channels; i++)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1489 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1490 if (priv->channels[i].channel == req_chan)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1491 break;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1492 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1493
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1494 priv->act_channel = i;
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
1495
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1496 if (ioctl(priv->video_fd, VIDIOCGCHAN, &priv->channels[i]) == -1)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1497 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1498 mp_msg(MSGT_TV, MSGL_ERR, "ioctl get channel failed: %s\n", strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1499 return(TVI_CONTROL_FALSE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1500 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1501 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1502 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1503
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1504 case TVI_CONTROL_SPC_SET_INPUT:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1505 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1506 struct video_channel chan;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1507 int req_chan = *(int *)arg;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1508 int i;
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
1509
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1510 if (req_chan >= priv->capability.channels)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1511 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1512 mp_msg(MSGT_TV, MSGL_ERR, "Invalid input requested: %d, valid: 0-%d\n",
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1513 req_chan, priv->capability.channels - 1);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1514 return(TVI_CONTROL_FALSE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1515 }
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
1516
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1517 for (i = 0; i < priv->capability.channels; i++)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1518 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1519 if (priv->channels[i].channel == req_chan)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1520 chan = priv->channels[i];
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1521 }
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
1522
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1523 if (ioctl(priv->video_fd, VIDIOCSCHAN, &chan) == -1)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1524 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1525 mp_msg(MSGT_TV, MSGL_ERR, "ioctl set chan failed: %s\n", strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1526 return(TVI_CONTROL_FALSE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1527 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1528 mp_msg(MSGT_TV, MSGL_INFO, "Using input '%s'\n", chan.name);
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
1529
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1530 priv->act_channel = i;
2841
7ff47d6ae6e9 updated audio and tuner checking
alex
parents: 2837
diff changeset
1531
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1532 /* update tuner state */
23149
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
1533 // if (priv->capability.type & VID_TYPE_TUNER)
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1534 if (priv->channels[priv->act_channel].flags & VIDEO_VC_TUNER)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1535 control(priv, TVI_CONTROL_TUN_GET_TUNER, 0);
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
1536
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1537 /* update local channel list */
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1538 control(priv, TVI_CONTROL_SPC_GET_INPUT, &req_chan);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1539 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1540 case TVI_CONTROL_IMMEDIATE:
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1541 priv->immediate_mode = 1;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1542 return(TVI_CONTROL_TRUE);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1543 }
23926
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1544 #ifdef HAVE_TV_TELETEXT
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1545 case TVI_CONTROL_VBI_INIT:
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1546 {
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1547 void* ptr;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1548 tt_stream_props tsp;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1549
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1550 if (vbi_init(priv,*(char**)arg)!=TVI_CONTROL_TRUE)
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1551 return TVI_CONTROL_FALSE;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1552 if(vbi_get_props(priv,&tsp)==TVI_CONTROL_TRUE)
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1553 {
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1554 ptr=&tsp;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1555 if(teletext_control(NULL,TV_VBI_CONTROL_START,&ptr)==TVI_CONTROL_TRUE)
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1556 priv->priv_vbi=ptr;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1557 else
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1558 priv->priv_vbi=NULL;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1559 }
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1560 return TVI_CONTROL_TRUE;
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1561 }
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1562 default:
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1563 return teletext_control(priv->priv_vbi,cmd,arg);
ec8ca7b30d0f Teletext support for V4Lv1
voroshil
parents: 23925
diff changeset
1564 #endif
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
1565 }
98769cea155c added tv subsystem
alex
parents:
diff changeset
1566
98769cea155c added tv subsystem
alex
parents:
diff changeset
1567 return(TVI_CONTROL_UNKNOWN);
98769cea155c added tv subsystem
alex
parents:
diff changeset
1568 }
98769cea155c added tv subsystem
alex
parents:
diff changeset
1569
23422
e7b4c913dc31 New "automute" tv:// option.
voroshil
parents: 23354
diff changeset
1570 static int set_mute(priv_t* priv,int value)
e7b4c913dc31 New "automute" tv:// option.
voroshil
parents: 23354
diff changeset
1571 {
e7b4c913dc31 New "automute" tv:// option.
voroshil
parents: 23354
diff changeset
1572 if (!priv->capability.audios) {
e7b4c913dc31 New "automute" tv:// option.
voroshil
parents: 23354
diff changeset
1573 return 0;
e7b4c913dc31 New "automute" tv:// option.
voroshil
parents: 23354
diff changeset
1574
e7b4c913dc31 New "automute" tv:// option.
voroshil
parents: 23354
diff changeset
1575 if(value)
e7b4c913dc31 New "automute" tv:// option.
voroshil
parents: 23354
diff changeset
1576 priv->audio[priv->audio_id].flags |=VIDEO_AUDIO_MUTE;
e7b4c913dc31 New "automute" tv:// option.
voroshil
parents: 23354
diff changeset
1577 else
e7b4c913dc31 New "automute" tv:// option.
voroshil
parents: 23354
diff changeset
1578 priv->audio[priv->audio_id].flags &= ~VIDEO_AUDIO_MUTE;
e7b4c913dc31 New "automute" tv:// option.
voroshil
parents: 23354
diff changeset
1579 }
e7b4c913dc31 New "automute" tv:// option.
voroshil
parents: 23354
diff changeset
1580 if(ioctl(priv->video_fd, VIDIOCSAUDIO, &priv->audio[priv->audio_id])<0)
e7b4c913dc31 New "automute" tv:// option.
voroshil
parents: 23354
diff changeset
1581 return 0;
e7b4c913dc31 New "automute" tv:// option.
voroshil
parents: 23354
diff changeset
1582 return 1;
e7b4c913dc31 New "automute" tv:// option.
voroshil
parents: 23354
diff changeset
1583 }
e7b4c913dc31 New "automute" tv:// option.
voroshil
parents: 23354
diff changeset
1584
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1585 // copies a video frame
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1586 // for YV12 swaps the 2nd and 3rd plane
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1587 static inline void copy_frame(priv_t *priv, unsigned char *dest, unsigned char *source)
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
1588 {
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
1589 if(priv->tv_param->automute>0){
23422
e7b4c913dc31 New "automute" tv:// option.
voroshil
parents: 23354
diff changeset
1590 if (ioctl(priv->video_fd, VIDIOCGTUNER, &priv->tuner) >= 0) {
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
1591 if(priv->tv_param->automute<<8>priv->tuner.signal){
23422
e7b4c913dc31 New "automute" tv:// option.
voroshil
parents: 23354
diff changeset
1592 fill_blank_frame(dest,priv->bytesperline * priv->height,priv->format);
e7b4c913dc31 New "automute" tv:// option.
voroshil
parents: 23354
diff changeset
1593 set_mute(priv,1);
e7b4c913dc31 New "automute" tv:// option.
voroshil
parents: 23354
diff changeset
1594 return;
e7b4c913dc31 New "automute" tv:// option.
voroshil
parents: 23354
diff changeset
1595 }
e7b4c913dc31 New "automute" tv:// option.
voroshil
parents: 23354
diff changeset
1596 }
e7b4c913dc31 New "automute" tv:// option.
voroshil
parents: 23354
diff changeset
1597 set_mute(priv,0);
e7b4c913dc31 New "automute" tv:// option.
voroshil
parents: 23354
diff changeset
1598 }
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1599 // YV12 uses VIDEO_PALETTE_YUV420P, but the planes are swapped
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1600 if (priv->format == IMGFMT_YV12) {
23457
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 23422
diff changeset
1601 fast_memcpy(dest, source, priv->width * priv->height);
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 23422
diff changeset
1602 fast_memcpy(dest+priv->width * priv->height*5/4, source+priv->width * priv->height, priv->width * priv->height/4);
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 23422
diff changeset
1603 fast_memcpy(dest+priv->width * priv->height, source+priv->width * priv->height*5/4, priv->width * priv->height/4);
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1604 return;
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
1605 }
3711
5fa7eb90e2ec fixed video syncing
alex
parents: 3703
diff changeset
1606
23724
72cff1657307 Remove unnecessary flip for RGB in v4l1.
voroshil
parents: 23457
diff changeset
1607 fast_memcpy(dest, source, priv->bytesperline * priv->height);
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1608 }
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1609
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1610 // maximum skew change, in frames
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1611 #define MAX_SKEW_DELTA 0.6
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1612 static void *video_grabber(void *data)
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1613 {
9608
7bc2ed398ccf cleanups and some 10l fixes for previous commit
henry
parents: 9607
diff changeset
1614 #define MAXTOL (priv->nbuf)
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1615 priv_t *priv = (priv_t*)data;
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1616 struct timeval curtime;
8131
6b9a3fceaef9 skew calculations modified to use integers
henry
parents: 8022
diff changeset
1617 long long skew, prev_skew, xskew, interval, prev_interval;
8650
cf1d4f48aecf allow utilization of more v4l buffers, patch by Carsten Schulz <carsten@gnocchi.dialup.fu-berlin.de>
henry
parents: 8627
diff changeset
1618 int frame;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1619 int i;
7803
172ee2b4612f Stop grabbing from v4l when paused by Jindrich Makovicka
alex
parents: 7585
diff changeset
1620 int framecount;
9607
e2eaeb3cb089 correct small framerate fluctuations directly in the capture thread
henry
parents: 9216
diff changeset
1621 int tolerance;
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
1622 unsigned long num;
3711
5fa7eb90e2ec fixed video syncing
alex
parents: 3703
diff changeset
1623
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1624 /* start the capture process */
8650
cf1d4f48aecf allow utilization of more v4l buffers, patch by Carsten Schulz <carsten@gnocchi.dialup.fu-berlin.de>
henry
parents: 8627
diff changeset
1625
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
1626 if ( priv->tv_param->mjpeg )
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1627 {
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
1628 mp_msg(MSGT_TV, MSGL_INFO, " MJP: gonna capture ! \n");
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
1629 for (i=0; i < priv->nbuf; i++) {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1630 num = i;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1631 if (ioctl(priv->video_fd, MJPIOC_QBUF_CAPT, &num) < 0)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1632 mp_msg(MSGT_TV, MSGL_ERR,
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1633 "\n MJP: ioctl MJPIOC_QBUF_CAPT b failed: %s\n", strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1634 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1635 }
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
1636 else
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1637 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1638 for (i=0; i < priv->nbuf; i++) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1639 if (ioctl(priv->video_fd, VIDIOCMCAPTURE, &priv->buf[i]) == -1)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1640 mp_msg(MSGT_TV, MSGL_ERR, "\nioctl mcapture failed: %s\n", strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1641 }
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1642 }
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1643
9608
7bc2ed398ccf cleanups and some 10l fixes for previous commit
henry
parents: 9607
diff changeset
1644 gettimeofday(&curtime, NULL);
7bc2ed398ccf cleanups and some 10l fixes for previous commit
henry
parents: 9607
diff changeset
1645 priv->starttime = (long long)1e6*curtime.tv_sec + curtime.tv_usec;
7bc2ed398ccf cleanups and some 10l fixes for previous commit
henry
parents: 9607
diff changeset
1646 priv->audio_skew_measure_time = 0;
7bc2ed398ccf cleanups and some 10l fixes for previous commit
henry
parents: 9607
diff changeset
1647 pthread_mutex_unlock(&priv->audio_starter);
7bc2ed398ccf cleanups and some 10l fixes for previous commit
henry
parents: 9607
diff changeset
1648 xskew = 0;
7bc2ed398ccf cleanups and some 10l fixes for previous commit
henry
parents: 9607
diff changeset
1649 skew = 0;
7bc2ed398ccf cleanups and some 10l fixes for previous commit
henry
parents: 9607
diff changeset
1650 interval = 0;
7bc2ed398ccf cleanups and some 10l fixes for previous commit
henry
parents: 9607
diff changeset
1651
8131
6b9a3fceaef9 skew calculations modified to use integers
henry
parents: 8022
diff changeset
1652 prev_interval = 0;
6b9a3fceaef9 skew calculations modified to use integers
henry
parents: 8022
diff changeset
1653 prev_skew = 0;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1654
9608
7bc2ed398ccf cleanups and some 10l fixes for previous commit
henry
parents: 9607
diff changeset
1655 tolerance = MAXTOL;
9607
e2eaeb3cb089 correct small framerate fluctuations directly in the capture thread
henry
parents: 9216
diff changeset
1656
7803
172ee2b4612f Stop grabbing from v4l when paused by Jindrich Makovicka
alex
parents: 7585
diff changeset
1657 for (framecount = 0; !priv->shutdown;)
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1658 {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1659 for (i = 0; i < priv->nbuf && !priv->shutdown; i++, framecount++) {
7585
cfd6a99021ac some cleanups for video_grabber() which fix a race condition by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
alex
parents: 7532
diff changeset
1660
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1661 if (priv->immediate_mode) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1662 while (priv->video_cnt == priv->video_buffer_size_max) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1663 usleep(10000);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1664 if (priv->shutdown) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1665 return NULL;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1666 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1667 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1668 }
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1669
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1670 frame = i;
2931
bce9c945b29c tv interface update
alex
parents: 2841
diff changeset
1671
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
1672 if ( priv->tv_param->mjpeg )
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
1673 {
23149
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
1674 while (ioctl(priv->video_fd, MJPIOC_SYNC, &priv->buf[frame].frame) < 0 &&
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
1675 (errno == EAGAIN || errno == EINTR));
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1676 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1677 else
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1678 {
23149
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
1679 while (ioctl(priv->video_fd, VIDIOCSYNC, &priv->buf[frame].frame) < 0 &&
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
1680 (errno == EAGAIN || errno == EINTR));
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1681 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1682 mp_dbg(MSGT_TV, MSGL_DBG3, "\npicture sync failed\n");
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1683
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1684 gettimeofday(&curtime, NULL);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1685 if (!priv->immediate_mode) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1686 interval = (long long)1e6*curtime.tv_sec + curtime.tv_usec - priv->starttime;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1687 } else {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1688 interval = (long long)1e6*framecount/priv->fps;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1689 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1690
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1691 if (!priv->immediate_mode) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1692 long long period, orig_interval;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1693
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1694 if (tolerance == 0) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1695 if (interval - prev_interval == 0) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1696 mp_msg(MSGT_TV, MSGL_V, "\nvideo capture thread: frame delta = 0\n");
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1697 } else if ((interval - prev_interval < (long long)0.85e6/priv->fps)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1698 || (interval - prev_interval > (long long)1.15e6/priv->fps) ) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1699 mp_msg(MSGT_TV, MSGL_V, "\nvideo capture thread: frame delta ~ %.1lf fps\n",
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1700 (double)1e6/(interval - prev_interval));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1701 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1702 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1703
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1704 // correct the rate fluctuations on a small scale
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1705 orig_interval = interval;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1706 period = priv->video_interval_sum/VIDEO_AVG_BUFFER_SIZE;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1707 if (interval - prev_interval > 105*period/100) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1708 if (tolerance > 0) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1709 mp_msg(MSGT_TV, MSGL_DBG3, "correcting timestamp\n");
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1710 interval = prev_interval + priv->video_interval_sum/VIDEO_AVG_BUFFER_SIZE;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1711 tolerance--;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1712 } else {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1713 mp_msg(MSGT_TV, MSGL_DBG3, "bad - frames were dropped\n");
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1714 tolerance = MAXTOL;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1715 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1716 } else {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1717 if (tolerance < MAXTOL) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1718 mp_msg(MSGT_TV, MSGL_DBG3, "fluctuation overcome\n");
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1719 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1720 tolerance = MAXTOL;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1721 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1722
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1723 priv->video_interval_sum -= priv->video_avg_buffer[priv->video_avg_ptr];
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1724 priv->video_avg_buffer[priv->video_avg_ptr++] = orig_interval-prev_interval;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1725 priv->video_interval_sum += orig_interval-prev_interval;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1726 if (priv->video_avg_ptr >= VIDEO_AVG_BUFFER_SIZE) priv->video_avg_ptr = 0;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1727
23149
392f15ad4f6f (cosmetics) more indentation fixes.
voroshil
parents: 23142
diff changeset
1728 // fprintf(stderr, "fps: %lf\n", (double)1e6*VIDEO_AVG_BUFFER_SIZE/priv->video_interval_sum);
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1729
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1730 // interpolate the skew in time
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1731 pthread_mutex_lock(&priv->skew_mutex);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1732 xskew = priv->audio_skew + (interval - priv->audio_skew_measure_time)*priv->audio_skew_factor;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1733 pthread_mutex_unlock(&priv->skew_mutex);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1734 // correct extreme skew changes to avoid (especially) moving backwards in time
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1735 if (xskew - prev_skew > (interval - prev_interval)*MAX_SKEW_DELTA) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1736 skew = prev_skew + (interval - prev_interval)*MAX_SKEW_DELTA;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1737 } else if (xskew - prev_skew < -(interval - prev_interval)*MAX_SKEW_DELTA) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1738 skew = prev_skew - (interval - prev_interval)*MAX_SKEW_DELTA;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1739 } else {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1740 skew = xskew;
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
1741 }
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1742 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1743
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1744 mp_msg(MSGT_TV, MSGL_DBG3, "\nfps = %lf, interval = %lf, a_skew = %f, corr_skew = %f\n",
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1745 (interval != prev_interval) ? (double)1e6/(interval - prev_interval) : -1,
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1746 (double)1e-6*interval, (double)1e-6*xskew, (double)1e-6*skew);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1747 mp_msg(MSGT_TV, MSGL_DBG3, "vcnt = %d, acnt = %d\n", priv->video_cnt, priv->audio_cnt);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1748
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1749 prev_skew = skew;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1750 prev_interval = interval;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1751
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1752 /* allocate a new buffer, if needed */
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1753 pthread_mutex_lock(&priv->video_buffer_mutex);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1754 if (priv->video_buffer_size_current < priv->video_buffer_size_max) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1755 if (priv->video_cnt == priv->video_buffer_size_current) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1756 unsigned char *newbuf = calloc(priv->bytesperline, priv->height);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1757 if (newbuf) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1758 memmove(priv->video_ringbuffer+priv->video_tail+1, priv->video_ringbuffer+priv->video_tail,
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1759 (priv->video_buffer_size_current-priv->video_tail)*sizeof(unsigned char *));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1760 memmove(priv->video_timebuffer+priv->video_tail+1, priv->video_timebuffer+priv->video_tail,
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1761 (priv->video_buffer_size_current-priv->video_tail)*sizeof(long long));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1762 priv->video_ringbuffer[priv->video_tail] = newbuf;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1763 if ((priv->video_head >= priv->video_tail) && (priv->video_cnt > 0)) priv->video_head++;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1764 priv->video_buffer_size_current++;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1765 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1766 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1767 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1768 pthread_mutex_unlock(&priv->video_buffer_mutex);
8650
cf1d4f48aecf allow utilization of more v4l buffers, patch by Carsten Schulz <carsten@gnocchi.dialup.fu-berlin.de>
henry
parents: 8627
diff changeset
1769
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1770 if (priv->video_cnt == priv->video_buffer_size_current) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1771 if (!priv->immediate_mode) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1772 mp_msg(MSGT_TV, MSGL_ERR, "\nvideo buffer full - dropping frame\n");
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1773 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1774 } else {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1775 if (priv->immediate_mode) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1776 priv->video_timebuffer[priv->video_tail] = interval;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1777 } else {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1778 // compensate for audio skew
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1779 // negative skew => there are more audio samples, increase interval
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1780 // positive skew => less samples, shorten the interval
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1781 priv->video_timebuffer[priv->video_tail] = interval - skew;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1782 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1783
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
1784 if ( priv->tv_param->mjpeg )
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1785 copy_frame(priv, priv->video_ringbuffer[priv->video_tail],
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1786 priv->mmap+(priv->mjpeg_bufsize)*i);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1787 else
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1788 copy_frame(priv, priv->video_ringbuffer[priv->video_tail],
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1789 priv->mmap+priv->mbuf.offsets[frame]);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1790 priv->video_tail = (priv->video_tail+1)%priv->video_buffer_size_current;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1791 priv->video_cnt++;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1792 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1793
23885
ed7579c21164 Removing global variables from tv://
voroshil
parents: 23883
diff changeset
1794 if ( priv->tv_param->mjpeg )
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1795 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1796 num = frame;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1797 if (ioctl(priv->video_fd, MJPIOC_QBUF_CAPT, &num) < 0)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1798 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1799 mp_msg(MSGT_TV, MSGL_ERR, "\n MJP: ioctl MJPIOC_QBUF_CAPT end failed: %s\n",
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1800 strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1801 continue;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1802 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1803 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1804 else
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1805 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1806 if (ioctl(priv->video_fd, VIDIOCMCAPTURE, &priv->buf[frame]) == -1)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1807 {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1808 mp_msg(MSGT_TV, MSGL_ERR, "\nioctl mcapture failed: %s\n", strerror(errno));
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1809 continue;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1810 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1811 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1812 }
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1813 }
9620
ce4cd85498f3 hardware mjpeg encoding using v4l by Iv«”n Sz«”nt«Ń <szivan@freemail.hu>
henry
parents: 9609
diff changeset
1814 mp_msg(MSGT_TV, MSGL_INFO, " MJP: returning! \n");
7472
c4434bdf6e51 tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents: 7318
diff changeset
1815 return NULL;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1816 }
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1817
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1818 static double grab_video_frame(priv_t *priv, char *buffer, int len)
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1819 {
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1820 double interval;
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
1821
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1822 if (priv->first) {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1823 pthread_create(&priv->video_grabber_thread, NULL, video_grabber, priv);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1824 priv->first = 0;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1825 }
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1826
8417
15e3d9c2c0ac allocate the video buffer on the fly, instead of one big chunk at startup
henry
parents: 8335
diff changeset
1827 while (priv->video_cnt == 0) {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1828 usleep(10000);
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1829 }
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1830
8417
15e3d9c2c0ac allocate the video buffer on the fly, instead of one big chunk at startup
henry
parents: 8335
diff changeset
1831 pthread_mutex_lock(&priv->video_buffer_mutex);
8131
6b9a3fceaef9 skew calculations modified to use integers
henry
parents: 8022
diff changeset
1832 interval = (double)priv->video_timebuffer[priv->video_head]*1e-6;
23457
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 23422
diff changeset
1833 fast_memcpy(buffer, priv->video_ringbuffer[priv->video_head], len);
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1834 priv->video_cnt--;
8671
e1337452fe62 Obvious patch to avoid undefined behaviour of multiple side effects in
arpi
parents: 8650
diff changeset
1835 priv->video_head = (priv->video_head+1)%priv->video_buffer_size_current;
8417
15e3d9c2c0ac allocate the video buffer on the fly, instead of one big chunk at startup
henry
parents: 8335
diff changeset
1836 pthread_mutex_unlock(&priv->video_buffer_mutex);
9608
7bc2ed398ccf cleanups and some 10l fixes for previous commit
henry
parents: 9607
diff changeset
1837
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1838 return interval;
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
1839 }
98769cea155c added tv subsystem
alex
parents:
diff changeset
1840
98769cea155c added tv subsystem
alex
parents:
diff changeset
1841 static int get_video_framesize(priv_t *priv)
98769cea155c added tv subsystem
alex
parents:
diff changeset
1842 {
2931
bce9c945b29c tv interface update
alex
parents: 2841
diff changeset
1843 return(priv->bytesperline * priv->height);
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
1844 }
98769cea155c added tv subsystem
alex
parents:
diff changeset
1845
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1846 static void *audio_grabber(void *data)
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1847 {
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1848 priv_t *priv = (priv_t*)data;
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1849 struct timeval tv;
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1850 int i, audio_skew_ptr = 0;
8417
15e3d9c2c0ac allocate the video buffer on the fly, instead of one big chunk at startup
henry
parents: 8335
diff changeset
1851 long long current_time, prev_skew = 0;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1852
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1853 pthread_mutex_lock(&priv->audio_starter);
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1854
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1855 audio_in_start_capture(&priv->audio_in);
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1856 for (i = 0; i < priv->aud_skew_cnt; i++)
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1857 priv->audio_skew_buffer[i] = 0;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1858
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1859 for (; !priv->shutdown;)
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1860 {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1861 if (audio_in_read_chunk(&priv->audio_in, priv->audio_ringbuffer+priv->audio_tail*priv->audio_in.blocksize) < 0)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1862 continue;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1863
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1864 gettimeofday(&tv, NULL);
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1865
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1866 priv->audio_recv_blocks_total++;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1867 current_time = (long long)1e6*tv.tv_sec + tv.tv_usec - priv->starttime;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1868
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1869 priv->audio_skew_total -= priv->audio_skew_buffer[audio_skew_ptr];
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1870 priv->audio_skew_buffer[audio_skew_ptr] = current_time
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1871 - 1e6*priv->audio_secs_per_block*priv->audio_recv_blocks_total;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1872 priv->audio_skew_total += priv->audio_skew_buffer[audio_skew_ptr];
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1873 audio_skew_ptr = (audio_skew_ptr+1) % priv->aud_skew_cnt;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1874
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1875 pthread_mutex_lock(&priv->skew_mutex);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1876 // linear interpolation - here we interpolate current skew value
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1877 // from the moving average, which we expect to be in the middle
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1878 // of the interval
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1879 if (priv->audio_recv_blocks_total > priv->aud_skew_cnt) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1880 priv->audio_skew = priv->audio_skew_total/priv->aud_skew_cnt;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1881 priv->audio_skew += (priv->audio_skew*priv->aud_skew_cnt)/(2*priv->audio_recv_blocks_total-priv->aud_skew_cnt);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1882 } else {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1883 // this smoothes the evolution of audio_skew at startup a bit
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1884 priv->audio_skew = ((priv->aud_skew_cnt+priv->audio_recv_blocks_total)*priv->audio_skew_total)/(priv->aud_skew_cnt*priv->audio_recv_blocks_total);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1885 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1886 // current skew factor (assuming linearity)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1887 // used for further interpolation in video_grabber
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1888 // probably overkill but seems to be necessary for
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1889 // stress testing by dropping half of the audio frames ;)
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1890 // especially when using ALSA with large block sizes
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1891 // where audio_skew remains a long while behind
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1892 if ((priv->audio_skew_measure_time != 0) && (current_time - priv->audio_skew_measure_time != 0)) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1893 priv->audio_skew_factor = (double)(priv->audio_skew-prev_skew)/(current_time - priv->audio_skew_measure_time);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1894 } else {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1895 priv->audio_skew_factor = 0.0;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1896 }
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1897
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1898 priv->audio_skew_measure_time = current_time;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1899 prev_skew = priv->audio_skew;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1900 pthread_mutex_unlock(&priv->skew_mutex);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1901
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1902 if ((priv->audio_tail+1) % priv->audio_buffer_size == priv->audio_head) {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1903 mp_msg(MSGT_TV, MSGL_ERR, "\ntoo bad - dropping audio frame !\n");
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1904 priv->audio_drop++;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1905 } else {
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1906 priv->audio_tail = (priv->audio_tail+1) % priv->audio_buffer_size;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1907 priv->audio_cnt++;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1908 }
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1909 }
7472
c4434bdf6e51 tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents: 7318
diff changeset
1910 return NULL;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1911 }
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1912
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5088
diff changeset
1913 static double grab_audio_frame(priv_t *priv, char *buffer, int len)
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
1914 {
5088
942d497875b4 update by Charles Henrich
alex
parents: 3815
diff changeset
1915 mp_dbg(MSGT_TV, MSGL_DBG2, "grab_audio_frame(priv=%p, buffer=%p, len=%d)\n",
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1916 priv, buffer, len);
3815
622a9ade4517 updated
alex
parents: 3711
diff changeset
1917
10776
80402283a017 Fix immediatemode with mplayer (ie playing both sound and video)
albeu
parents: 10621
diff changeset
1918 if (priv->first) {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1919 pthread_create(&priv->video_grabber_thread, NULL, video_grabber, priv);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1920 priv->first = 0;
10776
80402283a017 Fix immediatemode with mplayer (ie playing both sound and video)
albeu
parents: 10621
diff changeset
1921 }
80402283a017 Fix immediatemode with mplayer (ie playing both sound and video)
albeu
parents: 10621
diff changeset
1922
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1923 // compensate for dropped audio frames
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1924 if (priv->audio_drop && (priv->audio_head == priv->audio_tail)) {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1925 priv->audio_drop--;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1926 priv->audio_sent_blocks_total++;
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1927 memset(buffer, 0, len);
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1928 return (double)priv->audio_sent_blocks_total*priv->audio_secs_per_block;
3815
622a9ade4517 updated
alex
parents: 3711
diff changeset
1929 }
622a9ade4517 updated
alex
parents: 3711
diff changeset
1930
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1931 while (priv->audio_head == priv->audio_tail) {
23141
69232417ffde cosmetics: Remove all trailing whitespace and tabs, indentation fixes.
diego
parents: 22507
diff changeset
1932 usleep(10000);
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1933 }
23457
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 23422
diff changeset
1934 fast_memcpy(buffer, priv->audio_ringbuffer+priv->audio_head*priv->audio_in.blocksize, len);
8671
e1337452fe62 Obvious patch to avoid undefined behaviour of multiple side effects in
arpi
parents: 8650
diff changeset
1935 priv->audio_head = (priv->audio_head+1) % priv->audio_buffer_size;
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1936 priv->audio_cnt--;
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1937 priv->audio_sent_blocks_total++;
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1938 return (double)priv->audio_sent_blocks_total*priv->audio_secs_per_block;
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
1939 }
98769cea155c added tv subsystem
alex
parents:
diff changeset
1940
98769cea155c added tv subsystem
alex
parents:
diff changeset
1941 static int get_audio_framesize(priv_t *priv)
98769cea155c added tv subsystem
alex
parents:
diff changeset
1942 {
7058
2e5c07262861 new v4l capture patch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>:
arpi
parents: 6553
diff changeset
1943 return(priv->audio_in.blocksize);
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
1944 }