Mercurial > mplayer.hg
annotate libao2/pl_delay.c @ 10663:711159267b2d
clean up field flags:
1) cosmetic change, no reason these need to be mpeg2-specific
2) add a flag to tell when fields are ordered, so we don't have to
assume bff (which would usually be wrong) when field flags are not
available.
3) add other flags for future use :)
author | rfelker |
---|---|
date | Mon, 18 Aug 2003 14:49:06 +0000 |
parents | 12b1790038b0 |
children | 6e35326c742f |
rev | line source |
---|---|
3307
4a5d56e89735
correced memory deallocation bug and erors in comments
anders
parents:
3194
diff
changeset
|
1 /* Audio out plugin it doesnt't really do anything useful but serves |
4a5d56e89735
correced memory deallocation bug and erors in comments
anders
parents:
3194
diff
changeset
|
2 an example of how audio plugins work. It delays the output signal |
4a5d56e89735
correced memory deallocation bug and erors in comments
anders
parents:
3194
diff
changeset
|
3 by the nuber of samples set by delay=n where n is the number of |
4a5d56e89735
correced memory deallocation bug and erors in comments
anders
parents:
3194
diff
changeset
|
4 bytes. |
4a5d56e89735
correced memory deallocation bug and erors in comments
anders
parents:
3194
diff
changeset
|
5 */ |
3194
1648d11fc36c
commandline configuration of audio plugins now through struct, format conversion plugin added
anders
parents:
3107
diff
changeset
|
6 #define PLUGIN |
3107 | 7 |
8 #include <stdio.h> | |
9 #include <stdlib.h> | |
6237 | 10 #include <string.h> |
3107 | 11 |
12 #include "audio_out.h" | |
13 #include "audio_plugin.h" | |
14 #include "audio_plugin_internal.h" | |
15 #include "afmt.h" | |
16 | |
17 static ao_info_t info = | |
18 { | |
3194
1648d11fc36c
commandline configuration of audio plugins now through struct, format conversion plugin added
anders
parents:
3107
diff
changeset
|
19 "Delay audio plugin", |
3107 | 20 "delay", |
21 "Anders", | |
22 "" | |
23 }; | |
24 | |
25 LIBAO_PLUGIN_EXTERN(delay) | |
26 | |
27 // local data | |
28 typedef struct pl_delay_s | |
29 { | |
30 void* data; // local audio data block | |
31 void* delay; // data block used for delaying audio signal | |
32 int len; // local buffer length | |
33 int rate; // local data rate | |
34 int channels; // local number of channels | |
35 int format; // local format | |
36 } pl_delay_t; | |
37 | |
38 static pl_delay_t pl_delay={NULL,NULL,0,0,0,0}; | |
39 | |
40 // to set/get/query special features/parameters | |
9633
12b1790038b0
64bit libao2 fix by Jens Axboe <mplayer-dev@kernel.dk>
alex
parents:
7472
diff
changeset
|
41 static int control(int cmd,void *arg){ |
3107 | 42 switch(cmd){ |
43 case AOCONTROL_PLUGIN_SET_LEN: | |
44 if(pl_delay.data) | |
3307
4a5d56e89735
correced memory deallocation bug and erors in comments
anders
parents:
3194
diff
changeset
|
45 free(pl_delay.data); |
3194
1648d11fc36c
commandline configuration of audio plugins now through struct, format conversion plugin added
anders
parents:
3107
diff
changeset
|
46 pl_delay.len = ao_plugin_data.len; |
1648d11fc36c
commandline configuration of audio plugins now through struct, format conversion plugin added
anders
parents:
3107
diff
changeset
|
47 pl_delay.data=(void*)malloc(ao_plugin_data.len); |
3307
4a5d56e89735
correced memory deallocation bug and erors in comments
anders
parents:
3194
diff
changeset
|
48 if(!pl_delay.data) |
4a5d56e89735
correced memory deallocation bug and erors in comments
anders
parents:
3194
diff
changeset
|
49 return CONTROL_ERROR; |
3107 | 50 return CONTROL_OK; |
51 } | |
52 return -1; | |
53 } | |
54 | |
55 // open & setup audio device | |
56 // return: 1=success 0=fail | |
57 static int init(){ | |
3307
4a5d56e89735
correced memory deallocation bug and erors in comments
anders
parents:
3194
diff
changeset
|
58 float time_delay; // The time in [s] this plugin delays the output data |
4a5d56e89735
correced memory deallocation bug and erors in comments
anders
parents:
3194
diff
changeset
|
59 |
4a5d56e89735
correced memory deallocation bug and erors in comments
anders
parents:
3194
diff
changeset
|
60 /* If the output format of any of the below parameters differs from |
3107 | 61 what is give it should be changed. See ao_plugin init() */ |
62 pl_delay.rate=ao_plugin_data.rate; | |
3307
4a5d56e89735
correced memory deallocation bug and erors in comments
anders
parents:
3194
diff
changeset
|
63 pl_delay.channels=ao_plugin_data.channels; //1=mono 2=stereo |
3107 | 64 pl_delay.format=ao_plugin_data.format; |
65 | |
66 // Tell ao_plugin how much this plugin adds to the overall time delay | |
3194
1648d11fc36c
commandline configuration of audio plugins now through struct, format conversion plugin added
anders
parents:
3107
diff
changeset
|
67 time_delay=-1*(float)ao_plugin_cfg.pl_delay_len/((float)pl_delay.channels*(float)pl_delay.rate); |
3107 | 68 if(pl_delay.format != AFMT_U8 && pl_delay.format != AFMT_S8) |
69 time_delay/=2; | |
70 ao_plugin_data.delay_fix+=time_delay; | |
71 | |
3307
4a5d56e89735
correced memory deallocation bug and erors in comments
anders
parents:
3194
diff
changeset
|
72 // Create buffer for the delayed data |
3194
1648d11fc36c
commandline configuration of audio plugins now through struct, format conversion plugin added
anders
parents:
3107
diff
changeset
|
73 pl_delay.delay=(void*)malloc(ao_plugin_cfg.pl_delay_len); |
3107 | 74 if(!pl_delay.delay) |
75 return 0; | |
3307
4a5d56e89735
correced memory deallocation bug and erors in comments
anders
parents:
3194
diff
changeset
|
76 memset(pl_delay.delay, 0, ao_plugin_cfg.pl_delay_len); |
4a5d56e89735
correced memory deallocation bug and erors in comments
anders
parents:
3194
diff
changeset
|
77 |
4a5d56e89735
correced memory deallocation bug and erors in comments
anders
parents:
3194
diff
changeset
|
78 // Print some cool remark of what the plugin does |
3194
1648d11fc36c
commandline configuration of audio plugins now through struct, format conversion plugin added
anders
parents:
3107
diff
changeset
|
79 printf("[pl_delay] Output sound delayed by %i bytes\n",ao_plugin_cfg.pl_delay_len); |
3107 | 80 return 1; |
81 } | |
82 | |
83 // close plugin | |
84 static void uninit(){ | |
85 if(pl_delay.delay) | |
86 free(pl_delay.delay); | |
87 if(pl_delay.data) | |
88 free(pl_delay.data); | |
3194
1648d11fc36c
commandline configuration of audio plugins now through struct, format conversion plugin added
anders
parents:
3107
diff
changeset
|
89 ao_plugin_cfg.pl_delay_len=0; |
3107 | 90 } |
91 | |
92 // empty buffers | |
93 static void reset(){ | |
94 int i = 0; | |
95 for(i=0;i<pl_delay.len;i++) | |
96 ((char*)pl_delay.data)[i]=0; | |
3194
1648d11fc36c
commandline configuration of audio plugins now through struct, format conversion plugin added
anders
parents:
3107
diff
changeset
|
97 for(i=0;i<ao_plugin_cfg.pl_delay_len;i++) |
3107 | 98 ((char*)pl_delay.delay)[i]=0; |
99 } | |
100 | |
101 // processes 'ao_plugin_data.len' bytes of 'data' | |
102 // called for every block of data | |
103 static int play(){ | |
104 // Copy end of prev block to begining of buffer | |
4374
0a95c5074c50
Fixed sig 11 caused by resampling plugin, some cosmetic changes and speed improvements
anders
parents:
3307
diff
changeset
|
105 memcpy(pl_delay.data,pl_delay.delay,ao_plugin_cfg.pl_delay_len); |
3107 | 106 // Copy current block except end |
4374
0a95c5074c50
Fixed sig 11 caused by resampling plugin, some cosmetic changes and speed improvements
anders
parents:
3307
diff
changeset
|
107 memcpy(pl_delay.data+ao_plugin_cfg.pl_delay_len, |
0a95c5074c50
Fixed sig 11 caused by resampling plugin, some cosmetic changes and speed improvements
anders
parents:
3307
diff
changeset
|
108 ao_plugin_data.data, |
0a95c5074c50
Fixed sig 11 caused by resampling plugin, some cosmetic changes and speed improvements
anders
parents:
3307
diff
changeset
|
109 ao_plugin_data.len-ao_plugin_cfg.pl_delay_len); |
3107 | 110 // Save away end of current block for next call |
4374
0a95c5074c50
Fixed sig 11 caused by resampling plugin, some cosmetic changes and speed improvements
anders
parents:
3307
diff
changeset
|
111 memcpy(pl_delay.delay, |
0a95c5074c50
Fixed sig 11 caused by resampling plugin, some cosmetic changes and speed improvements
anders
parents:
3307
diff
changeset
|
112 ao_plugin_data.data+ao_plugin_data.len-ao_plugin_cfg.pl_delay_len, |
0a95c5074c50
Fixed sig 11 caused by resampling plugin, some cosmetic changes and speed improvements
anders
parents:
3307
diff
changeset
|
113 ao_plugin_cfg.pl_delay_len); |
3107 | 114 // Set output data block |
115 ao_plugin_data.data=pl_delay.data; | |
116 return 1; | |
117 } | |
118 | |
119 | |
120 | |
3307
4a5d56e89735
correced memory deallocation bug and erors in comments
anders
parents:
3194
diff
changeset
|
121 |
4a5d56e89735
correced memory deallocation bug and erors in comments
anders
parents:
3194
diff
changeset
|
122 |
4a5d56e89735
correced memory deallocation bug and erors in comments
anders
parents:
3194
diff
changeset
|
123 |
4a5d56e89735
correced memory deallocation bug and erors in comments
anders
parents:
3194
diff
changeset
|
124 |
4a5d56e89735
correced memory deallocation bug and erors in comments
anders
parents:
3194
diff
changeset
|
125 |
4a5d56e89735
correced memory deallocation bug and erors in comments
anders
parents:
3194
diff
changeset
|
126 |
4a5d56e89735
correced memory deallocation bug and erors in comments
anders
parents:
3194
diff
changeset
|
127 |
4a5d56e89735
correced memory deallocation bug and erors in comments
anders
parents:
3194
diff
changeset
|
128 |
4a5d56e89735
correced memory deallocation bug and erors in comments
anders
parents:
3194
diff
changeset
|
129 |