summaryrefslogtreecommitdiffstats
path: root/libmpdemux
diff options
context:
space:
mode:
Diffstat (limited to 'libmpdemux')
-rw-r--r--libmpdemux/Makefile122
-rw-r--r--libmpdemux/ai_alsa.c166
-rw-r--r--libmpdemux/ai_alsa1x.c185
-rw-r--r--libmpdemux/ai_oss.c139
-rw-r--r--libmpdemux/asf_mmst_streaming.c665
-rw-r--r--libmpdemux/asf_streaming.c882
-rw-r--r--libmpdemux/audio_in.c219
-rw-r--r--libmpdemux/audio_in.h75
-rw-r--r--libmpdemux/cache2.c367
-rw-r--r--libmpdemux/cdd.h77
-rw-r--r--libmpdemux/cdda.c391
-rw-r--r--libmpdemux/cddb.c878
-rw-r--r--libmpdemux/cdinfo.c137
-rw-r--r--libmpdemux/cookies.c278
-rw-r--r--libmpdemux/cookies.h16
-rw-r--r--libmpdemux/cue_read.c604
-rw-r--r--libmpdemux/cue_read.h7
-rw-r--r--libmpdemux/dvb_tune.c791
-rw-r--r--libmpdemux/dvbin.c870
-rw-r--r--libmpdemux/dvbin.h118
-rw-r--r--libmpdemux/dvdnav_stream.c396
-rw-r--r--libmpdemux/dvdnav_stream.h46
-rw-r--r--libmpdemux/freesdp/common.c226
-rw-r--r--libmpdemux/freesdp/common.h352
-rw-r--r--libmpdemux/freesdp/errorlist.c72
-rw-r--r--libmpdemux/freesdp/parser.c1958
-rw-r--r--libmpdemux/freesdp/parser.h728
-rw-r--r--libmpdemux/freesdp/parserpriv.h118
-rw-r--r--libmpdemux/freesdp/priv.h274
-rw-r--r--libmpdemux/frequencies.c1169
-rw-r--r--libmpdemux/frequencies.h111
-rw-r--r--libmpdemux/http.c948
-rw-r--r--libmpdemux/http.h52
-rw-r--r--libmpdemux/librtsp/rtsp.c804
-rw-r--r--libmpdemux/librtsp/rtsp.h84
-rw-r--r--libmpdemux/librtsp/rtsp_rtp.c700
-rw-r--r--libmpdemux/librtsp/rtsp_rtp.h41
-rw-r--r--libmpdemux/librtsp/rtsp_session.c269
-rw-r--r--libmpdemux/librtsp/rtsp_session.h42
-rw-r--r--libmpdemux/mf.c153
-rw-r--r--libmpdemux/mf.h19
-rw-r--r--libmpdemux/netstream.h136
-rw-r--r--libmpdemux/network.c657
-rw-r--r--libmpdemux/network.h68
-rw-r--r--libmpdemux/open.c49
-rw-r--r--libmpdemux/pnm.c921
-rw-r--r--libmpdemux/realrtsp/asmrp.c677
-rw-r--r--libmpdemux/realrtsp/asmrp.h45
-rw-r--r--libmpdemux/realrtsp/real.c612
-rw-r--r--libmpdemux/realrtsp/real.h56
-rw-r--r--libmpdemux/realrtsp/rmff.c907
-rw-r--r--libmpdemux/realrtsp/rmff.h270
-rw-r--r--libmpdemux/realrtsp/sdpplin.c366
-rw-r--r--libmpdemux/realrtsp/sdpplin.h109
-rw-r--r--libmpdemux/realrtsp/xbuffer.c102
-rw-r--r--libmpdemux/realrtsp/xbuffer.h26
-rw-r--r--libmpdemux/rtp.c434
-rw-r--r--libmpdemux/rtp.h38
-rw-r--r--libmpdemux/stream.c434
-rw-r--r--libmpdemux/stream.h301
-rw-r--r--libmpdemux/stream_dvd.c851
-rw-r--r--libmpdemux/stream_dvd.h48
-rw-r--r--libmpdemux/stream_file.c162
-rw-r--r--libmpdemux/stream_ftp.c469
-rw-r--r--libmpdemux/stream_livedotcom.c119
-rw-r--r--libmpdemux/stream_netstream.c308
-rw-r--r--libmpdemux/stream_null.c45
-rw-r--r--libmpdemux/stream_pvr.c1026
-rw-r--r--libmpdemux/stream_rtsp.c176
-rw-r--r--libmpdemux/stream_smb.c148
-rw-r--r--libmpdemux/stream_vcd.c152
-rw-r--r--libmpdemux/stream_vstream.c180
-rw-r--r--libmpdemux/tv.c919
-rw-r--r--libmpdemux/tv.h200
-rw-r--r--libmpdemux/tvi_bsdbt848.c846
-rw-r--r--libmpdemux/tvi_def.h61
-rw-r--r--libmpdemux/tvi_dummy.c120
-rw-r--r--libmpdemux/tvi_v4l.c1759
-rw-r--r--libmpdemux/tvi_v4l2.c1746
-rw-r--r--libmpdemux/url.c373
-rw-r--r--libmpdemux/url.h32
-rw-r--r--libmpdemux/vcd_read.h245
-rw-r--r--libmpdemux/vcd_read_darwin.h212
-rw-r--r--libmpdemux/vcd_read_fbsd.h138
-rw-r--r--libmpdemux/vcd_read_nbsd.h199
85 files changed, 8 insertions, 32283 deletions
diff --git a/libmpdemux/Makefile b/libmpdemux/Makefile
index 5340f9b939..97c59aa0fc 100644
--- a/libmpdemux/Makefile
+++ b/libmpdemux/Makefile
@@ -12,89 +12,15 @@ SRCS = mp3_hdr.c \
# Core
SRCS += extension.c \
- mf.c \
- open.c \
- url.c \
video.c \
-ifeq ($(STREAM_CACHE),yes)
-SRCS += cache2.c
-endif
-
# Miscellaneous
-SRCS += cdinfo.c \
- cue_read.c \
- parse_es.c \
+SRCS += parse_es.c \
parse_mp4.c \
mpeg_packetizer.c \
yuv4mpeg.c \
yuv4mpeg_ratio.c \
-ifeq ($(CDDA),yes)
-SRCS += cdda.c
- ifeq ($(MPLAYER_NETWORK),yes)
- SRCS += cddb.c
- endif
-endif
-
-# Stream readers/writers
-SRCS += stream.c \
- stream_file.c \
- stream_null.c \
-
-ifeq ($(HAVE_DVD),yes)
-SRCS += stream_dvd.c
-endif
-ifeq ($(DVDNAV),yes)
-SRCS += dvdnav_stream.c
-endif
-ifeq ($(VCD),yes)
-SRCS += stream_vcd.c
-endif
-ifeq ($(FTP),yes)
-SRCS += stream_ftp.c
-endif
-ifeq ($(LIBSMBCLIENT),yes)
-SRCS += stream_smb.c
-endif
-ifeq ($(MPLAYER_NETWORK),yes)
- SRCS += stream_netstream.c
- ifeq ($(STREAMING_LIVE555),yes)
- SRCS += stream_livedotcom.c
- endif
-endif
-ifeq ($(VSTREAM),yes)
-SRCS += stream_vstream.c
-endif
-
-# TV in
-ifeq ($(TV),yes)
-SRCS += tv.c frequencies.c tvi_dummy.c
- ifeq ($(TV_BSDBT848),yes)
- SRCS += tvi_bsdbt848.c
- endif
- ifeq ($(TV_V4L2),yes)
- SRCS += tvi_v4l2.c audio_in.c
- ifeq ($(PVR),yes)
- SRCS += stream_pvr.c
- endif
- endif
- ifeq ($(TV_V4L1),yes)
- SRCS += tvi_v4l.c audio_in.c
- endif
- ifeq ($(TV_V4L),yes)
- ifeq ($(ALSA1X),yes)
- SRCS += ai_alsa1x.c
- endif
- ifeq ($(ALSA9),yes)
- SRCS += ai_alsa.c
- endif
- ifeq ($(OSS),yes)
- SRCS += ai_oss.c
- endif
- endif
-endif
-
# Demuxers
SRCS += demuxer.c \
demux_aac.c \
@@ -166,48 +92,18 @@ SRCS += demux_lavf.c
MUXERS += muxer_lavf.c
endif
-ifeq ($(MPLAYER_NETWORK),yes)
-SRCS += asf_streaming.c \
- http.c \
- network.c \
- cookies.c \
- asf_mmst_streaming.c \
- pnm.c \
- rtp.c \
- stream_rtsp.c \
-
-SRCS += realrtsp/asmrp.c \
- realrtsp/real.c \
- realrtsp/rmff.c \
- realrtsp/sdpplin.c \
- realrtsp/xbuffer.c \
-
-SRCS += librtsp/rtsp.c \
- librtsp/rtsp_rtp.c \
- librtsp/rtsp_session.c \
-
-SRCS += freesdp/common.c \
- freesdp/errorlist.c \
- freesdp/parser.c \
+ifeq ($(MENCODER),yes)
+SRCS += $(MUXERS)
+endif
ifeq ($(STREAMING_LIVE555),yes)
CPLUSPLUSSRCS = demux_rtp.cpp demux_rtp_codec.cpp
CPLUSPLUSINCLUDE = $(LIVE_INCLUDES)
endif
-endif
-
-ifeq ($(DVBIN),yes)
-SRCS += dvbin.c
-SRCS += dvb_tune.c
-endif
-
-ifeq ($(MENCODER),yes)
-SRCS += $(MUXERS)
-endif
OBJS = $(SRCS:.c=.o)
OBJS += $(CPLUSPLUSSRCS:.cpp=.o)
-INCLUDE = -I.. -I../loader $(LIBAV_INC)
+INCLUDE = -I.. -I../stream -I../loader $(LIBAV_INC)
CFLAGS = $(OPTFLAGS) $(INCLUDE) $(XMMS_CFLAGS)
CPLUSPLUSFLAGS = $(CFLAGS) $(CPLUSPLUSINCLUDE) -D__STDC_LIMIT_MACROS
CPLUSPLUS = $(CC)
@@ -229,16 +125,14 @@ $(LIBNAME): $(OBJS)
test: $(LIBNAME) test.c
$(CC) $(CFLAGS) test.c ../mp_msg.c ../osdep/shmem.c -o test \
- ./libmpdemux.a ../libmpdvdkit2/libmpdvdkit.a ../libvo/aclib.o \
+ ./libmpdemux.a ../stream/stream.a \
+ ../libmpdvdkit2/libmpdvdkit.a ../libvo/aclib.o \
../libmpcodecs/img_format.o ../libao2/afmt.o ../sub_cc.o \
../m_option.o ../subreader.o \
$(ALSA_LIB) $(VORBIS_LIB) $(CDPARANOIA_LIB) -lz -lpthread
clean:
- rm -f *.o *.a *~ \
- realrtsp/*.o realrtsp/*.a realrtsp/*~ \
- librtsp/*.o librtsp/*.a librtsp/*~ \
- freesdp/*.o freesdp/*.a freesdp/*~
+ rm -f *.o *.a *~
distclean: clean
rm -f .depend test
diff --git a/libmpdemux/ai_alsa.c b/libmpdemux/ai_alsa.c
deleted file mode 100644
index a1468bed09..0000000000
--- a/libmpdemux/ai_alsa.c
+++ /dev/null
@@ -1,166 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/time.h>
-
-#include "config.h"
-
-#include <alsa/asoundlib.h>
-#include "audio_in.h"
-#include "mp_msg.h"
-#include "help_mp.h"
-
-int ai_alsa_setup(audio_in_t *ai)
-{
- snd_pcm_hw_params_t *params;
- snd_pcm_sw_params_t *swparams;
- int buffer_size;
- int err;
- unsigned int rate;
-
- snd_pcm_hw_params_alloca(&params);
- snd_pcm_sw_params_alloca(&swparams);
-
- err = snd_pcm_hw_params_any(ai->alsa.handle, params);
- if (err < 0) {
- mp_msg(MSGT_TV, MSGL_ERR, MSGTR_MPDEMUX_AIALSA_PcmBrokenConfig);
- return -1;
- }
- err = snd_pcm_hw_params_set_access(ai->alsa.handle, params,
- SND_PCM_ACCESS_RW_INTERLEAVED);
- if (err < 0) {
- mp_msg(MSGT_TV, MSGL_ERR, MSGTR_MPDEMUX_AIALSA_UnavailableAccessType);
- return -1;
- }
- err = snd_pcm_hw_params_set_format(ai->alsa.handle, params, SND_PCM_FORMAT_S16_LE);
- if (err < 0) {
- mp_msg(MSGT_TV, MSGL_ERR, MSGTR_MPDEMUX_AIALSA_UnavailableSampleFmt);
- return -1;
- }
- err = snd_pcm_hw_params_set_channels(ai->alsa.handle, params, ai->req_channels);
- if (err < 0) {
- ai->channels = snd_pcm_hw_params_get_channels(params);
- mp_msg(MSGT_TV, MSGL_ERR, MSGTR_MPDEMUX_AIALSA_UnavailableChanCount,
- ai->channels);
- } else {
- ai->channels = ai->req_channels;
- }
-
- err = snd_pcm_hw_params_set_rate_near(ai->alsa.handle, params, ai->req_samplerate, 0);
- assert(err >= 0);
- rate = err;
- ai->samplerate = rate;
-
- ai->alsa.buffer_time = 1000000;
- ai->alsa.buffer_time = snd_pcm_hw_params_set_buffer_time_near(ai->alsa.handle, params,
- ai->alsa.buffer_time, 0);
- assert(ai->alsa.buffer_time >= 0);
- ai->alsa.period_time = ai->alsa.buffer_time / 4;
- ai->alsa.period_time = snd_pcm_hw_params_set_period_time_near(ai->alsa.handle, params,
- ai->alsa.period_time, 0);
- assert(ai->alsa.period_time >= 0);
- err = snd_pcm_hw_params(ai->alsa.handle, params);
- if (err < 0) {
- mp_msg(MSGT_TV, MSGL_ERR, MSGTR_MPDEMUX_AIALSA_CannotInstallHWParams);
- snd_pcm_hw_params_dump(params, ai->alsa.log);
- return -1;
- }
- ai->alsa.chunk_size = snd_pcm_hw_params_get_period_size(params, 0);
- buffer_size = snd_pcm_hw_params_get_buffer_size(params);
- if (ai->alsa.chunk_size == buffer_size) {
- mp_msg(MSGT_TV, MSGL_ERR, MSGTR_MPDEMUX_AIALSA_PeriodEqualsBufferSize, ai->alsa.chunk_size, (long)buffer_size);
- return -1;
- }
- snd_pcm_sw_params_current(ai->alsa.handle, swparams);
- err = snd_pcm_sw_params_set_sleep_min(ai->alsa.handle, swparams,0);
- assert(err >= 0);
- err = snd_pcm_sw_params_set_avail_min(ai->alsa.handle, swparams, ai->alsa.chunk_size);
- assert(err >= 0);
-
- err = snd_pcm_sw_params_set_start_threshold(ai->alsa.handle, swparams, 0);
- assert(err >= 0);
- err = snd_pcm_sw_params_set_stop_threshold(ai->alsa.handle, swparams, buffer_size);
- assert(err >= 0);
-
- assert(err >= 0);
- if (snd_pcm_sw_params(ai->alsa.handle, swparams) < 0) {
- mp_msg(MSGT_TV, MSGL_ERR, MSGTR_MPDEMUX_AIALSA_CannotInstallSWParams);
- snd_pcm_sw_params_dump(swparams, ai->alsa.log);
- return -1;
- }
-
- if (mp_msg_test(MSGT_TV, MSGL_V)) {
- snd_pcm_dump(ai->alsa.handle, ai->alsa.log);
- }
-
- ai->alsa.bits_per_sample = snd_pcm_format_physical_width(SND_PCM_FORMAT_S16_LE);
- ai->alsa.bits_per_frame = ai->alsa.bits_per_sample * ai->channels;
- ai->blocksize = ai->alsa.chunk_size * ai->alsa.bits_per_frame / 8;
- ai->samplesize = ai->alsa.bits_per_sample;
- ai->bytes_per_sample = ai->alsa.bits_per_sample/8;
-
- return 0;
-}
-
-int ai_alsa_init(audio_in_t *ai)
-{
- int err;
-
- err = snd_pcm_open(&ai->alsa.handle, ai->alsa.device, SND_PCM_STREAM_CAPTURE, 0);
- if (err < 0) {
- mp_msg(MSGT_TV, MSGL_ERR, MSGTR_MPDEMUX_AIALSA_ErrorOpeningAudio, snd_strerror(err));
- return -1;
- }
-
- err = snd_output_stdio_attach(&ai->alsa.log, stderr, 0);
-
- if (err < 0) {
- return -1;
- }
-
- err = ai_alsa_setup(ai);
-
- return err;
-}
-
-#ifndef timersub
-#define timersub(a, b, result) \
-do { \
- (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \
- (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \
- if ((result)->tv_usec < 0) { \
- --(result)->tv_sec; \
- (result)->tv_usec += 1000000; \
- } \
-} while (0)
-#endif
-
-int ai_alsa_xrun(audio_in_t *ai)
-{
- snd_pcm_status_t *status;
- int res;
-
- snd_pcm_status_alloca(&status);
- if ((res = snd_pcm_status(ai->alsa.handle, status))<0) {
- mp_msg(MSGT_TV, MSGL_ERR, MSGTR_MPDEMUX_AIALSA_AlsaStatusError, snd_strerror(res));
- return -1;
- }
- if (snd_pcm_status_get_state(status) == SND_PCM_STATE_XRUN) {
- struct timeval now, diff, tstamp;
- gettimeofday(&now, 0);
- snd_pcm_status_get_trigger_tstamp(status, &tstamp);
- timersub(&now, &tstamp, &diff);
- mp_msg(MSGT_TV, MSGL_ERR, MSGTR_MPDEMUX_AIALSA_AlsaXRUN,
- diff.tv_sec * 1000 + diff.tv_usec / 1000.0);
- if (mp_msg_test(MSGT_TV, MSGL_V)) {
- mp_msg(MSGT_TV, MSGL_ERR, MSGTR_MPDEMUX_AIALSA_AlsaStatus);
- snd_pcm_status_dump(status, ai->alsa.log);
- }
- if ((res = snd_pcm_prepare(ai->alsa.handle))<0) {
- mp_msg(MSGT_TV, MSGL_ERR, MSGTR_MPDEMUX_AIALSA_AlsaXRUNPrepareError, snd_strerror(res));
- return -1;
- }
- return 0; /* ok, data should be accepted again */
- }
- mp_msg(MSGT_TV, MSGL_ERR, MSGTR_MPDEMUX_AIALSA_AlsaReadWriteError);
- return -1;
-}
diff --git a/libmpdemux/ai_alsa1x.c b/libmpdemux/ai_alsa1x.c
deleted file mode 100644
index d0c6af0f98..0000000000
--- a/libmpdemux/ai_alsa1x.c
+++ /dev/null
@@ -1,185 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/time.h>
-
-#include "config.h"
-
-#include <alsa/asoundlib.h>
-#include "audio_in.h"
-#include "mp_msg.h"
-#include "help_mp.h"
-
-int ai_alsa_setup(audio_in_t *ai)
-{
- snd_pcm_hw_params_t *params;
- snd_pcm_sw_params_t *swparams;
- snd_pcm_uframes_t buffer_size, period_size;
- int err;
- int dir;
- unsigned int rate;
-
- snd_pcm_hw_params_alloca(&params);
- snd_pcm_sw_params_alloca(&swparams);
-
- err = snd_pcm_hw_params_any(ai->alsa.handle, params);
- if (err < 0) {
- mp_msg(MSGT_TV, MSGL_ERR, MSGTR_MPDEMUX_AIALSA_PcmBrokenConfig);
- return -1;
- }
-
- err = snd_pcm_hw_params_set_access(ai->alsa.handle, params,
- SND_PCM_ACCESS_RW_INTERLEAVED);
- if (err < 0) {
- mp_msg(MSGT_TV, MSGL_ERR, MSGTR_MPDEMUX_AIALSA_UnavailableAccessType);
- return -1;
- }
-
- err = snd_pcm_hw_params_set_format(ai->alsa.handle, params, SND_PCM_FORMAT_S16_LE);
- if (err < 0) {
- mp_msg(MSGT_TV, MSGL_ERR, MSGTR_MPDEMUX_AIALSA_UnavailableSampleFmt);
- return -1;
- }
-
- err = snd_pcm_hw_params_set_channels(ai->alsa.handle, params, ai->req_channels);
- if (err < 0) {
- snd_pcm_hw_params_get_channels(params, &ai->channels);
- mp_msg(MSGT_TV, MSGL_ERR, MSGTR_MPDEMUX_AIALSA_UnavailableChanCount,
- ai->channels);
- } else {
- ai->channels = ai->req_channels;
- }
-
- dir = 0;
- rate = ai->req_samplerate;
- err = snd_pcm_hw_params_set_rate_near(ai->alsa.handle, params, &rate, &dir);
- if (err < 0) {
- mp_msg(MSGT_TV, MSGL_ERR, MSGTR_MPDEMUX_AIALSA1X_CannotSetSamplerate);
- }
- ai->samplerate = rate;
-
- dir = 0;
- ai->alsa.buffer_time = 1000000;
- err = snd_pcm_hw_params_set_buffer_time_near(ai->alsa.handle, params,
- &ai->alsa.buffer_time, &dir);
- if (err < 0) {
- mp_msg(MSGT_TV, MSGL_ERR, MSGTR_MPDEMUX_AIALSA1X_CannotSetBufferTime);
- }
-
- dir = 0;
- ai->alsa.period_time = ai->alsa.buffer_time / 4;
- err = snd_pcm_hw_params_set_period_time_near(ai->alsa.handle, params,
- &ai->alsa.period_time, &dir);
- if (err < 0) {
- mp_msg(MSGT_TV, MSGL_ERR, MSGTR_MPDEMUX_AIALSA1X_CannotSetPeriodTime);
- }
-
- err = snd_pcm_hw_params(ai->alsa.handle, params);
- if (err < 0) {
- mp_msg(MSGT_TV, MSGL_ERR, MSGTR_MPDEMUX_AIALSA_CannotInstallHWParams, snd_strerror(err));
- snd_pcm_hw_params_dump(params, ai->alsa.log);
- return -1;
- }
-
- dir = -1;
- snd_pcm_hw_params_get_period_size(params, &period_size, &dir);
- snd_pcm_hw_params_get_buffer_size(params, &buffer_size);
- ai->alsa.chunk_size = period_size;
- if (period_size == buffer_size) {
- mp_msg(MSGT_TV, MSGL_ERR, MSGTR_MPDEMUX_AIALSA_PeriodEqualsBufferSize, ai->alsa.chunk_size, (long)buffer_size);
- return -1;
- }
-
- snd_pcm_sw_params_current(ai->alsa.handle, swparams);
- err = snd_pcm_sw_params_set_sleep_min(ai->alsa.handle, swparams,0);
- assert(err >= 0);
- err = snd_pcm_sw_params_set_avail_min(ai->alsa.handle, swparams, ai->alsa.chunk_size);
- assert(err >= 0);
-
- err = snd_pcm_sw_params_set_start_threshold(ai->alsa.handle, swparams, 0);
- assert(err >= 0);
- err = snd_pcm_sw_params_set_stop_threshold(ai->alsa.handle, swparams, buffer_size);
- assert(err >= 0);
-
- assert(err >= 0);
- if (snd_pcm_sw_params(ai->alsa.handle, swparams) < 0) {
- mp_msg(MSGT_TV, MSGL_ERR, MSGTR_MPDEMUX_AIALSA_CannotInstallSWParams);
- snd_pcm_sw_params_dump(swparams, ai->alsa.log);
- return -1;
- }
-
- if (mp_msg_test(MSGT_TV, MSGL_V)) {
- snd_pcm_dump(ai->alsa.handle, ai->alsa.log);
- }
-
- ai->alsa.bits_per_sample = snd_pcm_format_physical_width(SND_PCM_FORMAT_S16_LE);
- ai->alsa.bits_per_frame = ai->alsa.bits_per_sample * ai->channels;
- ai->blocksize = ai->alsa.chunk_size * ai->alsa.bits_per_frame / 8;
- ai->samplesize = ai->alsa.bits_per_sample;
- ai->bytes_per_sample = ai->alsa.bits_per_sample/8;
-
- return 0;
-}
-
-int ai_alsa_init(audio_in_t *ai)
-{
- int err;
-
- err = snd_pcm_open(&ai->alsa.handle, ai->alsa.device, SND_PCM_STREAM_CAPTURE, 0);
- if (err < 0) {
- mp_msg(MSGT_TV, MSGL_ERR, MSGTR_MPDEMUX_AIALSA_ErrorOpeningAudio, snd_strerror(err));
- return -1;</