Lines 249-254
int JackOSSDriver::OpenInput()
Link Here
|
249 |
{ |
249 |
{ |
250 |
int flags = 0; |
250 |
int flags = 0; |
251 |
int gFragFormat; |
251 |
int gFragFormat; |
|
|
252 |
int fragment_size = 0; |
252 |
int cur_capture_channels; |
253 |
int cur_capture_channels; |
253 |
int cur_sample_format; |
254 |
int cur_sample_format; |
254 |
jack_nframes_t cur_sample_rate; |
255 |
jack_nframes_t cur_sample_rate; |
Lines 276-282
int JackOSSDriver::OpenInput()
Link Here
|
276 |
jack_info("JackOSSDriver::OpenInput driver forced the number of capture channels %ld", fCaptureChannels); |
277 |
jack_info("JackOSSDriver::OpenInput driver forced the number of capture channels %ld", fCaptureChannels); |
277 |
} |
278 |
} |
278 |
|
279 |
|
279 |
gFragFormat = (2 << 16) + int2pow2(fEngineControl->fBufferSize * fSampleSize * fCaptureChannels); |
280 |
fInputBufferSize = fEngineControl->fBufferSize * fSampleSize * fCaptureChannels; |
|
|
281 |
gFragFormat = (2 << 16) + int2pow2(fInputBufferSize); |
282 |
if (!fIgnoreHW && (1 << (gFragFormat & 0x1f)) - fInputBufferSize >= fSampleSize * fCaptureChannels) { |
283 |
// Not a power of 2 buffer size, request 8 quarter fragments for steady operation. |
284 |
gFragFormat = (8 << 16) + int2pow2(fInputBufferSize >> 2); |
285 |
} |
280 |
if (ioctl(fInFD, SNDCTL_DSP_SETFRAGMENT, &gFragFormat) == -1) { |
286 |
if (ioctl(fInFD, SNDCTL_DSP_SETFRAGMENT, &gFragFormat) == -1) { |
281 |
jack_error("JackOSSDriver::OpenInput failed to set fragments : %s@%i, errno = %d", __FILE__, __LINE__, errno); |
287 |
jack_error("JackOSSDriver::OpenInput failed to set fragments : %s@%i, errno = %d", __FILE__, __LINE__, errno); |
282 |
goto error; |
288 |
goto error; |
Lines 300-316
int JackOSSDriver::OpenInput()
Link Here
|
300 |
jack_info("JackOSSDriver::OpenInput driver forced the sample rate %ld", fEngineControl->fSampleRate); |
306 |
jack_info("JackOSSDriver::OpenInput driver forced the sample rate %ld", fEngineControl->fSampleRate); |
301 |
} |
307 |
} |
302 |
|
308 |
|
303 |
fInputBufferSize = 0; |
309 |
if (ioctl(fInFD, SNDCTL_DSP_GETBLKSIZE, &fragment_size) == -1) { |
304 |
if (ioctl(fInFD, SNDCTL_DSP_GETBLKSIZE, &fInputBufferSize) == -1) { |
|
|
305 |
jack_error("JackOSSDriver::OpenInput failed to get fragments : %s@%i, errno = %d", __FILE__, __LINE__, errno); |
310 |
jack_error("JackOSSDriver::OpenInput failed to get fragments : %s@%i, errno = %d", __FILE__, __LINE__, errno); |
306 |
goto error; |
311 |
goto error; |
307 |
} |
312 |
} |
308 |
|
313 |
|
309 |
if (fInputBufferSize < fEngineControl->fBufferSize * fSampleSize * fCaptureChannels) { |
314 |
if ((gFragFormat >> 16) == 2 && fragment_size != fInputBufferSize) { |
310 |
if (fIgnoreHW) { |
315 |
if (fIgnoreHW) { |
311 |
int new_buffer_size = fInputBufferSize / (fSampleSize * fCaptureChannels); |
316 |
int new_buffer_size = fragment_size / (fSampleSize * fCaptureChannels); |
312 |
jack_info("JackOSSDriver::OpenInput driver forced buffer size %ld", new_buffer_size); |
317 |
jack_info("JackOSSDriver::OpenInput driver forced buffer size %ld", new_buffer_size); |
313 |
JackAudioDriver::SetBufferSize(new_buffer_size); // never fails |
318 |
JackAudioDriver::SetBufferSize(new_buffer_size); // never fails |
|
|
319 |
fInputBufferSize = fEngineControl->fBufferSize * fSampleSize * fCaptureChannels; |
314 |
} else { |
320 |
} else { |
315 |
jack_error("JackOSSDriver::OpenInput wanted buffer size cannot be obtained"); |
321 |
jack_error("JackOSSDriver::OpenInput wanted buffer size cannot be obtained"); |
316 |
goto error; |
322 |
goto error; |
Lines 330-335
int JackOSSDriver::OpenOutput()
Link Here
|
330 |
{ |
336 |
{ |
331 |
int flags = 0; |
337 |
int flags = 0; |
332 |
int gFragFormat; |
338 |
int gFragFormat; |
|
|
339 |
int fragment_size = 0; |
333 |
int cur_sample_format; |
340 |
int cur_sample_format; |
334 |
int cur_playback_channels; |
341 |
int cur_playback_channels; |
335 |
jack_nframes_t cur_sample_rate; |
342 |
jack_nframes_t cur_sample_rate; |
Lines 350-356
int JackOSSDriver::OpenOutput()
Link Here
|
350 |
} |
357 |
} |
351 |
} |
358 |
} |
352 |
|
359 |
|
353 |
gFragFormat = (2 << 16) + int2pow2(fEngineControl->fBufferSize * fSampleSize * fPlaybackChannels); |
360 |
fOutputBufferSize = fEngineControl->fBufferSize * fSampleSize * fPlaybackChannels; |
|
|
361 |
gFragFormat = (2 << 16) + int2pow2(fOutputBufferSize); |
362 |
if (!fIgnoreHW && (1 << (gFragFormat & 0x1f)) - fOutputBufferSize >= fSampleSize * fCaptureChannels) { |
363 |
// Not a power of 2 buffer size, request 8 quarter fragments for steady operation. |
364 |
gFragFormat = (8 << 16) + int2pow2(fOutputBufferSize >> 2); |
365 |
} |
354 |
if (ioctl(fOutFD, SNDCTL_DSP_SETFRAGMENT, &gFragFormat) == -1) { |
366 |
if (ioctl(fOutFD, SNDCTL_DSP_SETFRAGMENT, &gFragFormat) == -1) { |
355 |
jack_error("JackOSSDriver::OpenOutput failed to set fragments : %s@%i, errno = %d", __FILE__, __LINE__, errno); |
367 |
jack_error("JackOSSDriver::OpenOutput failed to set fragments : %s@%i, errno = %d", __FILE__, __LINE__, errno); |
356 |
goto error; |
368 |
goto error; |
Lines 380-401
int JackOSSDriver::OpenOutput()
Link Here
|
380 |
goto error; |
392 |
goto error; |
381 |
} |
393 |
} |
382 |
if (cur_sample_rate != fEngineControl->fSampleRate) { |
394 |
if (cur_sample_rate != fEngineControl->fSampleRate) { |
383 |
jack_info("JackOSSDriver::OpenInput driver forced the sample rate %ld", fEngineControl->fSampleRate); |
395 |
jack_info("JackOSSDriver::OpenOutput driver forced the sample rate %ld", fEngineControl->fSampleRate); |
384 |
} |
396 |
} |
385 |
|
397 |
|
386 |
fOutputBufferSize = 0; |
398 |
if (ioctl(fOutFD, SNDCTL_DSP_GETBLKSIZE, &fragment_size) == -1) { |
387 |
if (ioctl(fOutFD, SNDCTL_DSP_GETBLKSIZE, &fOutputBufferSize) == -1) { |
|
|
388 |
jack_error("JackOSSDriver::OpenOutput failed to get fragments : %s@%i, errno = %d", __FILE__, __LINE__, errno); |
399 |
jack_error("JackOSSDriver::OpenOutput failed to get fragments : %s@%i, errno = %d", __FILE__, __LINE__, errno); |
389 |
goto error; |
400 |
goto error; |
390 |
} |
401 |
} |
391 |
|
402 |
|
392 |
if (fOutputBufferSize < fEngineControl->fBufferSize * fSampleSize * fPlaybackChannels) { |
403 |
if ((gFragFormat >> 16) == 2 && fragment_size != fOutputBufferSize) { |
393 |
if (fIgnoreHW) { |
404 |
if (fIgnoreHW) { |
394 |
int new_buffer_size = fOutputBufferSize / (fSampleSize * fPlaybackChannels); |
405 |
int new_buffer_size = fragment_size / (fSampleSize * fPlaybackChannels); |
395 |
jack_info("JackOSSDriver::OpenOutput driver forced buffer size %ld", new_buffer_size); |
406 |
jack_info("JackOSSDriver::OpenOutput driver forced buffer size %ld", new_buffer_size); |
396 |
JackAudioDriver::SetBufferSize(new_buffer_size); // never fails |
407 |
JackAudioDriver::SetBufferSize(new_buffer_size); // never fails |
|
|
408 |
fOutputBufferSize = fEngineControl->fBufferSize * fSampleSize * fPlaybackChannels; |
397 |
} else { |
409 |
} else { |
398 |
jack_error("JackOSSDriver::OpenInput wanted buffer size cannot be obtained"); |
410 |
jack_error("JackOSSDriver::OpenOutput wanted buffer size cannot be obtained"); |
399 |
goto error; |
411 |
goto error; |
400 |
} |
412 |
} |
401 |
} |
413 |
} |
Lines 860-866
SERVER_EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLocke
Link Here
|
860 |
break; |
872 |
break; |
861 |
|
873 |
|
862 |
case 'b': |
874 |
case 'b': |
863 |
ignorehwbuf = true; |
875 |
ignorehwbuf = (bool)param->value.i; |
864 |
break; |
876 |
break; |
865 |
|
877 |
|
866 |
case 'e': |
878 |
case 'e': |