annotate libmpdemux/tv.c @ 2842:aebdcb39cadb

don't set freq if channel isn't capable
author alex
date Sun, 11 Nov 2001 16:29:26 +0000
parents c63562f5f56f
children bce9c945b29c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
1 /*
98769cea155c added tv subsystem
alex
parents:
diff changeset
2 TV subsystem for libMPDemux by Alex
98769cea155c added tv subsystem
alex
parents:
diff changeset
3
98769cea155c added tv subsystem
alex
parents:
diff changeset
4 API idea based on libvo2's
98769cea155c added tv subsystem
alex
parents:
diff changeset
5
98769cea155c added tv subsystem
alex
parents:
diff changeset
6 UNDER HEAVY DEVELOPEMENT, DO NOT USE! :)
98769cea155c added tv subsystem
alex
parents:
diff changeset
7 */
98769cea155c added tv subsystem
alex
parents:
diff changeset
8
98769cea155c added tv subsystem
alex
parents:
diff changeset
9 #include <stdio.h>
98769cea155c added tv subsystem
alex
parents:
diff changeset
10 #include <stdlib.h>
98769cea155c added tv subsystem
alex
parents:
diff changeset
11 #include <unistd.h>
98769cea155c added tv subsystem
alex
parents:
diff changeset
12
98769cea155c added tv subsystem
alex
parents:
diff changeset
13 #include "config.h"
98769cea155c added tv subsystem
alex
parents:
diff changeset
14
2819
2e58962dc9fe cleaned up some warnings, and tv_param_on moved out from #ifdef USE_TV
alex
parents: 2818
diff changeset
15 int tv_param_on = 0;
2e58962dc9fe cleaned up some warnings, and tv_param_on moved out from #ifdef USE_TV
alex
parents: 2818
diff changeset
16
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
17 #ifdef USE_TV
98769cea155c added tv subsystem
alex
parents:
diff changeset
18 #include "mp_msg.h"
98769cea155c added tv subsystem
alex
parents:
diff changeset
19 #include "help_mp.h"
98769cea155c added tv subsystem
alex
parents:
diff changeset
20
98769cea155c added tv subsystem
alex
parents:
diff changeset
21 #include "stream.h"
98769cea155c added tv subsystem
alex
parents:
diff changeset
22 #include "demuxer.h"
98769cea155c added tv subsystem
alex
parents:
diff changeset
23 #include "stheader.h"
2830
596a6ba3520f never include files from public headers...
arpi
parents: 2819
diff changeset
24
596a6ba3520f never include files from public headers...
arpi
parents: 2819
diff changeset
25 #include "../libao2/afmt.h"
596a6ba3520f never include files from public headers...
arpi
parents: 2819
diff changeset
26 #include "../libvo/img_format.h"
596a6ba3520f never include files from public headers...
arpi
parents: 2819
diff changeset
27 #include "../libvo/fastmemcpy.h"
596a6ba3520f never include files from public headers...
arpi
parents: 2819
diff changeset
28
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
29 #include "tv.h"
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
30
98769cea155c added tv subsystem
alex
parents:
diff changeset
31 /* some default values */
2837
c63562f5f56f tuning worx (can set frequency)
alex
parents: 2830
diff changeset
32 char *tv_param_freq = NULL;
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
33 char *tv_param_channel = "0";
98769cea155c added tv subsystem
alex
parents:
diff changeset
34 char *tv_param_norm = "pal";
98769cea155c added tv subsystem
alex
parents:
diff changeset
35 char *tv_param_device = NULL;
98769cea155c added tv subsystem
alex
parents:
diff changeset
36 char *tv_param_driver = "dummy";
98769cea155c added tv subsystem
alex
parents:
diff changeset
37 int tv_param_width = -1;
98769cea155c added tv subsystem
alex
parents:
diff changeset
38 int tv_param_height = -1;
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
39 int tv_param_input = 0; /* used in v4l and bttv */
2817
cc93d9786954 added support for -tv outfmt
alex
parents: 2813
diff changeset
40 char *tv_param_outfmt = "yv12";
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
41
98769cea155c added tv subsystem
alex
parents:
diff changeset
42
98769cea155c added tv subsystem
alex
parents:
diff changeset
43 /* ================== DEMUX_TV ===================== */
98769cea155c added tv subsystem
alex
parents:
diff changeset
44 /*
98769cea155c added tv subsystem
alex
parents:
diff changeset
45 Return value:
98769cea155c added tv subsystem
alex
parents:
diff changeset
46 0 = EOF(?) or no stream
98769cea155c added tv subsystem
alex
parents:
diff changeset
47 1 = successfully read a packet
98769cea155c added tv subsystem
alex
parents:
diff changeset
48 */
98769cea155c added tv subsystem
alex
parents:
diff changeset
49 /* fill demux->video and demux->audio */
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
50 int demux_tv_fill_buffer(demuxer_t *demux, tvi_handle_t *tvh)
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
51 {
2810
1f0bcdb49910 tv update
alex
parents: 2802
diff changeset
52 int seq = tvh->seq++;
2813
d6d88771f5ef demuxer fixed
arpi
parents: 2810
diff changeset
53 demux_packet_t* dp;
d6d88771f5ef demuxer fixed
arpi
parents: 2810
diff changeset
54 int len;
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
55
2818
9f68d309f8cb printf's changed into mp_msg
alex
parents: 2817
diff changeset
56 mp_msg(MSGT_DEMUX, MSGL_DBG2, "demux_tv_fill_buffer(sequence:%d) called!\n", seq);
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
57
2813
d6d88771f5ef demuxer fixed
arpi
parents: 2810
diff changeset
58 // demux->filepos = -1;
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
59
2810
1f0bcdb49910 tv update
alex
parents: 2802
diff changeset
60 // seq++;
1f0bcdb49910 tv update
alex
parents: 2802
diff changeset
61 // tvh->seq++;
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
62
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
63 /* ================== ADD VIDEO PACKET =================== */
2813
d6d88771f5ef demuxer fixed
arpi
parents: 2810
diff changeset
64 len = tvh->functions->get_video_framesize(tvh->priv);
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
65
2813
d6d88771f5ef demuxer fixed
arpi
parents: 2810
diff changeset
66 dp=new_demux_packet(len);
d6d88771f5ef demuxer fixed
arpi
parents: 2810
diff changeset
67 tvh->functions->grab_video_frame(tvh->priv, dp->buffer, len);
d6d88771f5ef demuxer fixed
arpi
parents: 2810
diff changeset
68 dp->pts=seq/25.0; //(float)pts/90000.0f;
d6d88771f5ef demuxer fixed
arpi
parents: 2810
diff changeset
69 //dp->pos=pos;
d6d88771f5ef demuxer fixed
arpi
parents: 2810
diff changeset
70 //dp->flags=flags;
d6d88771f5ef demuxer fixed
arpi
parents: 2810
diff changeset
71 // append packet to DS stream:
d6d88771f5ef demuxer fixed
arpi
parents: 2810
diff changeset
72 ds_add_packet(demux->video,dp);
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
73
98769cea155c added tv subsystem
alex
parents:
diff changeset
74 /* ================== ADD AUDIO PACKET =================== */
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
75 if (tvh->functions->control(tvh->priv, TVI_CONTROL_IS_AUDIO, 0) != TVI_CONTROL_TRUE)
09d5c9834580 tv update
alex
parents: 2790
diff changeset
76 return 1; /* no audio, only video */
09d5c9834580 tv update
alex
parents: 2790
diff changeset
77
2813
d6d88771f5ef demuxer fixed
arpi
parents: 2810
diff changeset
78 len = tvh->functions->get_audio_framesize(tvh->priv);
d6d88771f5ef demuxer fixed
arpi
parents: 2810
diff changeset
79
d6d88771f5ef demuxer fixed
arpi
parents: 2810
diff changeset
80 dp=new_demux_packet(len);
d6d88771f5ef demuxer fixed
arpi
parents: 2810
diff changeset
81 tvh->functions->grab_audio_frame(tvh->priv, dp->buffer, len);
d6d88771f5ef demuxer fixed
arpi
parents: 2810
diff changeset
82 //dp->pts=pts; //(float)pts/90000.0f;
d6d88771f5ef demuxer fixed
arpi
parents: 2810
diff changeset
83 //dp->pos=pos;
d6d88771f5ef demuxer fixed
arpi
parents: 2810
diff changeset
84 //dp->flags=flags;
d6d88771f5ef demuxer fixed
arpi
parents: 2810
diff changeset
85 // append packet to DS stream:
d6d88771f5ef demuxer fixed
arpi
parents: 2810
diff changeset
86 ds_add_packet(demux->audio,dp);
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
87
98769cea155c added tv subsystem
alex
parents:
diff changeset
88 return 1;
98769cea155c added tv subsystem
alex
parents:
diff changeset
89 }
98769cea155c added tv subsystem
alex
parents:
diff changeset
90
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
91 int demux_open_tv(demuxer_t *demuxer, tvi_handle_t *tvh)
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
92 {
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
93 sh_video_t *sh_video = NULL;
09d5c9834580 tv update
alex
parents: 2790
diff changeset
94 sh_audio_t *sh_audio = NULL;
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
95 tvi_functions_t *funcs = tvh->functions;
98769cea155c added tv subsystem
alex
parents:
diff changeset
96
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
97 if (funcs->control(tvh->priv, TVI_CONTROL_IS_VIDEO, 0) != TVI_CONTROL_TRUE)
09d5c9834580 tv update
alex
parents: 2790
diff changeset
98 {
2818
9f68d309f8cb printf's changed into mp_msg
alex
parents: 2817
diff changeset
99 mp_msg(MSGT_TV, MSGL_ERR, "Error: no video input present!\n");
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
100 return;
09d5c9834580 tv update
alex
parents: 2790
diff changeset
101 }
09d5c9834580 tv update
alex
parents: 2790
diff changeset
102
09d5c9834580 tv update
alex
parents: 2790
diff changeset
103 sh_video = new_sh_video(demuxer, 0);
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
104
2817
cc93d9786954 added support for -tv outfmt
alex
parents: 2813
diff changeset
105 if (!strcasecmp(tv_param_outfmt, "yv12"))
cc93d9786954 added support for -tv outfmt
alex
parents: 2813
diff changeset
106 sh_video->format = IMGFMT_YV12;
cc93d9786954 added support for -tv outfmt
alex
parents: 2813
diff changeset
107 else if (!strcasecmp(tv_param_outfmt, "uyvy"))
cc93d9786954 added support for -tv outfmt
alex
parents: 2813
diff changeset
108 sh_video->format = IMGFMT_UYVY;
cc93d9786954 added support for -tv outfmt
alex
parents: 2813
diff changeset
109 else if (!strcasecmp(tv_param_outfmt, "rgb32"))
cc93d9786954 added support for -tv outfmt
alex
parents: 2813
diff changeset
110 sh_video->format = IMGFMT_RGB32;
cc93d9786954 added support for -tv outfmt
alex
parents: 2813
diff changeset
111 else if (!strcasecmp(tv_param_outfmt, "rgb24"))
cc93d9786954 added support for -tv outfmt
alex
parents: 2813
diff changeset
112 sh_video->format = IMGFMT_RGB24;
cc93d9786954 added support for -tv outfmt
alex
parents: 2813
diff changeset
113 else if (!strcasecmp(tv_param_outfmt, "rgb16"))
cc93d9786954 added support for -tv outfmt
alex
parents: 2813
diff changeset
114 sh_video->format = IMGFMT_RGB16;
cc93d9786954 added support for -tv outfmt
alex
parents: 2813
diff changeset
115 else if (!strcasecmp(tv_param_outfmt, "rgb15"))
cc93d9786954 added support for -tv outfmt
alex
parents: 2813
diff changeset
116 sh_video->format = IMGFMT_RGB15;
cc93d9786954 added support for -tv outfmt
alex
parents: 2813
diff changeset
117 else
cc93d9786954 added support for -tv outfmt
alex
parents: 2813
diff changeset
118 {
2818
9f68d309f8cb printf's changed into mp_msg
alex
parents: 2817
diff changeset
119 mp_msg(MSGT_TV, MSGL_ERR, "Unknown format given: %s\n", tv_param_outfmt);
9f68d309f8cb printf's changed into mp_msg
alex
parents: 2817
diff changeset
120 mp_msg(MSGT_TV, MSGL_INFO, "Using default: Planar YV12\n");
2817
cc93d9786954 added support for -tv outfmt
alex
parents: 2813
diff changeset
121 sh_video->format = IMGFMT_YV12;
cc93d9786954 added support for -tv outfmt
alex
parents: 2813
diff changeset
122 }
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
123 funcs->control(tvh->priv, TVI_CONTROL_VID_SET_FORMAT, &sh_video->format);
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
124
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
125 /* get IMGFMT_ */
09d5c9834580 tv update
alex
parents: 2790
diff changeset
126 funcs->control(tvh->priv, TVI_CONTROL_VID_GET_FORMAT, &sh_video->format);
2810
1f0bcdb49910 tv update
alex
parents: 2802
diff changeset
127 // if (IMGFMT_IS_RGB(sh_video->format) || IMGFMT_IS_BGR(sh_video->format))
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
128 sh_video->format = 0x0;
09d5c9834580 tv update
alex
parents: 2790
diff changeset
129
09d5c9834580 tv update
alex
parents: 2790
diff changeset
130 /* set FPS and FRAMETIME */
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
131 if(!sh_video->fps)
98769cea155c added tv subsystem
alex
parents:
diff changeset
132 {
98769cea155c added tv subsystem
alex
parents:
diff changeset
133 if (funcs->control(tvh->priv, TVI_CONTROL_VID_GET_FPS, &sh_video->fps) != TVI_CONTROL_TRUE)
98769cea155c added tv subsystem
alex
parents:
diff changeset
134 sh_video->fps = 24.0f;
98769cea155c added tv subsystem
alex
parents:
diff changeset
135 }
98769cea155c added tv subsystem
alex
parents:
diff changeset
136 sh_video->frametime = 1.0f/sh_video->fps;
98769cea155c added tv subsystem
alex
parents:
diff changeset
137
98769cea155c added tv subsystem
alex
parents:
diff changeset
138 /* set width */
98769cea155c added tv subsystem
alex
parents:
diff changeset
139 if (tv_param_width != -1)
98769cea155c added tv subsystem
alex
parents:
diff changeset
140 {
98769cea155c added tv subsystem
alex
parents:
diff changeset
141 if (funcs->control(tvh->priv, TVI_CONTROL_VID_CHK_WIDTH, &tv_param_width) == TVI_CONTROL_TRUE)
98769cea155c added tv subsystem
alex
parents:
diff changeset
142 {
98769cea155c added tv subsystem
alex
parents:
diff changeset
143 funcs->control(tvh->priv, TVI_CONTROL_VID_SET_WIDTH, &tv_param_width);
98769cea155c added tv subsystem
alex
parents:
diff changeset
144 sh_video->disp_w = tv_param_width;
98769cea155c added tv subsystem
alex
parents:
diff changeset
145 }
98769cea155c added tv subsystem
alex
parents:
diff changeset
146 else
98769cea155c added tv subsystem
alex
parents:
diff changeset
147 {
2818
9f68d309f8cb printf's changed into mp_msg
alex
parents: 2817
diff changeset
148 mp_msg(MSGT_TV, MSGL_ERR, "Unable set requested width: %d\n", tv_param_width);
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
149 funcs->control(tvh->priv, TVI_CONTROL_VID_GET_WIDTH, &sh_video->disp_w);
98769cea155c added tv subsystem
alex
parents:
diff changeset
150 tv_param_width = sh_video->disp_w;
98769cea155c added tv subsystem
alex
parents:
diff changeset
151 }
98769cea155c added tv subsystem
alex
parents:
diff changeset
152 }
98769cea155c added tv subsystem
alex
parents:
diff changeset
153 else
98769cea155c added tv subsystem
alex
parents:
diff changeset
154 funcs->control(tvh->priv, TVI_CONTROL_VID_GET_WIDTH, &sh_video->disp_w);
98769cea155c added tv subsystem
alex
parents:
diff changeset
155
98769cea155c added tv subsystem
alex
parents:
diff changeset
156 /* set height */
98769cea155c added tv subsystem
alex
parents:
diff changeset
157 if (tv_param_height != -1)
98769cea155c added tv subsystem
alex
parents:
diff changeset
158 {
98769cea155c added tv subsystem
alex
parents:
diff changeset
159 if (funcs->control(tvh->priv, TVI_CONTROL_VID_CHK_HEIGHT, &tv_param_height) == TVI_CONTROL_TRUE)
98769cea155c added tv subsystem
alex
parents:
diff changeset
160 {
98769cea155c added tv subsystem
alex
parents:
diff changeset
161 funcs->control(tvh->priv, TVI_CONTROL_VID_SET_HEIGHT, &tv_param_height);
98769cea155c added tv subsystem
alex
parents:
diff changeset
162 sh_video->disp_h = tv_param_height;
98769cea155c added tv subsystem
alex
parents:
diff changeset
163 }
98769cea155c added tv subsystem
alex
parents:
diff changeset
164 else
98769cea155c added tv subsystem
alex
parents:
diff changeset
165 {
2818
9f68d309f8cb printf's changed into mp_msg
alex
parents: 2817
diff changeset
166 mp_msg(MSGT_TV, MSGL_ERR, "Unable set requested height: %d\n", tv_param_height);
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
167 funcs->control(tvh->priv, TVI_CONTROL_VID_GET_HEIGHT, &sh_video->disp_h);
98769cea155c added tv subsystem
alex
parents:
diff changeset
168 tv_param_height = sh_video->disp_h;
98769cea155c added tv subsystem
alex
parents:
diff changeset
169 }
98769cea155c added tv subsystem
alex
parents:
diff changeset
170 }
98769cea155c added tv subsystem
alex
parents:
diff changeset
171 else
98769cea155c added tv subsystem
alex
parents:
diff changeset
172 funcs->control(tvh->priv, TVI_CONTROL_VID_GET_HEIGHT, &sh_video->disp_h);
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
173
2818
9f68d309f8cb printf's changed into mp_msg
alex
parents: 2817
diff changeset
174 mp_msg(MSGT_TV, MSGL_INFO, "Output size: %dx%d\n", sh_video->disp_w, sh_video->disp_h);
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
175
98769cea155c added tv subsystem
alex
parents:
diff changeset
176 demuxer->video->sh = sh_video;
98769cea155c added tv subsystem
alex
parents:
diff changeset
177 sh_video->ds = demuxer->video;
98769cea155c added tv subsystem
alex
parents:
diff changeset
178 demuxer->video->id = 0;
98769cea155c added tv subsystem
alex
parents:
diff changeset
179
98769cea155c added tv subsystem
alex
parents:
diff changeset
180 /* here comes audio init */
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
181 if (funcs->control(tvh->priv, TVI_CONTROL_IS_AUDIO, 0) == TVI_CONTROL_TRUE)
09d5c9834580 tv update
alex
parents: 2790
diff changeset
182 {
09d5c9834580 tv update
alex
parents: 2790
diff changeset
183 int audio_format;
09d5c9834580 tv update
alex
parents: 2790
diff changeset
184
09d5c9834580 tv update
alex
parents: 2790
diff changeset
185 sh_audio = new_sh_audio(demuxer, 0);
09d5c9834580 tv update
alex
parents: 2790
diff changeset
186
09d5c9834580 tv update
alex
parents: 2790
diff changeset
187 sh_audio->wf = malloc(sizeof(WAVEFORMATEX));
09d5c9834580 tv update
alex
parents: 2790
diff changeset
188 memset(sh_audio->wf, 0, sizeof(WAVEFORMATEX));
09d5c9834580 tv update
alex
parents: 2790
diff changeset
189
09d5c9834580 tv update
alex
parents: 2790
diff changeset
190 /* yeah, audio is present */
09d5c9834580 tv update
alex
parents: 2790
diff changeset
191 if (funcs->control(tvh->priv, TVI_CONTROL_AUD_GET_FORMAT, &audio_format) != TVI_CONTROL_TRUE)
09d5c9834580 tv update
alex
parents: 2790
diff changeset
192 goto no_audio;
09d5c9834580 tv update
alex
parents: 2790
diff changeset
193 switch(audio_format)
09d5c9834580 tv update
alex
parents: 2790
diff changeset
194 {
09d5c9834580 tv update
alex
parents: 2790
diff changeset
195 case AFMT_U8:
09d5c9834580 tv update
alex
parents: 2790
diff changeset
196 case AFMT_S8:
09d5c9834580 tv update
alex
parents: 2790
diff changeset
197 case AFMT_U16_LE:
09d5c9834580 tv update
alex
parents: 2790
diff changeset
198 case AFMT_U16_BE:
09d5c9834580 tv update
alex
parents: 2790
diff changeset
199 case AFMT_S16_LE:
09d5c9834580 tv update
alex
parents: 2790
diff changeset
200 case AFMT_S16_BE:
09d5c9834580 tv update
alex
parents: 2790
diff changeset
201 case AFMT_S32_LE:
09d5c9834580 tv update
alex
parents: 2790
diff changeset
202 case AFMT_S32_BE:
09d5c9834580 tv update
alex
parents: 2790
diff changeset
203 sh_audio->format = 0x1; /* PCM */
09d5c9834580 tv update
alex
parents: 2790
diff changeset
204 break;
09d5c9834580 tv update
alex
parents: 2790
diff changeset
205 case AFMT_IMA_ADPCM:
09d5c9834580 tv update
alex
parents: 2790
diff changeset
206 case AFMT_MU_LAW:
09d5c9834580 tv update
alex
parents: 2790
diff changeset
207 case AFMT_A_LAW:
09d5c9834580 tv update
alex
parents: 2790
diff changeset
208 case AFMT_MPEG:
09d5c9834580 tv update
alex
parents: 2790
diff changeset
209 case AFMT_AC3:
09d5c9834580 tv update
alex
parents: 2790
diff changeset
210 default:
2818
9f68d309f8cb printf's changed into mp_msg
alex
parents: 2817
diff changeset
211 mp_msg(MSGT_TV, MSGL_ERR, "Audio type '%s' unsupported!\n", audio_out_format_name(audio_format));
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
212 goto no_audio;
09d5c9834580 tv update
alex
parents: 2790
diff changeset
213 }
09d5c9834580 tv update
alex
parents: 2790
diff changeset
214
09d5c9834580 tv update
alex
parents: 2790
diff changeset
215 funcs->control(tvh->priv, TVI_CONTROL_AUD_GET_CHANNELS, &sh_audio->wf->nChannels);
09d5c9834580 tv update
alex
parents: 2790
diff changeset
216 funcs->control(tvh->priv, TVI_CONTROL_AUD_GET_SAMPLERATE, &sh_audio->wf->nSamplesPerSec);
09d5c9834580 tv update
alex
parents: 2790
diff changeset
217 funcs->control(tvh->priv, TVI_CONTROL_AUD_GET_SAMPLESIZE, &sh_audio->wf->nAvgBytesPerSec);
09d5c9834580 tv update
alex
parents: 2790
diff changeset
218
09d5c9834580 tv update
alex
parents: 2790
diff changeset
219 demuxer->audio->sh = sh_audio;
09d5c9834580 tv update
alex
parents: 2790
diff changeset
220 sh_audio->ds = demuxer->audio;
09d5c9834580 tv update
alex
parents: 2790
diff changeset
221 demuxer->audio->id = 0;
09d5c9834580 tv update
alex
parents: 2790
diff changeset
222 }
09d5c9834580 tv update
alex
parents: 2790
diff changeset
223 no_audio:
09d5c9834580 tv update
alex
parents: 2790
diff changeset
224
09d5c9834580 tv update
alex
parents: 2790
diff changeset
225 /* set some params got from cmdline */
09d5c9834580 tv update
alex
parents: 2790
diff changeset
226 funcs->control(tvh->priv, TVI_CONTROL_SPC_SET_INPUT, &tv_param_input);
09d5c9834580 tv update
alex
parents: 2790
diff changeset
227
2837
c63562f5f56f tuning worx (can set frequency)
alex
parents: 2830
diff changeset
228 /* we need to set frequency */
2842
aebdcb39cadb don't set freq if channel isn't capable
alex
parents: 2837
diff changeset
229 if (tv_param_freq && (funcs->control(tvh->priv, TVI_CONTROL_IS_TUNER, 0) == TVI_CONTROL_TRUE))
2837
c63562f5f56f tuning worx (can set frequency)
alex
parents: 2830
diff changeset
230 {
c63562f5f56f tuning worx (can set frequency)
alex
parents: 2830
diff changeset
231 unsigned long freq = atof(tv_param_freq)*16;
c63562f5f56f tuning worx (can set frequency)
alex
parents: 2830
diff changeset
232
c63562f5f56f tuning worx (can set frequency)
alex
parents: 2830
diff changeset
233 printf("freq: %lu\n", freq);
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
234
2837
c63562f5f56f tuning worx (can set frequency)
alex
parents: 2830
diff changeset
235 /* set freq in MHz */
c63562f5f56f tuning worx (can set frequency)
alex
parents: 2830
diff changeset
236 funcs->control(tvh->priv, TVI_CONTROL_TUN_SET_FREQ, &freq);
c63562f5f56f tuning worx (can set frequency)
alex
parents: 2830
diff changeset
237
c63562f5f56f tuning worx (can set frequency)
alex
parents: 2830
diff changeset
238 funcs->control(tvh->priv, TVI_CONTROL_TUN_GET_FREQ, &freq);
c63562f5f56f tuning worx (can set frequency)
alex
parents: 2830
diff changeset
239 mp_msg(MSGT_TV, MSGL_INFO, "Current frequency: %lu (%.3f)\n",
c63562f5f56f tuning worx (can set frequency)
alex
parents: 2830
diff changeset
240 freq, (float)freq/16);
c63562f5f56f tuning worx (can set frequency)
alex
parents: 2830
diff changeset
241 }
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
242
09d5c9834580 tv update
alex
parents: 2790
diff changeset
243 /* also start device! */
2837
c63562f5f56f tuning worx (can set frequency)
alex
parents: 2830
diff changeset
244 return(funcs->start(tvh->priv));
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
245 }
98769cea155c added tv subsystem
alex
parents:
diff changeset
246
98769cea155c added tv subsystem
alex
parents:
diff changeset
247 /* ================== STREAM_TV ===================== */
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
248 tvi_handle_t *tv_begin(void)
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
249 {
98769cea155c added tv subsystem
alex
parents:
diff changeset
250 if (!strcmp(tv_param_driver, "dummy"))
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
251 return (tvi_handle_t *)tvi_init_dummy(tv_param_device);
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
252 if (!strcmp(tv_param_driver, "v4l"))
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
253 return (tvi_handle_t *)tvi_init_v4l(tv_param_device);
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
254
98769cea155c added tv subsystem
alex
parents:
diff changeset
255 mp_msg(MSGT_TV, MSGL_ERR, "No such driver: %s\n", tv_param_driver);
98769cea155c added tv subsystem
alex
parents:
diff changeset
256 return(NULL);
98769cea155c added tv subsystem
alex
parents:
diff changeset
257 }
98769cea155c added tv subsystem
alex
parents:
diff changeset
258
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
259 int tv_init(tvi_handle_t *tvh)
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
260 {
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
261 tvi_param_t *params;
09d5c9834580 tv update
alex
parents: 2790
diff changeset
262
2818
9f68d309f8cb printf's changed into mp_msg
alex
parents: 2817
diff changeset
263 mp_msg(MSGT_TV, MSGL_INFO, "Selected driver: %s\n", tvh->info->short_name);
9f68d309f8cb printf's changed into mp_msg
alex
parents: 2817
diff changeset
264 mp_msg(MSGT_TV, MSGL_INFO, " name: %s\n", tvh->info->name);
9f68d309f8cb printf's changed into mp_msg
alex
parents: 2817
diff changeset
265 mp_msg(MSGT_TV, MSGL_INFO, " author: %s\n", tvh->info->author);
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
266 if (tvh->info->comment)
2818
9f68d309f8cb printf's changed into mp_msg
alex
parents: 2817
diff changeset
267 mp_msg(MSGT_TV, MSGL_INFO, " comment: %s\n", tvh->info->comment);
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
268
2802
09d5c9834580 tv update
alex
parents: 2790
diff changeset
269 params = malloc(sizeof(tvi_param_t)*2);
09d5c9834580 tv update
alex
parents: 2790
diff changeset
270 params[0].opt = malloc(strlen("input"));
09d5c9834580 tv update
alex
parents: 2790
diff changeset
271 sprintf((char *)params[0].opt, "input");
09d5c9834580 tv update
alex
parents: 2790
diff changeset
272 params[0].value = malloc(sizeof(int));
09d5c9834580 tv update
alex
parents: 2790
diff changeset
273 (int)*(void **)params[0].value = tv_param_input;
09d5c9834580 tv update
alex
parents: 2790
diff changeset
274 params[1].opt = params[1].value = NULL;
09d5c9834580 tv update
alex
parents: 2790
diff changeset
275
2837
c63562f5f56f tuning worx (can set frequency)
alex
parents: 2830
diff changeset
276 return(tvh->functions->init(tvh->priv, params));
c63562f5f56f tuning worx (can set frequency)
alex
parents: 2830
diff changeset
277 }
c63562f5f56f tuning worx (can set frequency)
alex
parents: 2830
diff changeset
278
c63562f5f56f tuning worx (can set frequency)
alex
parents: 2830
diff changeset
279 int tv_uninit(tvi_handle_t *tvh)
c63562f5f56f tuning worx (can set frequency)
alex
parents: 2830
diff changeset
280 {
c63562f5f56f tuning worx (can set frequency)
alex
parents: 2830
diff changeset
281 return(tvh->functions->uninit(tvh->priv));
2790
98769cea155c added tv subsystem
alex
parents:
diff changeset
282 }
98769cea155c added tv subsystem
alex
parents:
diff changeset
283 #endif /* USE_TV */