annotate stream/stream_radio.c @ 29484:be1d733d84e8

Add some protection to the rawaudio GET_LENGTH/GET_PERCENT_POS in case the file length is not known (streaming).
author reimar
date Sun, 16 Aug 2009 22:44:29 +0000
parents 0f1b5b68af32
children 32725ca88fed
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1 /*
26737
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 25962
diff changeset
2 * radio support
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
3 *
26737
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 25962
diff changeset
4 * Abilities:
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 25962
diff changeset
5 * * Listening v4l compatible radio cards using line-in or
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 25962
diff changeset
6 * similar cable
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 25962
diff changeset
7 * * Grabbing audio data using -ao pcm or -dumpaudio
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 25962
diff changeset
8 * (must be compiled with --enable-radio-capture).
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 25962
diff changeset
9 *
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 25962
diff changeset
10 * Initially written by Vladimir Voroshilov <voroshil@univer.omsk.su>.
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 25962
diff changeset
11 * Based on tv.c and tvi_v4l2.c code.
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 25962
diff changeset
12 *
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 25962
diff changeset
13 * This file is part of MPlayer.
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
14 *
26737
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 25962
diff changeset
15 * MPlayer is free software; you can redistribute it and/or modify
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 25962
diff changeset
16 * it under the terms of the GNU General Public License as published by
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 25962
diff changeset
17 * the Free Software Foundation; either version 2 of the License, or
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 25962
diff changeset
18 * (at your option) any later version.
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
19 *
26737
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 25962
diff changeset
20 * MPlayer is distributed in the hope that it will be useful,
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 25962
diff changeset
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 25962
diff changeset
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 25962
diff changeset
23 * GNU General Public License for more details.
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
24 *
26737
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 25962
diff changeset
25 * You should have received a copy of the GNU General Public License along
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 25962
diff changeset
26 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 25962
diff changeset
27 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
28 */
19608
18a538908577 Check for requirements at configure-time, not at run-time.
diego
parents: 19606
diff changeset
29 #include "config.h"
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
30
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
31 #include <stdlib.h>
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
32 #include <stdio.h>
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
33 #include <string.h>
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
34 #include <sys/ioctl.h>
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
35 #include <errno.h>
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
36 #include <unistd.h>
20985
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
37
27370
14c5017f40d2 Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents: 27341
diff changeset
38 #ifdef CONFIG_RADIO_BSDBT848
20985
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
39 #include <sys/param.h>
22948
0f9bd35f971a Rework of *BSD BT848 detection for radio://
voroshil
parents: 22928
diff changeset
40 #ifdef IOCTL_BT848_H_NAME
0f9bd35f971a Rework of *BSD BT848 detection for radio://
voroshil
parents: 22928
diff changeset
41 #include IOCTL_BT848_H_NAME
0f9bd35f971a Rework of *BSD BT848 detection for radio://
voroshil
parents: 22928
diff changeset
42 #endif
20985
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
43
27370
14c5017f40d2 Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents: 27341
diff changeset
44 #else /* CONFIG_RADIO_BSDBT848 */
20985
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
45
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
46 #include <linux/types.h>
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
47
27370
14c5017f40d2 Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents: 27341
diff changeset
48 #ifdef CONFIG_RADIO_V4L2
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
49 #include <linux/videodev2.h>
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
50 #endif
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
51
27370
14c5017f40d2 Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents: 27341
diff changeset
52 #ifdef CONFIG_RADIO_V4L
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
53 #include <linux/videodev.h>
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
54 #warning "V4L is deprecated and will be removed in future"
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
55 #endif
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
56
22948
0f9bd35f971a Rework of *BSD BT848 detection for radio://
voroshil
parents: 22928
diff changeset
57 #endif // !IOCTL_BT848_H_NAME
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
58
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
59
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
60 #include "stream.h"
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
61 #include "libmpdemux/demuxer.h"
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
62 #include "m_struct.h"
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
63 #include "m_option.h"
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
64 #include "mp_msg.h"
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
65 #include "help_mp.h"
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
66 #include "stream_radio.h"
23703
9fb716ab06a3 Avoid code duplication and ugly config.h hack by using av_strlcat/av_strlcpy
reimar
parents: 23485
diff changeset
67 #include "libavutil/avstring.h"
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
68
27341
e7c989f7a7c9 Start unifying names of internal preprocessor directives.
diego
parents: 26737
diff changeset
69 #ifdef CONFIG_RADIO_CAPTURE
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
70 #include "audio_in.h"
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
71
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
72 #ifdef HAVE_SYS_SOUNDCARD_H
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
73 #include <sys/soundcard.h>
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
74 #else
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
75 #ifdef HAVE_SOUNDCARD_H
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
76 #include <soundcard.h>
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
77 #else
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
78 #include <linux/soundcard.h>
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
79 #endif
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
80 #endif
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
81
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
82 #endif
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
83
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
84 typedef struct radio_channels_s {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
85 int index; ///< channel index in channels list
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
86 float freq; ///< frequency in MHz
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
87 char name[20]; ///< channel name
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
88 struct radio_channels_s * next;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
89 struct radio_channels_s * prev;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
90 } radio_channels_t;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
91
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
92 /// default values for options
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
93 radio_param_t stream_radio_defaults={
27370
14c5017f40d2 Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents: 27341
diff changeset
94 #ifdef CONFIG_RADIO_BSDBT848
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
95 "/dev/tuner0", //device
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
96 87.50, //freq_min
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
97 108.00, //freq_max
20985
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
98 #else
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
99 "/dev/radio0", //device;
20985
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
100 #endif
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
101 "default", //driver
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
102 NULL, //channels
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
103 100, //volume
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
104 NULL, //adevice
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
105 44100, //arate
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
106 2, //achannels
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
107 0, //freq_channel
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
108 NULL, //capture
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
109 };
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
110
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
111 typedef struct radio_priv_s {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
112 int radio_fd; ///< radio device descriptor
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
113 int frac; ///< fraction value (see comment to init_frac)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
114 radio_channels_t* radio_channel_list;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
115 radio_channels_t* radio_channel_current;
20758
e0f3254f3b76 Adding ability to check allowed frequency range.
voroshil
parents: 20738
diff changeset
116 float rangelow; ///< lowest tunable frequency in MHz
e0f3254f3b76 Adding ability to check allowed frequency range.
voroshil
parents: 20738
diff changeset
117 float rangehigh; ///< highest tunable frequency in MHz
22754
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
118 const struct radio_driver_s* driver;
20737
eb15b01a50cb Restoring volume level of radio card on exit.
voroshil
parents: 19793
diff changeset
119 int old_snd_volume;
27341
e7c989f7a7c9 Start unifying names of internal preprocessor directives.
diego
parents: 26737
diff changeset
120 #ifdef CONFIG_RADIO_CAPTURE
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
121 volatile int do_capture; ///< is capture enabled
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
122 audio_in_t audio_in;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
123 unsigned char* audio_ringbuffer;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
124 int audio_head; ///< start of meanfull data in ringbuffer
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
125 int audio_tail; ///< end of meanfull data in ringbuffer
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
126 int audio_buffer_size; ///< size of ringbuffer
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
127 int audio_cnt; ///< size of meanfull data inringbuffer
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
128 int audio_drop; ///< number of dropped bytes
25962
afa125da85cf typo fix: inited --> initialized
diego
parents: 25691
diff changeset
129 int audio_initialized;
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
130 #endif
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
131 radio_param_t *radio_param;
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
132 } radio_priv_t;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
133
22754
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
134 typedef struct radio_driver_s {
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
135 char* name;
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
136 char* info;
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
137 int (*init_frac)(radio_priv_t* priv);
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
138 void (*set_volume)(radio_priv_t* priv,int volume);
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
139 int (*get_volume)(radio_priv_t* priv,int* volume);
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
140 int (*set_frequency)(radio_priv_t* priv,float frequency);
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
141 int (*get_frequency)(radio_priv_t* priv,float* frequency);
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
142 } radio_driver_t;
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
143
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
144 #define ST_OFF(f) M_ST_OFF(radio_param_t,f)
25242
371a40dcc1cc stream_opts arrays should be const
reimar
parents: 25211
diff changeset
145 static const m_option_t stream_opts_fields[] = {
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
146 {"hostname", ST_OFF(freq_channel), CONF_TYPE_FLOAT, 0, 0 ,0, NULL},
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
147 {"filename", ST_OFF(capture), CONF_TYPE_STRING, 0, 0 ,0, NULL},
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
148 { NULL, NULL, 0, 0, 0, 0, NULL }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
149 };
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
150
25691
68015115f63a stream_opts should be const
reimar
parents: 25242
diff changeset
151 static const struct m_struct_st stream_opts = {
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
152 "radio",
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
153 sizeof(radio_param_t),
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
154 &stream_radio_defaults,
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
155 stream_opts_fields
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
156 };
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
157
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
158 static void close_s(struct stream_st * stream);
27341
e7c989f7a7c9 Start unifying names of internal preprocessor directives.
diego
parents: 26737
diff changeset
159 #ifdef CONFIG_RADIO_CAPTURE
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
160 static int clear_buffer(radio_priv_t* priv);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
161 #endif
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
162
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
163
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
164 /*****************************************************************
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
165 * \brief parse channels parameter and store result into list
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
166 * \param freq_channel if channels!=NULL this mean channel number, otherwise - frequency
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
167 * \param pfreq selected frequency (from selected channel or from URL)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
168 * \result STREAM_OK if success, STREAM_ERROR otherwise
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
169 *
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
170 * channels option must be in the following format
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
171 * <frequency>-<name>,<frequency>-<name>,...
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
172 *
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
173 * '_' will be replaced with spaces.
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
174 *
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
175 * If channels option is not null, number in movie URL will be treated as
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
176 * channel position in channel list.
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
177 */
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
178 static int parse_channels(radio_priv_t* priv,float freq_channel,float* pfreq){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
179 char** channels;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
180 int i;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
181 int channel = 0;
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
182 if (priv->radio_param->channels){
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
183 /*parsing channels string*/
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
184 channels=priv->radio_param->channels;
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
185
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
186 mp_msg(MSGT_RADIO, MSGL_INFO, MSGTR_RADIO_ChannelNamesDetected);
19606
832d6f6f805e Do not cast calloc/malloc results
reimar
parents: 19568
diff changeset
187 priv->radio_channel_list = malloc(sizeof(radio_channels_t));
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
188 priv->radio_channel_list->index=1;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
189 priv->radio_channel_list->next=NULL;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
190 priv->radio_channel_list->prev=NULL;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
191 priv->radio_channel_current = priv->radio_channel_list;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
192
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
193 while (*channels) {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
194 char* tmp = *(channels++);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
195 char* sep = strchr(tmp,'-');
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
196 if (!sep) continue; // Wrong syntax, but mplayer should not crash
23703
9fb716ab06a3 Avoid code duplication and ugly config.h hack by using av_strlcat/av_strlcpy
reimar
parents: 23485
diff changeset
197 av_strlcpy(priv->radio_channel_current->name, sep + 1,sizeof(priv->radio_channel_current->name)-1);
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
198
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
199 sep[0] = '\0';
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
200
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
201 priv->radio_channel_current->freq=atof(tmp);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
202
20758
e0f3254f3b76 Adding ability to check allowed frequency range.
voroshil
parents: 20738
diff changeset
203 if ((priv->radio_channel_current->freq>priv->rangehigh)||(priv->radio_channel_current->freq<priv->rangelow))
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
204 mp_msg(MSGT_RADIO, MSGL_ERR, MSGTR_RADIO_WrongFreqForChannel,
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
205 priv->radio_channel_current->name);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
206
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
207 while ((sep=strchr(priv->radio_channel_current->name, '_'))) sep[0] = ' ';
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
208
19606
832d6f6f805e Do not cast calloc/malloc results
reimar
parents: 19568
diff changeset
209 priv->radio_channel_current->next = malloc(sizeof(radio_channels_t));
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
210 priv->radio_channel_current->next->index = priv->radio_channel_current->index + 1;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
211 priv->radio_channel_current->next->prev = priv->radio_channel_current;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
212 priv->radio_channel_current->next->next = NULL;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
213 priv->radio_channel_current = priv->radio_channel_current->next;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
214 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
215 if (priv->radio_channel_current->prev)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
216 priv->radio_channel_current->prev->next = NULL;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
217 free(priv->radio_channel_current);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
218
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
219 if (freq_channel)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
220 channel = freq_channel;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
221 else
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
222 channel = 1;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
223
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
224 priv->radio_channel_current = priv->radio_channel_list;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
225 for (i = 1; i < channel; i++)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
226 if (priv->radio_channel_current->next)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
227 priv->radio_channel_current = priv->radio_channel_current->next;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
228 if (priv->radio_channel_current->index!=channel){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
229 if (((float)((int)freq_channel))!=freq_channel)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
230 mp_msg(MSGT_RADIO, MSGL_ERR, MSGTR_RADIO_WrongChannelNumberFloat,freq_channel);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
231 else
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
232 mp_msg(MSGT_RADIO, MSGL_ERR, MSGTR_RADIO_WrongChannelNumberInt,(int)freq_channel);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
233 return STREAM_ERROR;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
234 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
235 mp_msg(MSGT_RADIO, MSGL_INFO, MSGTR_RADIO_SelectedChannel, priv->radio_channel_current->index,
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
236 priv->radio_channel_current->name, priv->radio_channel_current->freq);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
237 *pfreq=priv->radio_channel_current->freq;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
238 }else{
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
239 if (freq_channel){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
240 mp_msg(MSGT_RADIO, MSGL_INFO, MSGTR_RADIO_FreqParameterDetected);
19606
832d6f6f805e Do not cast calloc/malloc results
reimar
parents: 19568
diff changeset
241 priv->radio_channel_list=malloc(sizeof(radio_channels_t));
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
242 priv->radio_channel_list->next=NULL;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
243 priv->radio_channel_list->prev=NULL;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
244 priv->radio_channel_list->index=1;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
245 snprintf(priv->radio_channel_list->name,sizeof(priv->radio_channel_current->name)-1,"Freq: %.2f",freq_channel);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
246
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
247 priv->radio_channel_current=priv->radio_channel_list;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
248 *pfreq=freq_channel;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
249 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
250 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
251 mp_msg(MSGT_RADIO, MSGL_DBG2, MSGTR_RADIO_DoneParsingChannels);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
252 return STREAM_OK;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
253 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
254
27370
14c5017f40d2 Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents: 27341
diff changeset
255 #ifdef CONFIG_RADIO_V4L2
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
256 /*****************************************************************
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
257 * \brief get fraction value for using in set_frequency and get_frequency
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
258 * \return STREAM_OK if success, STREAM_ERROR otherwise
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
259 *
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
260 * V4L2_TUNER_CAP_LOW:
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
261 * unit=62.5Hz
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
262 * frac= 1MHz/unit=1000000/62.5 =16000
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
263 *
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
264 * otherwise:
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
265 * unit=62500Hz
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
266 * frac= 1MHz/unit=1000000/62500 =16
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
267 */
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
268 static int init_frac_v4l2(radio_priv_t* priv){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
269 struct v4l2_tuner tuner;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
270
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
271 memset(&tuner,0,sizeof(tuner));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
272 tuner.index=0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
273 if (ioctl(priv->radio_fd, VIDIOC_G_TUNER, &tuner)<0){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
274 mp_msg(MSGT_RADIO,MSGL_WARN,MSGTR_RADIO_GetTunerFailed,strerror(errno),priv->frac);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
275 return STREAM_ERROR;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
276 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
277 if(tuner.type!=V4L2_TUNER_RADIO){
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
278 mp_msg(MSGT_RADIO,MSGL_ERR,MSGTR_RADIO_NotRadioDevice,priv->radio_param->device);
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
279 return STREAM_ERROR;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
280 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
281 if(tuner.capability & V4L2_TUNER_CAP_LOW){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
282 priv->frac=16000;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
283 mp_msg(MSGT_RADIO,MSGL_DBG2,MSGTR_RADIO_TunerCapLowYes,priv->frac);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
284 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
285 else{
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
286 priv->frac=16;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
287 mp_msg(MSGT_RADIO,MSGL_DBG2,MSGTR_RADIO_TunerCapLowNo,priv->frac);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
288 }
20758
e0f3254f3b76 Adding ability to check allowed frequency range.
voroshil
parents: 20738
diff changeset
289
e0f3254f3b76 Adding ability to check allowed frequency range.
voroshil
parents: 20738
diff changeset
290 priv->rangelow=((float)tuner.rangelow)/priv->frac;
e0f3254f3b76 Adding ability to check allowed frequency range.
voroshil
parents: 20738
diff changeset
291 priv->rangehigh=((float)tuner.rangehigh)/priv->frac;
e0f3254f3b76 Adding ability to check allowed frequency range.
voroshil
parents: 20738
diff changeset
292 mp_msg(MSGT_RADIO,MSGL_V,MSGTR_RADIO_FreqRange,priv->rangelow,priv->rangehigh);
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
293 return STREAM_OK;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
294 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
295
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
296 /*****************************************************************
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
297 * \brief tune card to given frequency
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
298 * \param frequency frequency in MHz
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
299 * \return STREAM_OK if success, STREAM_ERROR otherwise
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
300 */
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
301 static int set_frequency_v4l2(radio_priv_t* priv,float frequency){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
302 struct v4l2_frequency freq;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
303
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
304 memset(&freq,0,sizeof(freq));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
305 freq.tuner=0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
306 freq.type=V4L2_TUNER_RADIO;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
307 freq.frequency=frequency*priv->frac;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
308 if(ioctl(priv->radio_fd,VIDIOC_S_FREQUENCY,&freq)<0){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
309 mp_msg(MSGT_RADIO,MSGL_ERR,MSGTR_RADIO_SetFreqFailed,freq.frequency,
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
310 frequency,strerror(errno));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
311 return STREAM_ERROR;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
312 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
313 return STREAM_OK;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
314 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
315
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
316 /*****************************************************************
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
317 * \brief get current tuned frequency from card
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
318 * \param frequency where to store frequency in MHz
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
319 * \return STREAM_OK if success, STREAM_ERROR otherwise
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
320 */
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
321 static int get_frequency_v4l2(radio_priv_t* priv,float* frequency){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
322 struct v4l2_frequency freq;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
323 memset(&freq,0,sizeof(freq));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
324 if (ioctl(priv->radio_fd, VIDIOC_G_FREQUENCY, &freq) < 0) {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
325 mp_msg(MSGT_RADIO,MSGL_ERR,MSGTR_RADIO_GetFreqFailed,strerror(errno));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
326 return STREAM_ERROR;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
327 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
328 *frequency=((float)freq.frequency)/priv->frac;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
329 return STREAM_OK;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
330 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
331
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
332 /*****************************************************************
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
333 * \brief set volume on radio card
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
334 * \param volume volume level (0..100)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
335 * \return STREAM_OK if success, STREAM_ERROR otherwise
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
336 */
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
337 static void set_volume_v4l2(radio_priv_t* priv,int volume){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
338 struct v4l2_queryctrl qctrl;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
339 struct v4l2_control control;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
340
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
341 /*arg must be between 0 and 100*/
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
342 if (volume > 100) volume = 100;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
343 if (volume < 0) volume = 0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
344
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
345 memset(&control,0,sizeof(control));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
346 control.id=V4L2_CID_AUDIO_MUTE;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
347 control.value = (volume==0?1:0);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
348 if (ioctl(priv->radio_fd, VIDIOC_S_CTRL, &control)<0){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
349 mp_msg(MSGT_RADIO,MSGL_WARN,MSGTR_RADIO_SetMuteFailed,strerror(errno));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
350 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
351
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
352 memset(&qctrl,0,sizeof(qctrl));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
353 qctrl.id = V4L2_CID_AUDIO_VOLUME;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
354 if (ioctl(priv->radio_fd, VIDIOC_QUERYCTRL, &qctrl) < 0) {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
355 mp_msg(MSGT_RADIO, MSGL_WARN, MSGTR_RADIO_QueryControlFailed,strerror(errno));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
356 return;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
357 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
358
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
359 memset(&control,0,sizeof(control));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
360 control.id=V4L2_CID_AUDIO_VOLUME;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
361 control.value=qctrl.minimum+volume*(qctrl.maximum-qctrl.minimum)/100;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
362 if (ioctl(priv->radio_fd, VIDIOC_S_CTRL, &control) < 0) {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
363 mp_msg(MSGT_RADIO, MSGL_WARN,MSGTR_RADIO_SetVolumeFailed,strerror(errno));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
364 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
365 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
366
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
367 /*****************************************************************
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
368 * \brief get current volume from radio card
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
369 * \param volume where to store volume level (0..100)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
370 * \return STREAM_OK if success, STREAM_ERROR otherwise
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
371 */
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
372 static int get_volume_v4l2(radio_priv_t* priv,int* volume){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
373 struct v4l2_queryctrl qctrl;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
374 struct v4l2_control control;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
375
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
376 memset(&qctrl,0,sizeof(qctrl));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
377 qctrl.id = V4L2_CID_AUDIO_VOLUME;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
378 if (ioctl(priv->radio_fd, VIDIOC_QUERYCTRL, &qctrl) < 0) {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
379 mp_msg(MSGT_RADIO, MSGL_ERR, MSGTR_RADIO_QueryControlFailed,strerror(errno));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
380 return STREAM_ERROR;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
381 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
382
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
383 memset(&control,0,sizeof(control));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
384 control.id=V4L2_CID_AUDIO_VOLUME;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
385 if (ioctl(priv->radio_fd, VIDIOC_G_CTRL, &control) < 0) {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
386 mp_msg(MSGT_RADIO, MSGL_ERR,MSGTR_RADIO_GetVolumeFailed,strerror(errno));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
387 return STREAM_ERROR;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
388 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
389
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
390 if (qctrl.maximum==qctrl.minimum)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
391 *volume=qctrl.minimum;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
392 else
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
393 *volume=100*(control.value-qctrl.minimum)/(qctrl.maximum-qctrl.minimum);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
394
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
395 /*arg must be between 0 and 100*/
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
396 if (*volume > 100) *volume = 100;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
397 if (*volume < 0) *volume = 0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
398
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
399 return STREAM_OK;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
400 }
22754
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
401
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
402 /* v4l2 driver info structure */
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
403 static const radio_driver_t radio_driver_v4l2={
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
404 "v4l2",
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
405 MSGTR_RADIO_DriverV4L2,
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
406 init_frac_v4l2,
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
407 set_volume_v4l2,
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
408 get_volume_v4l2,
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
409 set_frequency_v4l2,
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
410 get_frequency_v4l2
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
411 };
27370
14c5017f40d2 Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents: 27341
diff changeset
412 #endif /* CONFIG_RADIO_V4L2 */
14c5017f40d2 Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents: 27341
diff changeset
413 #ifdef CONFIG_RADIO_V4L
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
414 /*****************************************************************
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
415 * \brief get fraction value for using in set_frequency and get_frequency
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
416 * \return STREAM_OK if success, STREAM_ERROR otherwise
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
417 *
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
418 * V4L2_TUNER_CAP_LOW:
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
419 * unit=62.5Hz
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
420 * frac= 1MHz/unit=1000000/62.5 =16000
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
421 *
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
422 * otherwise:
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
423 * unit=62500Hz
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
424 * frac= 1MHz/unit=1000000/62500 =16
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
425 *
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
426 */
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
427 static int init_frac_v4l(radio_priv_t* priv){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
428 struct video_tuner tuner;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
429 memset(&tuner,0,sizeof(tuner));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
430 if (ioctl(priv->radio_fd, VIDIOCGTUNER, &tuner) <0){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
431 mp_msg(MSGT_RADIO,MSGL_WARN,MSGTR_RADIO_GetTunerFailed,strerror(errno),priv->frac);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
432 return STREAM_ERROR;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
433 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
434 if(tuner.flags & VIDEO_TUNER_LOW){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
435 priv->frac=16000;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
436 mp_msg(MSGT_RADIO,MSGL_DBG2,MSGTR_RADIO_TunerCapLowYes,priv->frac);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
437 }else{
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
438 priv->frac=16;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
439 mp_msg(MSGT_RADIO,MSGL_DBG2,MSGTR_RADIO_TunerCapLowNo,priv->frac);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
440 }
20758
e0f3254f3b76 Adding ability to check allowed frequency range.
voroshil
parents: 20738
diff changeset
441
e0f3254f3b76 Adding ability to check allowed frequency range.
voroshil
parents: 20738
diff changeset
442 priv->rangelow=((float)tuner.rangelow)/priv->frac;
e0f3254f3b76 Adding ability to check allowed frequency range.
voroshil
parents: 20738
diff changeset
443 priv->rangehigh=((float)tuner.rangehigh)/priv->frac;
e0f3254f3b76 Adding ability to check allowed frequency range.
voroshil
parents: 20738
diff changeset
444 mp_msg(MSGT_RADIO,MSGL_V,MSGTR_RADIO_FreqRange,priv->rangelow,priv->rangehigh);
e0f3254f3b76 Adding ability to check allowed frequency range.
voroshil
parents: 20738
diff changeset
445
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
446 return STREAM_OK;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
447 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
448
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
449 /*****************************************************************
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
450 * \brief tune card to given frequency
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
451 * \param frequency frequency in MHz
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
452 * \return STREAM_OK if success, STREAM_ERROR otherwise
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
453 */
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
454 static int set_frequency_v4l(radio_priv_t* priv,float frequency){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
455 __u32 freq;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
456 freq=frequency*priv->frac;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
457 if (ioctl(priv->radio_fd, VIDIOCSFREQ, &freq) < 0) {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
458 mp_msg(MSGT_RADIO,MSGL_ERR,MSGTR_RADIO_SetFreqFailed,freq,frequency,strerror(errno));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
459 return STREAM_ERROR;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
460 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
461 return STREAM_OK;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
462 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
463 /*****************************************************************
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
464 * \brief get current tuned frequency from card
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
465 * \param frequency where to store frequency in MHz
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
466 * \return STREAM_OK if success, STREAM_ERROR otherwise
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
467 */
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
468 static int get_frequency_v4l(radio_priv_t* priv,float* frequency){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
469 __u32 freq;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
470 if (ioctl(priv->radio_fd, VIDIOCGFREQ, &freq) < 0) {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
471 mp_msg(MSGT_RADIO,MSGL_ERR,MSGTR_RADIO_GetFreqFailed,strerror(errno));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
472 return STREAM_ERROR;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
473 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
474 *frequency=((float)freq)/priv->frac;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
475 return STREAM_OK;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
476 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
477
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
478 /*****************************************************************
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
479 * \brief set volume on radio card
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
480 * \param volume volume level (0..100)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
481 * \return STREAM_OK if success, STREAM_ERROR otherwise
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
482 */
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
483 static void set_volume_v4l(radio_priv_t* priv,int volume){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
484 struct video_audio audio;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
485
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
486 /*arg must be between 0 and 100*/
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
487 if (volume > 100) volume = 100;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
488 if (volume < 0) volume = 0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
489
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
490 memset(&audio,0,sizeof(audio));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
491 audio.flags = (volume==0?VIDEO_AUDIO_MUTE:0);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
492 if (ioctl(priv->radio_fd, VIDIOCSAUDIO, &audio)<0){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
493 mp_msg(MSGT_RADIO,MSGL_WARN,MSGTR_RADIO_SetMuteFailed,strerror(errno));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
494 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
495
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
496 memset(&audio,0,sizeof(audio));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
497 audio.flags = VIDEO_AUDIO_VOLUME;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
498 audio.mode = VIDEO_SOUND_STEREO;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
499 audio.audio = 0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
500 audio.volume = volume* (65535 / 100);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
501
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
502 if (ioctl(priv->radio_fd, VIDIOCSAUDIO, &audio) < 0){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
503 mp_msg(MSGT_RADIO,MSGL_ERR,MSGTR_RADIO_SetVolumeFailed,strerror(errno));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
504 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
505 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
506
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
507 /*****************************************************************
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
508 * \brief get current volume from radio card
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
509 * \param volume where to store volume level (0..100)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
510 * \return STREAM_OK if success, STREAM_ERROR otherwise
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
511 */
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
512 static int get_volume_v4l(radio_priv_t* priv,int* volume){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
513 struct video_audio audio;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
514
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
515 memset(&audio,0,sizeof(audio));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
516 audio.audio=0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
517 if (ioctl(priv->radio_fd, VIDIOCGAUDIO, &audio) < 0){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
518 mp_msg(MSGT_RADIO,MSGL_ERR,MSGTR_RADIO_GetVolumeFailed,strerror(errno));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
519 return STREAM_ERROR;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
520 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
521
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
522 if (audio.flags & VIDEO_AUDIO_VOLUME){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
523 *volume=100*audio.volume/65535;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
524 /*arg must be between 0 and 100*/
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
525 if (*volume > 100) *volume = 100;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
526 if (*volume < 0) *volume = 0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
527 return STREAM_OK;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
528 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
529
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
530 return STREAM_ERROR;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
531 }
22754
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
532
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
533 /* v4l driver info structure */
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
534 static const radio_driver_t radio_driver_v4l={
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
535 "v4l",
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
536 MSGTR_RADIO_DriverV4L,
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
537 init_frac_v4l,
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
538 set_volume_v4l,
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
539 get_volume_v4l,
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
540 set_frequency_v4l,
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
541 get_frequency_v4l
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
542 };
27370
14c5017f40d2 Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents: 27341
diff changeset
543 #endif /* CONFIG_RADIO_V4L */
14c5017f40d2 Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents: 27341
diff changeset
544 #ifdef CONFIG_RADIO_BSDBT848
22948
0f9bd35f971a Rework of *BSD BT848 detection for radio://
voroshil
parents: 22928
diff changeset
545
20985
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
546 /*****************************************************************
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
547 * \brief get fraction value for using in set_frequency and get_frequency
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
548 * \return STREAM_OK if success, STREAM_ERROR otherwise
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
549 *
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
550 * For *BSD BT848 frac=100
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
551 *
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
552 * Here is a coment from FreeBSD 5.2-RELEASE source code:
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
553 *
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
554 * * Tuner Notes:
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
555 * * Programming the tuner properly is quite complicated.
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
556 * * Here are some notes, based on a FM1246 data sheet for a PAL-I tuner.
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
557 * * The tuner (front end) covers 45.75 MHz - 855.25 MHz and an FM band of
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
558 * * 87.5 MHz to 108.0 MHz.
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
559 *
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
560 * Thus, frequency range is limited to 87.5-108.0, but you can change
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
561 * it, using freq_min and freq_max options
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
562 */
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
563 static int init_frac_bsdbt848(radio_priv_t* priv){
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
564 priv->frac=100;
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
565 priv->rangelow=priv->radio_param->freq_min;
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
566 priv->rangehigh=priv->radio_param->freq_max;
20985
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
567 return STREAM_OK;
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
568 }
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
569
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
570 /*****************************************************************
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
571 * \brief tune card to given frequency
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
572 * \param frequency frequency in MHz
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
573 * \return STREAM_OK if success, STREAM_ERROR otherwise
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
574 */
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
575 static int set_frequency_bsdbt848(radio_priv_t* priv,float frequency){
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
576 unsigned int freq;
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
577 freq=frequency*priv->frac;
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
578 if(ioctl(priv->radio_fd,RADIO_SETFREQ,&freq)<0){
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
579 mp_msg(MSGT_RADIO,MSGL_ERR,MSGTR_RADIO_SetFreqFailed,freq, frequency, strerror(errno));
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
580 return STREAM_ERROR;
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
581 }
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
582 return STREAM_OK;
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
583 }
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
584
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
585 /*****************************************************************
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
586 * \brief get current tuned frequency from card
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
587 * \param frequency where to store frequency in MHz
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
588 * \return STREAM_OK if success, STREAM_ERROR otherwise
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
589 */
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
590 static int get_frequency_bsdbt848(radio_priv_t* priv,float* frequency){
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
591 unsigned int freq;
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
592 if (ioctl(priv->radio_fd, RADIO_GETFREQ, &freq) < 0) {
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
593 mp_msg(MSGT_RADIO,MSGL_ERR,MSGTR_RADIO_GetFreqFailed,strerror(errno));
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
594 return STREAM_ERROR;
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
595 }
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
596 *frequency=((float)freq)/priv->frac;
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
597 return STREAM_OK;
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
598 }
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
599
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
600 /*****************************************************************
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
601 * \brief set volume on radio card
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
602 * \param volume volume level (0..100)
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
603 * \return STREAM_OK if success, STREAM_ERROR otherwise
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
604 *
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
605 * *BSD BT848 does not have volume changing abilities, so
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
606 * we will just mute sound if volume=0 and unmute it otherwise.
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
607 */
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
608 static void set_volume_bsdbt848(radio_priv_t* priv,int volume){
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
609 int audio_flags;
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
610
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
611 /*arg must be between 0 and 100*/
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
612 if (volume > 100) volume = 100;
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
613 if (volume < 0) volume = 0;
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
614
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
615 audio_flags = (volume==0?AUDIO_MUTE:AUDIO_UNMUTE);
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
616 if (ioctl(priv->radio_fd, BT848_SAUDIO, &audio_flags)<0){
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
617 mp_msg(MSGT_RADIO,MSGL_WARN,MSGTR_RADIO_SetMuteFailed,strerror(errno));
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
618 }
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
619 }
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
620
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
621 /*****************************************************************
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
622 * \brief get current volume from radio card
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
623 * \param volume where to store volume level (0..100)
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
624 * \return previous STREAM_OK if success, STREAM_ERROR otherwise
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
625 *
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
626 * *BSD BT848 does not have volume changing abilities, so
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
627 * we will return 0 if sound is muted and 100 otherwise.
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
628 */
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
629 static int get_volume_bsdbt848(radio_priv_t* priv,int* volume){
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
630 int audio_flags;
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
631
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
632 if (ioctl(priv->radio_fd, BT848_GAUDIO, &audio_flags)<0){
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
633 mp_msg(MSGT_RADIO,MSGL_ERR,MSGTR_RADIO_GetVolumeFailed,strerror(errno));
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
634 return STREAM_ERROR;
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
635 }
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
636
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
637 if (audio_flags & AUDIO_MUTE)
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
638 *volume=0;
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
639 else
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
640 *volume=100;
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
641
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
642 return STREAM_OK;
20110e4437c6 Add *BSD BT848 radio support
voroshil
parents: 20968
diff changeset
643 }
22754
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
644
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
645 /* bsdbt848 driver info structure */
22928
09f2039f1113 Fix typo in r22772 which causes compilation error under *BSD.
voroshil
parents: 22754
diff changeset
646 static const radio_driver_t radio_driver_bsdbt848={
22754
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
647 "bsdbt848",
22928
09f2039f1113 Fix typo in r22772 which causes compilation error under *BSD.
voroshil
parents: 22754
diff changeset
648 MSGTR_RADIO_DriverBSDBT848,
09f2039f1113 Fix typo in r22772 which causes compilation error under *BSD.
voroshil
parents: 22754
diff changeset
649 init_frac_bsdbt848,
09f2039f1113 Fix typo in r22772 which causes compilation error under *BSD.
voroshil
parents: 22754
diff changeset
650 set_volume_bsdbt848,
09f2039f1113 Fix typo in r22772 which causes compilation error under *BSD.
voroshil
parents: 22754
diff changeset
651 get_volume_bsdbt848,
09f2039f1113 Fix typo in r22772 which causes compilation error under *BSD.
voroshil
parents: 22754
diff changeset
652 set_frequency_bsdbt848,
09f2039f1113 Fix typo in r22772 which causes compilation error under *BSD.
voroshil
parents: 22754
diff changeset
653 get_frequency_bsdbt848
22754
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
654 };
27370
14c5017f40d2 Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents: 27341
diff changeset
655 #endif /* CONFIG_RADIO_BSDBT848 */
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
656
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27390
diff changeset
657 static inline int init_frac(radio_priv_t* priv){
22754
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
658 return priv->driver->init_frac(priv);
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
659 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27390
diff changeset
660 static inline int set_frequency(radio_priv_t* priv,float frequency){
20758
e0f3254f3b76 Adding ability to check allowed frequency range.
voroshil
parents: 20738
diff changeset
661 if ((frequency<priv->rangelow)||(frequency>priv->rangehigh)){
e0f3254f3b76 Adding ability to check allowed frequency range.
voroshil
parents: 20738
diff changeset
662 mp_msg(MSGT_RADIO,MSGL_ERR,MSGTR_RADIO_WrongFreq,frequency);
e0f3254f3b76 Adding ability to check allowed frequency range.
voroshil
parents: 20738
diff changeset
663 return STREAM_ERROR;
e0f3254f3b76 Adding ability to check allowed frequency range.
voroshil
parents: 20738
diff changeset
664 }
22754
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
665 if(priv->driver->set_frequency(priv,frequency)!=STREAM_OK)
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
666 return STREAM_ERROR;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27390
diff changeset
667
27341
e7c989f7a7c9 Start unifying names of internal preprocessor directives.
diego
parents: 26737
diff changeset
668 #ifdef CONFIG_RADIO_CAPTURE
20796
dee98cb0b090 Move non driver-specific block to non-driver specific procedure, to avoid
voroshil
parents: 20758
diff changeset
669 if(clear_buffer(priv)!=STREAM_OK){
dee98cb0b090 Move non driver-specific block to non-driver specific procedure, to avoid
voroshil
parents: 20758
diff changeset
670 mp_msg(MSGT_RADIO,MSGL_ERR,MSGTR_RADIO_ClearBufferFailed,strerror(errno));
dee98cb0b090 Move non driver-specific block to non-driver specific procedure, to avoid
voroshil
parents: 20758
diff changeset
671 return STREAM_ERROR;
dee98cb0b090 Move non driver-specific block to non-driver specific procedure, to avoid
voroshil
parents: 20758
diff changeset
672 }
dee98cb0b090 Move non driver-specific block to non-driver specific procedure, to avoid
voroshil
parents: 20758
diff changeset
673 #endif
dee98cb0b090 Move non driver-specific block to non-driver specific procedure, to avoid
voroshil
parents: 20758
diff changeset
674 return STREAM_OK;
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
675 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27390
diff changeset
676 static inline int get_frequency(radio_priv_t* priv,float* frequency){
22754
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
677 return priv->driver->get_frequency(priv,frequency);
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
678 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27390
diff changeset
679 static inline void set_volume(radio_priv_t* priv,int volume){
22754
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
680 priv->driver->set_volume(priv,volume);
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
681 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27390
diff changeset
682 static inline int get_volume(radio_priv_t* priv,int* volume){
22754
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
683 return priv->driver->get_volume(priv,volume);
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
684 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
685
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
686
27341
e7c989f7a7c9 Start unifying names of internal preprocessor directives.
diego
parents: 26737
diff changeset
687 #ifndef CONFIG_RADIO_CAPTURE
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
688 /*****************************************************************
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
689 * \brief stub, if capture disabled at compile-time
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
690 * \return STREAM_OK
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
691 */
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
692 static inline int init_audio(radio_priv_t *priv){ return STREAM_OK;}
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
693 #else
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
694 /*****************************************************************
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
695 * \brief making buffer empty
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
696 * \return STREAM_OK if success, STREAM_ERROR otherwise
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
697 *
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
698 * when changing channel we must clear buffer to avoid large switching delay
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
699 */
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
700 static int clear_buffer(radio_priv_t* priv){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
701 if (!priv->do_capture) return STREAM_OK;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
702 priv->audio_tail = 0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
703 priv->audio_head = 0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
704 priv->audio_cnt=0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
705 memset(priv->audio_ringbuffer,0,priv->audio_in.blocksize);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
706 return STREAM_OK;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
707 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
708 /*****************************************************************
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
709 * \brief read next part of data into buffer
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
710 * \return -1 if error occured or no data available yet, otherwise - bytes read
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
711 * NOTE: audio device works in non-blocking mode
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
712 */
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
713 static int read_chunk(audio_in_t *ai, unsigned char *buffer)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
714 {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
715 int ret;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
716
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
717 switch (ai->type) {
27390
9d95dc936e66 Introduce CONFIG_ALSA preprocessor directive for ALSA 0.9 and 1.x.
diego
parents: 27387
diff changeset
718 #ifdef CONFIG_ALSA
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
719 case AUDIO_IN_ALSA:
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
720 //device opened in non-blocking mode
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
721 ret = snd_pcm_readi(ai->alsa.handle, buffer, ai->alsa.chunk_size);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
722 if (ret != ai->alsa.chunk_size) {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
723 if (ret < 0) {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
724 if (ret==-EAGAIN) return -1;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
725 mp_msg(MSGT_RADIO, MSGL_ERR, MSGTR_MPDEMUX_AUDIOIN_ErrReadingAudio, snd_strerror(ret));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
726 if (ret == -EPIPE) {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
727 if (ai_alsa_xrun(ai) == 0) {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
728 mp_msg(MSGT_RADIO, MSGL_ERR, MSGTR_MPDEMUX_AUDIOIN_XRUNSomeFramesMayBeLeftOut);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
729 } else {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
730 mp_msg(MSGT_RADIO, MSGL_ERR, MSGTR_MPDEMUX_AUDIOIN_ErrFatalCannotRecover);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
731 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
732 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
733 } else {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
734 mp_msg(MSGT_RADIO, MSGL_ERR, MSGTR_MPDEMUX_AUDIOIN_NotEnoughSamples);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
735 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
736 return -1;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
737 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
738 return ret;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
739 #endif
27341
e7c989f7a7c9 Start unifying names of internal preprocessor directives.
diego
parents: 26737
diff changeset
740 #ifdef CONFIG_OSS_AUDIO
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
741 case AUDIO_IN_OSS:
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
742 {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
743 int bt=0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
744 /*
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
745 we must return exactly blocksize bytes, so if we have got any bytes
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
746 at first call to read, we will loop untils get all blocksize bytes
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
747 otherwise we will return -1
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
748 */
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
749 while(bt<ai->blocksize){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
750 //device opened in non-blocking mode
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
751 ret = read(ai->oss.audio_fd, buffer+bt, ai->blocksize-bt);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
752 if (ret==ai->blocksize) return ret;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
753 if (ret<0){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
754 if (errno==EAGAIN && bt==0) return -1; //no data avail yet
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
755 if (errno==EAGAIN) { usleep(1000); continue;} //nilling buffer to blocksize size
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
756 mp_msg(MSGT_RADIO, MSGL_ERR, MSGTR_MPDEMUX_AUDIOIN_ErrReadingAudio, strerror(errno));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
757 return -1;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
758 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
759 bt+=ret;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
760 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
761 return bt;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
762 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
763 #endif
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
764 default:
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
765 return -1;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
766 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
767 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
768 /*****************************************************************
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
769 * \brief grab next frame from audio device
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
770 * \parameter buffer - store buffer
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
771 * \parameter len - store buffer size in bytes
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
772 * \return number of bytes written into buffer
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
773 *
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
774 * grabs len (or less) bytes from ringbuffer into buffer
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
775 * if ringbuffer is empty waits until len bytes of data will be available
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
776 *
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
777 * priv->audio_cnt - size (in bytes) of ringbuffer's filled part
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
778 * priv->audio_drop - size (in bytes) of dropped data (if no space in ringbuffer)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
779 * priv->audio_head - index of first byte in filled part
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
780 * priv->audio_tail - index of last byte in filled part
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
781 *
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
782 * NOTE: audio_tail always aligned by priv->audio_in.blocksize
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
783 * audio_head may NOT.
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
784 */
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
785 static int grab_audio_frame(radio_priv_t *priv, char *buffer, int len)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
786 {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
787 int i;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
788 mp_msg(MSGT_RADIO, MSGL_DBG3, MSGTR_RADIO_BufferString,"grab_audio_frame",priv->audio_cnt,priv->audio_drop);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27390
diff changeset
789 /* Cache buffer must be filled by some audio packets when playing starts.
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
790 Otherwise MPlayer will quit with EOF error.
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
791 Probably, there is need more carefull checking rather than simple 'for' loop
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
792 (something like timer or similar).
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27390
diff changeset
793
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
794 1000ms delay will happen only at first buffer filling. At next call function
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
795 just fills buffer until either buffer full or no data from driver available.
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
796 */
24821
3b23a0e6fe7b Don't wait for filling entire audio ringbuffer at each call to grab_audio_frame.
voroshil
parents: 24820
diff changeset
797 for (i=0;i<1000 && !priv->audio_cnt; i++){
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
798 //read_chunk fills exact priv->blocksize bytes
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
799 if(read_chunk(&priv->audio_in, priv->audio_ringbuffer+priv->audio_tail) < 0){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
800 //sleppeing only when waiting first block to fill empty buffer
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
801 if (!priv->audio_cnt){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
802 usleep(1000);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
803 continue;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
804 }else
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
805 break;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
806 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
807 priv->audio_cnt+=priv->audio_in.blocksize;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
808 priv->audio_tail = (priv->audio_tail+priv->audio_in.blocksize) % priv->audio_buffer_size;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
809 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
810 if(priv->audio_cnt<len)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
811 len=priv->audio_cnt;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
812 memcpy(buffer, priv->audio_ringbuffer+priv->audio_head,len);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
813 priv->audio_head = (priv->audio_head+len) % priv->audio_buffer_size;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
814 priv->audio_cnt-=len;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
815 return len;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
816 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
817 /*****************************************************************
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
818 * \brief init audio device
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
819 * \return STREAM_OK if success, STREAM_ERROR otherwise
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
820 */
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
821 static int init_audio(radio_priv_t *priv)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
822 {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
823 int is_oss=1;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
824 int seconds=2;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
825 char* tmp;
25962
afa125da85cf typo fix: inited --> initialized
diego
parents: 25691
diff changeset
826 if (priv->audio_initialized) return 1;
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
827
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
828 /* do_capture==0 mplayer was not started with capture keyword, so disabling capture*/
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
829 if(!priv->do_capture)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
830 return STREAM_OK;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
831
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
832 if (!priv->radio_param->adevice){
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
833 priv->do_capture=0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
834 return STREAM_OK;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
835 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
836
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
837 priv->do_capture=1;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
838 mp_msg(MSGT_RADIO,MSGL_V,MSGTR_RADIO_CaptureStarting);
27390
9d95dc936e66 Introduce CONFIG_ALSA preprocessor directive for ALSA 0.9 and 1.x.
diego
parents: 27387
diff changeset
839 #ifdef CONFIG_ALSA
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
840 while ((tmp = strrchr(priv->radio_param->adevice, '='))){
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
841 tmp[0] = ':';
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
842 //adevice option looks like ALSA device name. Switching to ALSA
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
843 is_oss=0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
844 }
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
845 while ((tmp = strrchr(priv->radio_param->adevice, '.')))
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
846 tmp[0] = ',';
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
847 #endif
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
848
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
849 if(audio_in_init(&priv->audio_in, is_oss?AUDIO_IN_OSS:AUDIO_IN_ALSA)<0){
24019
27eeab564338 Fix warning: too many arguments for format
cehoyos
parents: 23890
diff changeset
850 mp_msg(MSGT_RADIO, MSGL_ERR, MSGTR_RADIO_AudioInInitFailed);
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
851 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
852
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
853 audio_in_set_device(&priv->audio_in, priv->radio_param->adevice);
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
854 audio_in_set_channels(&priv->audio_in, priv->radio_param->achannels);
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
855 audio_in_set_samplerate(&priv->audio_in, priv->radio_param->arate);
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
856
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
857 if (audio_in_setup(&priv->audio_in) < 0) {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
858 mp_msg(MSGT_RADIO, MSGL_ERR, MSGTR_RADIO_AudioInSetupFailed, strerror(errno));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
859 return STREAM_ERROR;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
860 }
27341
e7c989f7a7c9 Start unifying names of internal preprocessor directives.
diego
parents: 26737
diff changeset
861 #ifdef CONFIG_OSS_AUDIO
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
862 if(is_oss)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
863 ioctl(priv->audio_in.oss.audio_fd, SNDCTL_DSP_NONBLOCK, 0);
24583
af12ba770230 Fix compilation with enabled radio capture and disabled OSS audio.
voroshil
parents: 24257
diff changeset
864 #endif
27390
9d95dc936e66 Introduce CONFIG_ALSA preprocessor directive for ALSA 0.9 and 1.x.
diego
parents: 27387
diff changeset
865 #ifdef CONFIG_ALSA
24583
af12ba770230 Fix compilation with enabled radio capture and disabled OSS audio.
voroshil
parents: 24257
diff changeset
866 if(!is_oss)
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
867 snd_pcm_nonblock(priv->audio_in.alsa.handle,1);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
868 #endif
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
869
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
870 priv->audio_buffer_size = seconds*priv->audio_in.samplerate*priv->audio_in.channels*
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
871 priv->audio_in.bytes_per_sample+priv->audio_in.blocksize;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
872 if (priv->audio_buffer_size < 256*priv->audio_in.blocksize)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
873 priv->audio_buffer_size = 256*priv->audio_in.blocksize;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
874 mp_msg(MSGT_RADIO, MSGL_V, MSGTR_RADIO_AudioBuffer,
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
875 priv->audio_buffer_size,priv->audio_in.blocksize);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
876 /* start capture */
19606
832d6f6f805e Do not cast calloc/malloc results
reimar
parents: 19568
diff changeset
877 priv->audio_ringbuffer = calloc(1, priv->audio_buffer_size);
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
878 if (!priv->audio_ringbuffer) {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
879 mp_msg(MSGT_RADIO, MSGL_ERR, MSGTR_RADIO_AllocateBufferFailed,priv->audio_in.blocksize, priv->audio_buffer_size, strerror(errno));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
880 return STREAM_ERROR;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
881 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
882 priv->audio_head = 0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
883 priv->audio_tail = 0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
884 priv->audio_cnt = 0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
885 priv->audio_drop = 0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
886
24820
833520054ee5 Add missing call to audio_in_start_capture.
voroshil
parents: 24583
diff changeset
887 audio_in_start_capture(&priv->audio_in);
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
888
25962
afa125da85cf typo fix: inited --> initialized
diego
parents: 25691
diff changeset
889 priv->audio_initialized = 1;
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
890
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
891 return STREAM_OK;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
892 }
27341
e7c989f7a7c9 Start unifying names of internal preprocessor directives.
diego
parents: 26737
diff changeset
893 #endif /* CONFIG_RADIO_CAPTURE */
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
894
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
895 /*-------------------------------------------------------------------------
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
896 for call from mplayer.c
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
897 --------------------------------------------------------------------------*/
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
898 /*****************************************************************
20968
1e6ebb9e49eb add public wrapper for get_frequency
voroshil
parents: 20967
diff changeset
899 * \brief public wrapper for get_frequency
1e6ebb9e49eb add public wrapper for get_frequency
voroshil
parents: 20967
diff changeset
900 * \parameter frequency pointer to float, which will contain frequency in MHz
1e6ebb9e49eb add public wrapper for get_frequency
voroshil
parents: 20967
diff changeset
901 * \return 1 if success,0 - otherwise
1e6ebb9e49eb add public wrapper for get_frequency
voroshil
parents: 20967
diff changeset
902 */
1e6ebb9e49eb add public wrapper for get_frequency
voroshil
parents: 20967
diff changeset
903 int radio_get_freq(struct stream_st *stream, float* frequency){
1e6ebb9e49eb add public wrapper for get_frequency
voroshil
parents: 20967
diff changeset
904 radio_priv_t* priv=(radio_priv_t*)stream->priv;
1e6ebb9e49eb add public wrapper for get_frequency
voroshil
parents: 20967
diff changeset
905
1e6ebb9e49eb add public wrapper for get_frequency
voroshil
parents: 20967
diff changeset
906 if (!frequency)
1e6ebb9e49eb add public wrapper for get_frequency
voroshil
parents: 20967
diff changeset
907 return 0;
1e6ebb9e49eb add public wrapper for get_frequency
voroshil
parents: 20967
diff changeset
908 if (get_frequency(priv,frequency)!=STREAM_OK){
1e6ebb9e49eb add public wrapper for get_frequency
voroshil
parents: 20967
diff changeset
909 return 0;
1e6ebb9e49eb add public wrapper for get_frequency
voroshil
parents: 20967
diff changeset
910 }
1e6ebb9e49eb add public wrapper for get_frequency
voroshil
parents: 20967
diff changeset
911 return 1;
1e6ebb9e49eb add public wrapper for get_frequency
voroshil
parents: 20967
diff changeset
912 }
1e6ebb9e49eb add public wrapper for get_frequency
voroshil
parents: 20967
diff changeset
913 /*****************************************************************
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
914 * \brief public wrapper for set_frequency
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
915 * \parameter frequency frequency in MHz
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
916 * \return 1 if success,0 - otherwise
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
917 */
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
918 int radio_set_freq(struct stream_st *stream, float frequency){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
919 radio_priv_t* priv=(radio_priv_t*)stream->priv;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
920
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
921 if (set_frequency(priv,frequency)!=STREAM_OK){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
922 return 0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
923 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
924 if (get_frequency(priv,&frequency)!=STREAM_OK){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
925 return 0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
926 }
20967
460da4c85cb4 Change verbosity level from MSGL_V to MSGL_INFO for "Current frequency is"
voroshil
parents: 20806
diff changeset
927 mp_msg(MSGT_RADIO, MSGL_INFO, MSGTR_RADIO_CurrentFreq,frequency);
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
928 return 1;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
929 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
930
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
931 /*****************************************************************
21042
c549c2de24ce new slave command: radio_step_freq
voroshil
parents: 20985
diff changeset
932 * \brief tune current frequency by step_interval value
c549c2de24ce new slave command: radio_step_freq
voroshil
parents: 20985
diff changeset
933 * \parameter step_interval increment value
c549c2de24ce new slave command: radio_step_freq
voroshil
parents: 20985
diff changeset
934 * \return 1 if success,0 - otherwise
c549c2de24ce new slave command: radio_step_freq
voroshil
parents: 20985
diff changeset
935 *
c549c2de24ce new slave command: radio_step_freq
voroshil
parents: 20985
diff changeset
936 */
c549c2de24ce new slave command: radio_step_freq
voroshil
parents: 20985
diff changeset
937 int radio_step_freq(struct stream_st *stream, float step_interval){
c549c2de24ce new slave command: radio_step_freq
voroshil
parents: 20985
diff changeset
938 float frequency;
c549c2de24ce new slave command: radio_step_freq
voroshil
parents: 20985
diff changeset
939 radio_priv_t* priv=(radio_priv_t*)stream->priv;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27390
diff changeset
940
21042
c549c2de24ce new slave command: radio_step_freq
voroshil
parents: 20985
diff changeset
941 if (get_frequency(priv,&frequency)!=STREAM_OK)
c549c2de24ce new slave command: radio_step_freq
voroshil
parents: 20985
diff changeset
942 return 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27390
diff changeset
943
21042
c549c2de24ce new slave command: radio_step_freq
voroshil
parents: 20985
diff changeset
944 frequency+=step_interval;
c549c2de24ce new slave command: radio_step_freq
voroshil
parents: 20985
diff changeset
945 if (frequency>priv->rangehigh)
c549c2de24ce new slave command: radio_step_freq
voroshil
parents: 20985
diff changeset
946 frequency=priv->rangehigh;
c549c2de24ce new slave command: radio_step_freq
voroshil
parents: 20985
diff changeset
947 if (frequency<priv->rangelow)
c549c2de24ce new slave command: radio_step_freq
voroshil
parents: 20985
diff changeset
948 frequency=priv->rangelow;
c549c2de24ce new slave command: radio_step_freq
voroshil
parents: 20985
diff changeset
949
c549c2de24ce new slave command: radio_step_freq
voroshil
parents: 20985
diff changeset
950 return radio_set_freq(stream,frequency);
c549c2de24ce new slave command: radio_step_freq
voroshil
parents: 20985
diff changeset
951 }
c549c2de24ce new slave command: radio_step_freq
voroshil
parents: 20985
diff changeset
952 /*****************************************************************
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
953 * \brief step channel up or down
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
954 * \parameter direction RADIO_CHANNEL_LOWER - go to prev channel,RADIO_CHANNEL_HIGHER - to next
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
955 * \return 1 if success,0 - otherwise
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
956 *
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
957 * if channel parameter is NULL function prints error message and does nothing, otherwise
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
958 * changes channel to prev or next in list
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
959 */
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
960 int radio_step_channel(struct stream_st *stream, int direction) {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
961 radio_priv_t* priv=(radio_priv_t*)stream->priv;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
962
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
963 if (priv->radio_channel_list) {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
964 switch (direction){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
965 case RADIO_CHANNEL_HIGHER:
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
966 if (priv->radio_channel_current->next)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
967 priv->radio_channel_current = priv->radio_channel_current->next;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
968 else
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
969 priv->radio_channel_current = priv->radio_channel_list;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
970 if(!radio_set_freq(stream,priv->radio_channel_current->freq))
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
971 return 0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
972 mp_msg(MSGT_RADIO, MSGL_V, MSGTR_RADIO_SelectedChannel,
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
973 priv->radio_channel_current->index, priv->radio_channel_current->name,
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
974 priv->radio_channel_current->freq);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
975 break;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
976 case RADIO_CHANNEL_LOWER:
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
977 if (priv->radio_channel_current->prev)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
978 priv->radio_channel_current = priv->radio_channel_current->prev;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
979 else
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
980 while (priv->radio_channel_current->next)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
981 priv->radio_channel_current = priv->radio_channel_current->next;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
982 if(!radio_set_freq(stream,priv->radio_channel_current->freq))
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
983 return 0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
984 mp_msg(MSGT_RADIO, MSGL_V, MSGTR_RADIO_SelectedChannel,
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
985 priv->radio_channel_current->index, priv->radio_channel_current->name,
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
986 priv->radio_channel_current->freq);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
987 break;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
988 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
989 }else
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
990 mp_msg(MSGT_RADIO, MSGL_ERR, MSGTR_RADIO_ChangeChannelNoChannelList);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
991 return 1;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
992 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
993
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
994 /*****************************************************************
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
995 * \brief change channel to one with given index
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
996 * \parameter channel string, containing channel number
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
997 * \return 1 if success,0 - otherwise
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
998 *
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
999 * if channel parameter is NULL function prints error message and does nothing, otherwise
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1000 * changes channel to given
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1001 */
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1002 int radio_set_channel(struct stream_st *stream, char *channel) {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1003 radio_priv_t* priv=(radio_priv_t*)stream->priv;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1004 int i, channel_int;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1005 radio_channels_t* tmp;
19793
6c98f3566af1 ability to pass channel name (not only number) to radio_set_channel
voroshil
parents: 19618
diff changeset
1006 char* endptr;
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1007
19793
6c98f3566af1 ability to pass channel name (not only number) to radio_set_channel
voroshil
parents: 19618
diff changeset
1008 if (*channel=='\0')
6c98f3566af1 ability to pass channel name (not only number) to radio_set_channel
voroshil
parents: 19618
diff changeset
1009 mp_msg(MSGT_RADIO,MSGL_ERR,MSGTR_RADIO_WrongChannelName,channel);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27390
diff changeset
1010
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1011 if (priv->radio_channel_list) {
19793
6c98f3566af1 ability to pass channel name (not only number) to radio_set_channel
voroshil
parents: 19618
diff changeset
1012 channel_int = strtol(channel,&endptr,10);
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1013 tmp = priv->radio_channel_list;
19793
6c98f3566af1 ability to pass channel name (not only number) to radio_set_channel
voroshil
parents: 19618
diff changeset
1014 if (*endptr!='\0'){
6c98f3566af1 ability to pass channel name (not only number) to radio_set_channel
voroshil
parents: 19618
diff changeset
1015 //channel is not a number, so it contains channel name
6c98f3566af1 ability to pass channel name (not only number) to radio_set_channel
voroshil
parents: 19618
diff changeset
1016 for ( ; tmp; tmp=tmp->next)
6c98f3566af1 ability to pass channel name (not only number) to radio_set_channel
voroshil
parents: 19618
diff changeset
1017 if (!strncmp(channel,tmp->name,sizeof(tmp->name)-1))
6c98f3566af1 ability to pass channel name (not only number) to radio_set_channel
voroshil
parents: 19618
diff changeset
1018 break;
6c98f3566af1 ability to pass channel name (not only number) to radio_set_channel
voroshil
parents: 19618
diff changeset
1019 if (!tmp){
6c98f3566af1 ability to pass channel name (not only number) to radio_set_channel
voroshil
parents: 19618
diff changeset
1020 mp_msg(MSGT_RADIO,MSGL_ERR,MSGTR_RADIO_WrongChannelName,channel);
6c98f3566af1 ability to pass channel name (not only number) to radio_set_channel
voroshil
parents: 19618
diff changeset
1021 return 0;
6c98f3566af1 ability to pass channel name (not only number) to radio_set_channel
voroshil
parents: 19618
diff changeset
1022 }
6c98f3566af1 ability to pass channel name (not only number) to radio_set_channel
voroshil
parents: 19618
diff changeset
1023 }else{
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1024 for (i = 1; i < channel_int; i++)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1025 if (tmp->next)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1026 tmp = tmp->next;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1027 else
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1028 break;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1029 if (tmp->index!=channel_int){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1030 mp_msg(MSGT_RADIO,MSGL_ERR,MSGTR_RADIO_WrongChannelNumberInt,channel_int);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1031 return 0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1032 }
19793
6c98f3566af1 ability to pass channel name (not only number) to radio_set_channel
voroshil
parents: 19618
diff changeset
1033 }
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1034 priv->radio_channel_current=tmp;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1035 mp_msg(MSGT_RADIO, MSGL_V, MSGTR_RADIO_SelectedChannel, priv->radio_channel_current->index,
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1036 priv->radio_channel_current->name, priv->radio_channel_current->freq);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1037 if(!radio_set_freq(stream, priv->radio_channel_current->freq))
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1038 return 0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1039 } else
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1040 mp_msg(MSGT_RADIO, MSGL_ERR, MSGTR_RADIO_ChangeChannelNoChannelList);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1041 return 1;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1042 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1043
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1044 /*****************************************************************
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1045 * \brief get current channel's name
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1046 * \return pointer to string, containing current channel's name
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1047 *
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1048 * NOTE: return value may be NULL (e.g. when channel list not initialized)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1049 */
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1050 char* radio_get_channel_name(struct stream_st *stream){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1051 radio_priv_t* priv=(radio_priv_t*)stream->priv;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1052 if (priv->radio_channel_current) {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1053 return priv->radio_channel_current->name;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1054 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1055 return NULL;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1056 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1057
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1058 /*****************************************************************
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1059 * \brief fills given buffer with audio data
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1060 * \return number of bytes, written into buffer
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1061 */
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1062 static int fill_buffer_s(struct stream_st *s, char* buffer, int max_len){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1063 int len=max_len;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1064
27341
e7c989f7a7c9 Start unifying names of internal preprocessor directives.
diego
parents: 26737
diff changeset
1065 #ifdef CONFIG_RADIO_CAPTURE
23485
f6b20f40a854 Fix compiler warnings.
voroshil
parents: 22948
diff changeset
1066 radio_priv_t* priv=(radio_priv_t*)s->priv;
f6b20f40a854 Fix compiler warnings.
voroshil
parents: 22948
diff changeset
1067
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1068 if (priv->do_capture){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1069 len=grab_audio_frame(priv, buffer,max_len);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1070 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1071 else
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1072 #endif
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1073 memset(buffer,0,len);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1074 return len;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1075 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1076
22754
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1077
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1078 /*
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27390
diff changeset
1079 order if significant!
22754
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1080 when no driver explicitly specified first available will be used
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1081 */
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1082 static const radio_driver_t* radio_drivers[]={
27370
14c5017f40d2 Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents: 27341
diff changeset
1083 #ifdef CONFIG_RADIO_BSDBT848
22928
09f2039f1113 Fix typo in r22772 which causes compilation error under *BSD.
voroshil
parents: 22754
diff changeset
1084 &radio_driver_bsdbt848,
22754
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1085 #endif
27370
14c5017f40d2 Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents: 27341
diff changeset
1086 #ifdef CONFIG_RADIO_V4L2
22754
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1087 &radio_driver_v4l2,
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1088 #endif
27370
14c5017f40d2 Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents: 27341
diff changeset
1089 #ifdef CONFIG_RADIO_V4L
22754
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1090 &radio_driver_v4l,
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1091 #endif
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1092 0
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1093 };
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1094
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1095 /*****************************************************************
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1096 * Stream initialization
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1097 * \return STREAM_OK if success, STREAM_ERROR otherwise
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1098 */
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1099 static int open_s(stream_t *stream,int mode, void* opts, int* file_format) {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1100 radio_priv_t* priv;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1101 float frequency=0;
22754
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1102 int i;
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1103
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1104 if (strncmp("radio://",stream->url,8) != 0)
24257
d261f5109660 cosmetics: typo fix UNSUPORTED --> UNSUPPORTED
diego
parents: 24019
diff changeset
1105 return STREAM_UNSUPPORTED;
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1106
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1107 if(mode != STREAM_READ)
24257
d261f5109660 cosmetics: typo fix UNSUPORTED --> UNSUPPORTED
diego
parents: 24019
diff changeset
1108 return STREAM_UNSUPPORTED;
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1109
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
1110 priv=calloc(1,sizeof(radio_priv_t));
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1111
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1112 if (!priv)
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1113 return STREAM_ERROR;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1114
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1115
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
1116 priv->radio_param=opts;
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1117
27341
e7c989f7a7c9 Start unifying names of internal preprocessor directives.
diego
parents: 26737
diff changeset
1118 #ifdef CONFIG_RADIO_CAPTURE
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
1119 if (priv->radio_param->capture && strncmp("capture",priv->radio_param->capture,7)==0)
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1120 priv->do_capture=1;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1121 else
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1122 priv->do_capture=0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1123 #endif
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1124
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1125
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1126
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
1127 if (strncmp(priv->radio_param->driver,"default",7)==0)
22754
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1128 priv->driver=radio_drivers[0];
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1129 else
22754
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1130 priv->driver=NULL;
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1131
22754
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1132 mp_msg(MSGT_RADIO,MSGL_V,MSGTR_RADIO_AvailableDrivers);
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1133 for(i=0;radio_drivers[i];i++){
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1134 mp_msg(MSGT_RADIO,MSGL_V,"%s, ",radio_drivers[i]->name);
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
1135 if(strcmp(priv->radio_param->driver,radio_drivers[i]->name)==0)
22754
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1136 priv->driver=radio_drivers[i];
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1137 }
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1138 mp_msg(MSGT_RADIO,MSGL_V,"\n");
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27390
diff changeset
1139
22754
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1140 if(priv->driver)
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1141 mp_msg(MSGT_RADIO, MSGL_INFO, priv->driver->info);
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1142 else{
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
1143 mp_msg(MSGT_RADIO, MSGL_INFO, MSGTR_RADIO_DriverUnknownStr,priv->radio_param->driver);
22754
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1144 close_s(stream);
8d480f1b41df Radio driver loading rework.
voroshil
parents: 21042
diff changeset
1145 return STREAM_ERROR;
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1146 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1147
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1148 stream->type = STREAMTYPE_RADIO;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1149 /* using rawaudio demuxer */
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1150 *file_format = DEMUXER_TYPE_RAWAUDIO;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1151 stream->flags = STREAM_READ;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1152
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1153 priv->radio_fd=-1;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1154
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1155 stream->start_pos=0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1156 stream->end_pos=0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1157 stream->priv=priv;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1158 stream->close=close_s;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1159 stream->fill_buffer=fill_buffer_s;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1160
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
1161 priv->radio_fd = open(priv->radio_param->device, O_RDONLY);
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1162 if (priv->radio_fd < 0) {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1163 mp_msg(MSGT_RADIO, MSGL_ERR, MSGTR_RADIO_UnableOpenDevice,
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
1164 priv->radio_param->device, strerror(errno));
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1165 close_s(stream);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1166 return STREAM_ERROR;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1167 }
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
1168 mp_msg(MSGT_RADIO, MSGL_V, MSGTR_RADIO_RadioDevice, priv->radio_fd,priv->radio_param->device);
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1169 fcntl(priv->radio_fd, F_SETFD, FD_CLOEXEC);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1170
20737
eb15b01a50cb Restoring volume level of radio card on exit.
voroshil
parents: 19793
diff changeset
1171 get_volume(priv, &priv->old_snd_volume);
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1172 set_volume(priv,0);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1173
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1174 if (init_frac(priv)!=STREAM_OK){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1175 close_s(stream);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1176 return STREAM_ERROR;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1177 };
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1178
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
1179 if (parse_channels(priv,priv->radio_param->freq_channel,&frequency)!=STREAM_OK){
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1180 close_s(stream);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1181 return STREAM_ERROR;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1182 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1183
20758
e0f3254f3b76 Adding ability to check allowed frequency range.
voroshil
parents: 20738
diff changeset
1184 if ((frequency<priv->rangelow)||(frequency>priv->rangehigh)){
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1185 mp_msg(MSGT_RADIO, MSGL_ERR, MSGTR_RADIO_WrongFreq,frequency);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1186 close_s(stream);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1187 return STREAM_ERROR;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1188 }else
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1189 mp_msg(MSGT_RADIO, MSGL_INFO, MSGTR_RADIO_UsingFreq,frequency);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1190
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1191 if(set_frequency(priv,frequency)!=STREAM_OK){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1192 close_s(stream);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1193 return STREAM_ERROR;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1194 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1195
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1196
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1197 if (init_audio(priv)!=STREAM_OK){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1198 close_s(stream);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1199 return STREAM_ERROR;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1200 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1201
27341
e7c989f7a7c9 Start unifying names of internal preprocessor directives.
diego
parents: 26737
diff changeset
1202 #if defined(CONFIG_RADIO_CAPTURE) && defined(CONFIG_STREAM_CACHE)
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1203 if(priv->do_capture){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1204 //5 second cache
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1205 if(!stream_enable_cache(stream,5*priv->audio_in.samplerate*priv->audio_in.channels*
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1206 priv->audio_in.bytes_per_sample,2*priv->audio_in.samplerate*priv->audio_in.channels*
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1207 priv->audio_in.bytes_per_sample,priv->audio_in.blocksize)) {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1208 mp_msg(MSGT_RADIO, MSGL_ERR, MSGTR_RADIO_StreamEnableCacheFailed,strerror(errno));
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1209 close_s(stream);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1210 return STREAM_ERROR;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1211 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1212 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1213 #endif
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1214
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
1215 set_volume(priv,priv->radio_param->volume);
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1216
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1217 return STREAM_OK;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1218 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1219
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1220 /*****************************************************************
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1221 * Close stream. Clear structures.
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1222 */
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1223 static void close_s(struct stream_st * stream){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1224 radio_priv_t* priv=(radio_priv_t*)stream->priv;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1225 radio_channels_t * tmp;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1226 if (!priv) return;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1227
27341
e7c989f7a7c9 Start unifying names of internal preprocessor directives.
diego
parents: 26737
diff changeset
1228 #ifdef CONFIG_RADIO_CAPTURE
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1229 if(priv->audio_ringbuffer){
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1230 free(priv->audio_ringbuffer);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1231 priv->audio_ringbuffer=NULL;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1232 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1233
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1234 priv->do_capture=0;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1235 #endif
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1236
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1237 while (priv->radio_channel_list) {
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1238 tmp=priv->radio_channel_list;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1239 priv->radio_channel_list=priv->radio_channel_list->next;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1240 free(tmp);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1241 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1242 priv->radio_channel_current=NULL;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1243 priv->radio_channel_list=NULL;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1244
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1245 if (priv->radio_fd>0){
20796
dee98cb0b090 Move non driver-specific block to non-driver specific procedure, to avoid
voroshil
parents: 20758
diff changeset
1246 set_volume(priv, priv->old_snd_volume);
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1247 close(priv->radio_fd);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1248 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1249
23890
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
1250 if(priv->radio_param)
4587edae1790 Replacing global variables in radio:// with
voroshil
parents: 23703
diff changeset
1251 m_struct_free(&stream_opts,priv->radio_param);
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1252 free(priv);
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1253 stream->priv=NULL;
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1254 }
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1255
25211
c1d17bd6683c Mark all stream_info_t as const
reimar
parents: 24821
diff changeset
1256 const stream_info_t stream_info_radio = {
19568
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1257 "Radio stream",
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1258 "Radio",
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1259 "Vladimir Voroshilov",
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1260 "In development",
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1261 open_s,
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1262 { "radio", NULL },
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1263 &stream_opts,
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1264 1 // Urls are an option string
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1265 };
bd821fd3e244 Radio support, patch by Vladimir Voroshilov (voroshil gmail com)
reimar
parents:
diff changeset
1266