Audio update.

Alsa: report needed down sampling of 3/5/6 to 2 channels.
Moved alsa code into alsa module.
Initial OSS output support.
This commit is contained in:
Johns 2012-01-03 21:31:03 +01:00
parent 5546354cc7
commit c8e70ec0fe
6 changed files with 839 additions and 258 deletions

View File

@ -1,6 +1,7 @@
User johns User johns
Date: Date:
New audio driver oss.
Fix bug: needed down sampling of 3/5/6 to 2 channels not reported. Fix bug: needed down sampling of 3/5/6 to 2 channels not reported.
Search audio sync inside PES packets, for insane dvb streams. Search audio sync inside PES packets, for insane dvb streams.
Use only the needed number of surfaces. Use only the needed number of surfaces.

View File

@ -19,9 +19,10 @@ VERSION = $(shell grep 'static const char \*const VERSION *=' $(PLUGIN).cpp | aw
CONFIG := #-DDEBUG CONFIG := #-DDEBUG
#CONFIG += -DHAVE_PTHREAD_NAME #CONFIG += -DHAVE_PTHREAD_NAME
CONFIG += $(shell pkg-config --exists libva && echo "-DUSE_VAAPI")
CONFIG += $(shell pkg-config --exists vdpau && echo "-DUSE_VDPAU") CONFIG += $(shell pkg-config --exists vdpau && echo "-DUSE_VDPAU")
CONFIG += $(shell pkg-config --exists libva && echo "-DUSE_VAAPI")
CONFIG += $(shell pkg-config --exists alsa && echo "-DUSE_ALSA") CONFIG += $(shell pkg-config --exists alsa && echo "-DUSE_ALSA")
#CONFIG += -DUSE_OSS
### The C++ compiler and options: ### The C++ compiler and options:

View File

@ -30,10 +30,11 @@ A software and GPU emulated HD output device plugin for VDR.
o planned: Video CPU/Opengl o planned: Video CPU/Opengl
o planned: Software Deinterlacer o planned: Software Deinterlacer
o planned: Video XvBA/XvBA o planned: Video XvBA/XvBA
o Audio FFMpeg/Analog o Audio FFMpeg/Alsa/Analog
o Audio FFMpeg/Digital o Audio FFMpeg/Alsa/Digital
o planned: HDMI/SPDIF Passthrough o Audio FFMpeg/OSS/Analog
o planned: OSS support o planned: Alsa HDMI/SPDIF Passthrough
o planned: OSS HDMI/SPDIF Passthrough
To compile you must have the 'requires' installed. To compile you must have the 'requires' installed.
@ -63,6 +64,9 @@ Install:
cd vdr-softhddevice cd vdr-softhddevice
make VDRDIR=<path-to-your-vdr-files> LIBDIR=. make VDRDIR=<path-to-your-vdr-files> LIBDIR=.
You can edit Makefile to enable/disable VDPAU / VA-API / Alsa / OSS
support.
Setup: environment Setup: environment
------ ------
Following is supported: Following is supported:
@ -99,6 +103,11 @@ Setup: /etc/vdr/setup.conf
softhddevice.AudioDelay = 0 softhddevice.AudioDelay = 0
+n or -n ms +n or -n ms
Commandline:
------------
Use vdr -h to see the command line arguments support by the plugin.
Warning: Warning:
-------- --------
libav is not supported, expect many bugs with it. libav is not supported, expect many bugs with it.
@ -112,6 +121,9 @@ Requires:
media-libs/alsa-lib media-libs/alsa-lib
Advanced Linux Sound Architecture Library Advanced Linux Sound Architecture Library
http://www.alsa-project.org http://www.alsa-project.org
or
kernel support for oss/oss4 or alsa oss emulation
x11-libs/libva x11-libs/libva
Video Acceleration (VA) API for Linux Video Acceleration (VA) API for Linux
http://www.freedesktop.org/wiki/Software/vaapi http://www.freedesktop.org/wiki/Software/vaapi

3
Todo
View File

@ -27,7 +27,6 @@ missing:
atmolight atmolight
zoom/fit-zoom 4:3 zoom/fit-zoom 4:3
multistream handling multistream handling
audio out with oss/oss4
HDMI/SPDIF Passthrough HDMI/SPDIF Passthrough
disable screensaver disable screensaver
disable window cursor disable window cursor
@ -67,10 +66,8 @@ audio/alsa:
libav supports only resample of mono to 2 channels libav supports only resample of mono to 2 channels
ffmpeg didn't support resample of 5 to 2 channels ffmpeg didn't support resample of 5 to 2 channels
CodecAudioOpen can fail "can't open audio codec" and does Fatal exit. CodecAudioOpen can fail "can't open audio codec" and does Fatal exit.
insufficient thread locking around avcodec_open/close()
audio/oss: audio/oss:
add and write oss support
playback of recording playback of recording
play back is too fast play back is too fast

1052
audio.c

File diff suppressed because it is too large Load Diff

View File

@ -35,6 +35,7 @@
#include "softhddevice.h" #include "softhddevice.h"
extern "C" { extern "C" {
#include "video.h" #include "video.h"
extern void AudioPoller(void);
} }
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
@ -332,6 +333,9 @@ class cSoftHdDevice:public cDevice
virtual void GetOsdSize(int &, int &, double &); virtual void GetOsdSize(int &, int &, double &);
virtual int PlayVideo(const uchar *, int); virtual int PlayVideo(const uchar *, int);
//virtual int PlayTsVideo(const uchar *, int); //virtual int PlayTsVideo(const uchar *, int);
#ifdef USE_OSS // FIXME: testing only oss
virtual int PlayTsAudio(const uchar *, int);
#endif
virtual void SetAudioChannelDevice(int); virtual void SetAudioChannelDevice(int);
virtual int GetAudioChannelDevice(void); virtual int GetAudioChannelDevice(void);
virtual void SetDigitalAudioDevice(bool); virtual void SetDigitalAudioDevice(bool);
@ -569,6 +573,20 @@ int cSoftHdDevice::PlayTsVideo(const uchar * Data, int Length)
} }
#endif #endif
#ifdef USE_OSS // FIXME: testing only oss
///
/// Play a TS audio packet.
///
/// misuse this function as audio poller
///
int cSoftHdDevice::PlayTsAudio(const uchar * data, int length)
{
AudioPoller();
return cDevice::PlayTsAudio(data,length);
}
#endif
uchar *cSoftHdDevice::GrabImage(int &size, bool jpeg, int quality, int sizex, uchar *cSoftHdDevice::GrabImage(int &size, bool jpeg, int quality, int sizex,
int sizey) int sizey)
{ {