59 |
|
|
60 |
static RD_WAVEFORMATEX rec_formats[MAX_FORMATS]; |
static RD_WAVEFORMATEX rec_formats[MAX_FORMATS]; |
61 |
static unsigned int rec_format_count; |
static unsigned int rec_format_count; |
62 |
|
static unsigned int rec_current_format; |
63 |
|
|
64 |
unsigned int queue_hi, queue_lo, queue_pending; |
unsigned int queue_hi, queue_lo, queue_pending; |
65 |
struct audio_packet packet_queue[MAX_QUEUE]; |
struct audio_packet packet_queue[MAX_QUEUE]; |
154 |
void |
void |
155 |
rdpsnd_record(const void *data, unsigned int size) |
rdpsnd_record(const void *data, unsigned int size) |
156 |
{ |
{ |
157 |
uint32 remain; |
uint32 remain, chunk; |
158 |
|
|
159 |
assert(rec_device_open); |
assert(rec_device_open); |
160 |
|
|
163 |
remain = sizeof(record_buffer) - record_buffer_size; |
remain = sizeof(record_buffer) - record_buffer_size; |
164 |
|
|
165 |
if (size >= remain) |
if (size >= remain) |
166 |
{ |
chunk = remain; |
|
memcpy(record_buffer + record_buffer_size, data, remain); |
|
|
record_buffer_size += remain; |
|
|
rdpsnd_flush_record(); |
|
|
data = (const char *) data + remain; |
|
|
size -= remain; |
|
|
} |
|
167 |
else |
else |
168 |
{ |
chunk = size; |
169 |
memcpy(record_buffer + record_buffer_size, data, size); |
|
170 |
record_buffer_size += size; |
memcpy(record_buffer + record_buffer_size, data, chunk); |
171 |
size = 0; |
|
172 |
} |
#ifdef B_ENDIAN |
173 |
|
if (current_driver->need_byteswap_on_be) |
174 |
|
rdpsnd_dsp_swapbytes(record_buffer + record_buffer_size, |
175 |
|
chunk, &rec_formats[rec_current_format]); |
176 |
|
#endif |
177 |
|
|
178 |
|
record_buffer_size += chunk; |
179 |
|
|
180 |
|
data = (const char *) data + chunk; |
181 |
|
size -= chunk; |
182 |
|
|
183 |
|
if (record_buffer_size == sizeof(record_buffer)) |
184 |
|
rdpsnd_flush_record(); |
185 |
} |
} |
186 |
} |
} |
187 |
|
|
520 |
current_driver->wave_in_close(); |
current_driver->wave_in_close(); |
521 |
break; |
break; |
522 |
} |
} |
523 |
|
rec_current_format = format; |
524 |
rec_device_open = True; |
rec_device_open = True; |
525 |
break; |
break; |
526 |
case RDPSND_REC_STOP: |
case RDPSND_REC_STOP: |