ao_mpegpes

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@2709 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
arpi 2001-11-05 03:01:11 +00:00
parent 9e418adf1e
commit 38128eab95
4 changed files with 103 additions and 1 deletions

View File

@ -4,7 +4,7 @@ include config.mak
LIBNAME = libao2.a
# TODO: moveout ao_sdl.c so it's only used when SDL is detected
SRCS=audio_out.c ao_null.c ao_pcm.c $(OPTIONAL_SRCS)
SRCS=audio_out.c ao_mpegpes.c ao_null.c ao_pcm.c $(OPTIONAL_SRCS)
OBJS=$(SRCS:.c=.o)
CFLAGS = $(OPTFLAGS) -I. -I.. $(SDL_INC) $(EXTRA_INC)

98
libao2/ao_mpegpes.c Normal file
View File

@ -0,0 +1,98 @@
#include <stdio.h>
#include <stdlib.h>
#include "audio_out.h"
#include "audio_out_internal.h"
#include "afmt.h"
static ao_info_t info =
{
"mpeg-pes audio output",
"mpegpes",
"A'rpi",
""
};
LIBAO_EXTERN(mpegpes)
// there are some globals:
// ao_samplerate
// ao_channels
// ao_format
// ao_bps
// ao_outburst
// ao_buffersize
// to set/get/query special features/parameters
static int control(int cmd,int arg){
return -1;
}
// open & setup audio device
// return: 1=success 0=fail
static int init(int rate,int channels,int format,int flags){
ao_outburst=2000;
ao_format=format;
return 1;
}
// close audio device
static void uninit(){
}
// stop playing and empty buffers (for seeking/pause)
static void reset(){
}
// stop playing, keep buffers (for pause)
static void audio_pause()
{
// for now, just call reset();
reset();
}
// resume playing, after audio_pause()
static void audio_resume()
{
}
void send_pes_packet(unsigned char* data,int len,int id,int timestamp);
void send_lpcm_packet(unsigned char* data,int len,int id,int timestamp);
extern int vo_pts;
// return: how many bytes can be played without blocking
static int get_space(){
float x=(float)(vo_pts-ao_pts)/90000.0-0.5;
int y;
if(x<=0) return 0;
y=48000*4*x;y/=ao_outburst;y*=ao_outburst;
// printf("diff: %5.3f -> %d \n",x,y);
return y;
}
// plays 'len' bytes of 'data'
// it should round it down to outburst*n
// return: number of bytes played
static int play(void* data,int len,int flags){
if(ao_format==AFMT_MPEG)
send_pes_packet(data,len,0x1C0,ao_pts);
else {
int i;
unsigned short *s=data;
for(i=0;i<len/2;i++) s[i]=(s[i]>>8)|(s[i]<<8); // le<->be
send_lpcm_packet(data,len,0xA0,ao_pts);
}
return len;
}
// return: how many unplayed bytes are in the buffer
static int get_delay(){
return 0;
}

View File

@ -12,6 +12,7 @@ int ao_format=0;
int ao_bps=0;
int ao_outburst=OUTBURST; // config.h default
int ao_buffersize=-1;
int ao_pts=0;
char *ao_subdevice = NULL;
#ifdef USE_OSS_AUDIO
@ -41,6 +42,7 @@ extern ao_functions_t audio_out_sgi;
extern ao_functions_t audio_out_dxr3;
#endif
extern ao_functions_t audio_out_pcm;
extern ao_functions_t audio_out_mpegpes;
extern ao_functions_t audio_out_pss;
ao_functions_t* audio_out_drivers[] =
@ -71,6 +73,7 @@ ao_functions_t* audio_out_drivers[] =
&audio_out_dxr3,
#endif
&audio_out_pcm,
&audio_out_mpegpes,
// &audio_out_pss,
NULL
};

View File

@ -36,6 +36,7 @@ extern int ao_format;
extern int ao_bps;
extern int ao_outburst;
extern int ao_buffersize;
extern int ao_pts;
extern char *ao_subdevice;
#define CONTROL_OK 1