annotate libao2/ao_mpegpes.c @ 4559:5dc383bb1c82

added mga_top_reserved module parameter to skip a configurable amount of space at the top of video memory. this is needed to prevent corruption of the kernel's console font when using the "fastfont" option with matroxfb.
author rfelker
date Thu, 07 Feb 2002 02:07:29 +0000
parents ce1e3668fa2b
children d678ce495a75
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2708
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
1 #include <stdio.h>
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
2 #include <stdlib.h>
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
3
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
4 #include "audio_out.h"
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
5 #include "audio_out_internal.h"
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
6
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
7 #include "afmt.h"
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
8
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
9 static ao_info_t info =
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
10 {
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
11 "mpeg-pes audio output",
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
12 "mpegpes",
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
13 "A'rpi",
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
14 ""
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
15 };
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
16
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
17 LIBAO_EXTERN(mpegpes)
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
18
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
19
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
20 // to set/get/query special features/parameters
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
21 static int control(int cmd,int arg){
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
22 return -1;
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
23 }
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
24
4331
ce1e3668fa2b freq fix, removed muxer delay
arpi
parents: 4305
diff changeset
25 static int freq=0;
4300
4ebab79785b7 passing samplerate to LPCM writer - 44, 32 and 96khz are also supported from now
arpi
parents: 3095
diff changeset
26 static int freq_id=0;
4ebab79785b7 passing samplerate to LPCM writer - 44, 32 and 96khz are also supported from now
arpi
parents: 3095
diff changeset
27
2708
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
28 // open & setup audio device
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
29 // return: 1=success 0=fail
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
30 static int init(int rate,int channels,int format,int flags){
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
31
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2708
diff changeset
32 ao_data.outburst=2000;
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2708
diff changeset
33 ao_data.format=format;
4331
ce1e3668fa2b freq fix, removed muxer delay
arpi
parents: 4305
diff changeset
34 freq=rate;
4300
4ebab79785b7 passing samplerate to LPCM writer - 44, 32 and 96khz are also supported from now
arpi
parents: 3095
diff changeset
35
4ebab79785b7 passing samplerate to LPCM writer - 44, 32 and 96khz are also supported from now
arpi
parents: 3095
diff changeset
36 switch(rate){
4ebab79785b7 passing samplerate to LPCM writer - 44, 32 and 96khz are also supported from now
arpi
parents: 3095
diff changeset
37 case 48000: freq_id=0;break;
4ebab79785b7 passing samplerate to LPCM writer - 44, 32 and 96khz are also supported from now
arpi
parents: 3095
diff changeset
38 case 96000: freq_id=1;break;
4ebab79785b7 passing samplerate to LPCM writer - 44, 32 and 96khz are also supported from now
arpi
parents: 3095
diff changeset
39 case 44100: freq_id=2;break;
4ebab79785b7 passing samplerate to LPCM writer - 44, 32 and 96khz are also supported from now
arpi
parents: 3095
diff changeset
40 case 32000: freq_id=3;break;
4ebab79785b7 passing samplerate to LPCM writer - 44, 32 and 96khz are also supported from now
arpi
parents: 3095
diff changeset
41 default:
4ebab79785b7 passing samplerate to LPCM writer - 44, 32 and 96khz are also supported from now
arpi
parents: 3095
diff changeset
42 fprintf(stderr,"ao_mpegpes: %d Hz not supported, try to resample (RTFM)\n",rate);
4ebab79785b7 passing samplerate to LPCM writer - 44, 32 and 96khz are also supported from now
arpi
parents: 3095
diff changeset
43 return 0;
4ebab79785b7 passing samplerate to LPCM writer - 44, 32 and 96khz are also supported from now
arpi
parents: 3095
diff changeset
44 }
2708
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
45
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
46 return 1;
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
47 }
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
48
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
49 // close audio device
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
50 static void uninit(){
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
51
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
52 }
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
53
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
54 // stop playing and empty buffers (for seeking/pause)
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
55 static void reset(){
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
56
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
57 }
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
58
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
59 // stop playing, keep buffers (for pause)
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
60 static void audio_pause()
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
61 {
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
62 // for now, just call reset();
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
63 reset();
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
64 }
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
65
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
66 // resume playing, after audio_pause()
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
67 static void audio_resume()
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
68 {
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
69 }
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
70
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
71 void send_pes_packet(unsigned char* data,int len,int id,int timestamp);
4300
4ebab79785b7 passing samplerate to LPCM writer - 44, 32 and 96khz are also supported from now
arpi
parents: 3095
diff changeset
72 void send_lpcm_packet(unsigned char* data,int len,int id,int timestamp,int freq_id);
2708
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
73 extern int vo_pts;
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
74
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
75 // return: how many bytes can be played without blocking
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
76 static int get_space(){
4331
ce1e3668fa2b freq fix, removed muxer delay
arpi
parents: 4305
diff changeset
77 float x=(float)(vo_pts-ao_data.pts)/90000.0;
2708
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
78 int y;
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
79 if(x<=0) return 0;
4331
ce1e3668fa2b freq fix, removed muxer delay
arpi
parents: 4305
diff changeset
80 y=freq*4*x;y/=ao_data.outburst;y*=ao_data.outburst;
ce1e3668fa2b freq fix, removed muxer delay
arpi
parents: 4305
diff changeset
81 if(y>32000) y=32000;
2708
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
82 // printf("diff: %5.3f -> %d \n",x,y);
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
83 return y;
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
84 }
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
85
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
86 // plays 'len' bytes of 'data'
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
87 // it should round it down to outburst*n
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
88 // return: number of bytes played
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
89 static int play(void* data,int len,int flags){
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2708
diff changeset
90 if(ao_data.format==AFMT_MPEG)
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2708
diff changeset
91 send_pes_packet(data,len,0x1C0,ao_data.pts);
2708
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
92 else {
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
93 int i;
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
94 unsigned short *s=data;
4300
4ebab79785b7 passing samplerate to LPCM writer - 44, 32 and 96khz are also supported from now
arpi
parents: 3095
diff changeset
95 // if(len>2000) len=2000;
4305
624c73ec1c54 10l, debug printf removed
arpi
parents: 4300
diff changeset
96 // printf("ao_mpegpes: len=%d \n",len);
2708
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
97 for(i=0;i<len/2;i++) s[i]=(s[i]>>8)|(s[i]<<8); // le<->be
4300
4ebab79785b7 passing samplerate to LPCM writer - 44, 32 and 96khz are also supported from now
arpi
parents: 3095
diff changeset
98 send_lpcm_packet(data,len,0xA0,ao_data.pts,freq_id);
2708
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
99 }
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
100 return len;
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
101 }
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
102
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2708
diff changeset
103 // return: delay in seconds between first and last sample in buffer
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2708
diff changeset
104 static float get_delay(){
2708
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
105
3095
981a9e5118ce interface to libao2 changed ao_plugin added
anders
parents: 2708
diff changeset
106 return 0.0;
2708
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
107 }
b24661a9924e ao_mpegpes
arpi
parents:
diff changeset
108