mirror of https://github.com/mpv-player/mpv
fixed AFMT_ stuff (inclue afmt.h)
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@1059 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
7d96a77e0d
commit
0b3d0c82a7
22
dec_audio.c
22
dec_audio.c
|
@ -3,19 +3,7 @@
|
|||
#include <stdlib.h>
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#ifdef USE_OSS_AUDIO
|
||||
#include <sys/soundcard.h>
|
||||
#endif
|
||||
#ifdef USE_SUN_AUDIO
|
||||
#include <sys/types.h>
|
||||
#include <sys/audioio.h>
|
||||
#define AFMT_MU_LAW AUDIO_ENCODING_ULAW
|
||||
#define AFMT_A_LAW AUDIO_ENCODING_ALAW
|
||||
#define AFMT_S16_LE AUDIO_ENCODING_LINEAR
|
||||
#define AFMT_IMA_ADPCM AUDIO_ENCODING_DVI
|
||||
#define AFMT_U8 AUDIO_ENCODING_LINEAR8
|
||||
#endif
|
||||
#include "libao2/afmt.h"
|
||||
|
||||
extern int verbose; // defined in mplayer.c
|
||||
|
||||
|
@ -172,12 +160,8 @@ case 2: {
|
|||
switch(sh_audio->format){ // hardware formats:
|
||||
case 0x6: sh_audio->sample_format=AFMT_A_LAW;break;
|
||||
case 0x7: sh_audio->sample_format=AFMT_MU_LAW;break;
|
||||
#if !defined(__NetBSD__)
|
||||
case 0x11: sh_audio->sample_format=AFMT_IMA_ADPCM;break;
|
||||
#endif
|
||||
#if !defined(__sun) && !defined(__NetBSD__)
|
||||
case 0x50: sh_audio->sample_format=AFMT_MPEG;break;
|
||||
#endif
|
||||
// case 0x2000: sh_audio->sample_format=AFMT_AC3;
|
||||
default: sh_audio->sample_format=(sh_audio->samplesize==2)?AFMT_S16_LE:AFMT_U8;
|
||||
}
|
||||
|
@ -278,12 +262,10 @@ int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int maxlen){
|
|||
switch(sh_audio->codec->driver){
|
||||
case 1: // MPEG layer 2 or 3
|
||||
len=MP3_DecodeFrame(buf,-1);
|
||||
sh_audio->channels=2; // hack
|
||||
break;
|
||||
case 2: // AVI PCM
|
||||
{ len=demux_read_data(sh_audio->ds,buf,minlen);
|
||||
len=demux_read_data(sh_audio->ds,buf,minlen);
|
||||
break;
|
||||
}
|
||||
case 8: // DVD PCM
|
||||
{ int j;
|
||||
len=demux_read_data(sh_audio->ds,buf,minlen);
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
|
||||
/* Defines that AFMT_ stuff */
|
||||
|
||||
#ifdef HAVE_SYS_SOUNDCARD_H
|
||||
#include <sys/soundcard.h> /* For AFMT_* on linux */
|
||||
#endif
|
||||
|
||||
/* standard, old OSS audio formats */
|
||||
#ifndef AFMT_MU_LAW
|
||||
# define AFMT_MU_LAW 0x00000001
|
||||
# define AFMT_A_LAW 0x00000002
|
||||
# define AFMT_IMA_ADPCM 0x00000004
|
||||
# define AFMT_U8 0x00000008
|
||||
# define AFMT_S16_LE 0x00000010 /* Little endian signed 16*/
|
||||
# define AFMT_S16_BE 0x00000020 /* Big endian signed 16 */
|
||||
# define AFMT_S8 0x00000040
|
||||
# define AFMT_U16_LE 0x00000080 /* Little endian U16 */
|
||||
# define AFMT_U16_BE 0x00000100 /* Big endian U16 */
|
||||
#endif
|
||||
|
||||
#ifndef AFMT_MPEG
|
||||
# define AFMT_MPEG 0x00000200 /* MPEG (2) audio */
|
||||
#endif
|
||||
|
||||
#ifndef AFMT_AC3
|
||||
# define AFMT_AC3 0x00000400 /* Dolby Digital AC3 */
|
||||
#endif
|
||||
|
||||
/* 32 bit formats (MSB aligned) formats */
|
||||
#ifndef AFMT_S32_LE
|
||||
# define AFMT_S32_LE 0x00001000
|
||||
# define AFMT_S32_BE 0x00002000
|
||||
#endif
|
||||
|
|
@ -5,13 +5,13 @@
|
|||
*/
|
||||
|
||||
#include <errno.h>
|
||||
#include <sys/soundcard.h> /* AFMT_* */
|
||||
#include <sys/asoundlib.h>
|
||||
|
||||
#include "../config.h"
|
||||
|
||||
#include "audio_out.h"
|
||||
#include "audio_out_internal.h"
|
||||
#include "afmt.h"
|
||||
|
||||
extern int verbose;
|
||||
|
||||
|
|
|
@ -7,13 +7,13 @@
|
|||
*/
|
||||
|
||||
#include <errno.h>
|
||||
#include <sys/soundcard.h> /* AFMT_* */
|
||||
#include <sys/asoundlib.h>
|
||||
|
||||
#include "../config.h"
|
||||
|
||||
#include "audio_out.h"
|
||||
#include "audio_out_internal.h"
|
||||
#include "afmt.h"
|
||||
|
||||
extern int verbose;
|
||||
|
||||
|
|
|
@ -5,13 +5,13 @@
|
|||
*/
|
||||
|
||||
#include <errno.h>
|
||||
#include <sys/soundcard.h> /* AFMT_* */
|
||||
#include <sys/asoundlib.h>
|
||||
|
||||
#include "../config.h"
|
||||
|
||||
#include "audio_out.h"
|
||||
#include "audio_out_internal.h"
|
||||
#include "afmt.h"
|
||||
|
||||
extern int verbose;
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
|
||||
#include "audio_out.h"
|
||||
#include "audio_out_internal.h"
|
||||
//#include "afmt.h"
|
||||
|
||||
static ao_info_t info =
|
||||
{
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
#include "audio_out.h"
|
||||
#include "audio_out_internal.h"
|
||||
#include "afmt.h"
|
||||
|
||||
static ao_info_t info =
|
||||
{
|
||||
|
@ -46,6 +47,27 @@ static char *dsp="/dev/audio";
|
|||
static int queued_bursts = 0;
|
||||
static int audio_fd=-1;
|
||||
|
||||
// convert an OSS audio format specification into a sun audio encoding
|
||||
static int oss2sunfmt(int oss_format)
|
||||
{
|
||||
switch (oss_format){
|
||||
case AFMT_MU_LAW:
|
||||
return AUDIO_ENCODING_ULAW;
|
||||
case AFMT_A_LAW:
|
||||
return AUDIO_ENCODING_ALAW;
|
||||
case AFMT_S16_LE:
|
||||
return AUDIO_ENCODING_LINEAR;
|
||||
case AFMT_U8:
|
||||
return AUDIO_ENCODING_LINEAR8;
|
||||
#ifdef AUDIO_ENCODING_DVI // Missing on NetBSD...
|
||||
case AFMT_IMA_ADPCM:
|
||||
return AUDIO_ENCODING_DVI;
|
||||
#endif
|
||||
default:
|
||||
return AUDIO_ENCODING_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
// to set/get/query special features/parameters
|
||||
static int control(int cmd,int arg){
|
||||
switch(cmd){
|
||||
|
@ -76,18 +98,16 @@ static int init(int rate,int channels,int format,int flags){
|
|||
ioctl(audio_fd, AUDIO_DRAIN, 0);
|
||||
|
||||
AUDIO_INITINFO(&info);
|
||||
info.play.encoding = ao_format = format;
|
||||
info.play.precision = (format==AUDIO_ENCODING_LINEAR? AUDIO_PRECISION_16:AUDIO_PRECISION_8);
|
||||
info.play.encoding = oss2sunfmt(ao_format = format);
|
||||
info.play.precision = (format==AFMT_S16_LE? AUDIO_PRECISION_16:AUDIO_PRECISION_8);
|
||||
info.play.channels = ao_channels = channels;
|
||||
--ao_channels;
|
||||
info.play.sample_rate = ao_samplerate = rate;
|
||||
info.play.samples = 0;
|
||||
info.play.eof = 0;
|
||||
if(ioctl (audio_fd, AUDIO_SETINFO, &info)<0)
|
||||
printf("audio_setup: your card doesn't support %d Hz samplerate\n",rate);
|
||||
byte_per_sec = (channels
|
||||
* (format==AUDIO_ENCODING_LINEAR ? 16 : 8)
|
||||
* rate);
|
||||
printf("audio_setup: your card doesn't support %d channel, %s, %d Hz samplerate\n",channels,audio_out_format_name(format),rate);
|
||||
byte_per_sec = (channels * info.play.precision * rate);
|
||||
ao_outburst=byte_per_sec > 100000 ? 16384 : 8192;
|
||||
queued_bursts = 0;
|
||||
|
||||
|
@ -113,6 +133,8 @@ static int init(int rate,int channels,int format,int flags){
|
|||
return 0;
|
||||
}
|
||||
#ifdef __svr4__
|
||||
// remove the 0 bytes from the above ao_buffersize measurement from the
|
||||
// audio driver's STREAMS queue
|
||||
ioctl(audio_fd, I_FLUSH, FLUSHW);
|
||||
#endif
|
||||
ioctl(audio_fd, AUDIO_DRAIN, 0);
|
||||
|
@ -132,6 +154,7 @@ static void reset(){
|
|||
audio_info_t info;
|
||||
|
||||
#ifdef __svr4__
|
||||
// throw away buffered data in the audio driver's STREAMS queue
|
||||
ioctl(audio_fd, I_FLUSH, FLUSHW);
|
||||
#endif
|
||||
uninit();
|
||||
|
@ -144,8 +167,8 @@ static void reset(){
|
|||
ioctl(audio_fd, AUDIO_DRAIN, 0);
|
||||
|
||||
AUDIO_INITINFO(&info);
|
||||
info.play.encoding = ao_format;
|
||||
info.play.precision = (ao_format==AUDIO_ENCODING_LINEAR? AUDIO_PRECISION_16:AUDIO_PRECISION_8);
|
||||
info.play.encoding = oss2sunfmt(ao_format);
|
||||
info.play.precision = (ao_format==AFMT_S16_LE? AUDIO_PRECISION_16:AUDIO_PRECISION_8);
|
||||
info.play.channels = ao_channels+1;
|
||||
info.play.sample_rate = ao_samplerate;
|
||||
info.play.samples = 0;
|
||||
|
|
|
@ -2,26 +2,8 @@
|
|||
#include <stdlib.h>
|
||||
|
||||
#include "../config.h"
|
||||
|
||||
#include "audio_out.h"
|
||||
|
||||
#include <sys/soundcard.h> /* AFMT_* */
|
||||
|
||||
#ifndef SOUNCARD_H
|
||||
# define AFMT_MU_LAW 0x00000001
|
||||
# define AFMT_A_LAW 0x00000002
|
||||
# define AFMT_IMA_ADPCM 0x00000004
|
||||
# define AFMT_U8 0x00000008
|
||||
# define AFMT_S16_LE 0x00000010 /* Little endian signed 16*/
|
||||
# define AFMT_S16_BE 0x00000020 /* Big endian signed 16 */
|
||||
# define AFMT_S8 0x00000040
|
||||
# define AFMT_U16_LE 0x00000080 /* Little endian U16 */
|
||||
# define AFMT_U16_BE 0x00000100 /* Big endian U16 */
|
||||
# define AFMT_MPEG 0x00000200 /* MPEG (2) audio */
|
||||
/* 32 bit formats (MSB aligned) formats */
|
||||
# define AFMT_S32_LE 0x00001000
|
||||
# define AFMT_S32_BE 0x00002000
|
||||
#endif
|
||||
#include "afmt.h"
|
||||
|
||||
// there are some globals:
|
||||
int ao_samplerate=0;
|
||||
|
@ -99,10 +81,16 @@ char *audio_out_format_name(int format)
|
|||
return("Unsigned 16-bit (Big-Endian)");
|
||||
case AFMT_MPEG:
|
||||
return("MPEG (2) audio");
|
||||
// the following two formats are not available with old linux kernel
|
||||
// headers (e.g. in 2.2.16)
|
||||
#ifdef AFMT_S32_LE
|
||||
case AFMT_S32_LE:
|
||||
return("Signed 32-bit (Little-Endian");
|
||||
return("Signed 32-bit (Little-Endian)");
|
||||
#endif
|
||||
#ifdef AFMT_S32_BE
|
||||
case AFMT_S32_BE:
|
||||
return("Signed 32-bit (Big-Endian");
|
||||
return("Signed 32-bit (Big-Endian)");
|
||||
#endif
|
||||
}
|
||||
return("Unknown");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue