Revert "alsa_sound: Calculate proxy port latency"
This reverts commit 6f72b5fba2f1020466d4a6531618331b8f8c0632.
Revert "alsa_sound: Query BT/USB streams for audio latency"
This reverts commit d46eca4d243daefb28fefbffdcb389070fd58c30.
Revert "alsa_sound: Flush Proxy data at high water mark"
This reverts commit a7e0ca0ab5f39c5840d25594f2a3d86a49aaa70f.
Revert "alsa_sound: Fix buffer pointer mismatch in proxy"
This reverts commit 6a6c9ec67be6375e00d42b12cbeb986ef5e121c3.
diff --git a/alsa_sound/ALSADevice.cpp b/alsa_sound/ALSADevice.cpp
index b58e100..5c58760 100644
--- a/alsa_sound/ALSADevice.cpp
+++ b/alsa_sound/ALSADevice.cpp
@@ -2666,7 +2666,6 @@
}
mProxyParams.mAvail = pcm_avail(capture_handle);
- mAvailInMs = (mProxyParams.mAvail*1000)/(AFE_PROXY_SAMPLE_RATE);
ALOGV("avail is = %d frames = %ld, avai_min = %d\n",\
mProxyParams.mAvail, mProxyParams.mFrames,(int)capture_handle->sw_p->avail_min);
if (mProxyParams.mAvail < capture_handle->sw_p->avail_min) {
@@ -2700,69 +2699,32 @@
*bufferSize = 0;
return err;
}
-
- //Copy only if we have data
- if(mProxyParams.mAvail > 0) {
- /* if we have reached high watermark, flush data */
- if(mProxyParams.mAvail > AFE_PROXY_HIGH_WATER_MARK_FRAME_COUNT) {
- /* throw out everything over here */
- ALOGE("available buffers in proxy %d has reached high water mark %d, throw it out ", mProxyParams.mAvail, AFE_PROXY_HIGH_WATER_MARK_FRAME_COUNT);
- capture_handle->sync_ptr->c.control.appl_ptr += mProxyParams.mAvail;
- capture_handle->sync_ptr->flags = 0;
- err = sync_ptr(capture_handle);
- if(err == EPIPE) {
- ALOGV("Failed in sync_ptr \n");
- capture_handle->running = 0;
- err = sync_ptr(capture_handle);
- }
- err = FAILED_TRANSACTION;
- *captureBuffer = NULL;
- *bufferSize = 0;
- return err;
- }
- if(mProxyParams.mX.frames > mProxyParams.mAvail) {
- mProxyParams.mFrames = mProxyParams.mAvail;
- ALOGE("Error mProxyParams.mFrames = %d", mProxyParams.mFrames);
- /* Always copy only the data thats available */
- /* case when we wake up with lesser no of bytes than 1 period */
- }
- else {
- mProxyParams.mFrames = mProxyParams.mX.frames;
- }
-
- void *data = dst_address(capture_handle);
-
- if(mProxyParams.mCaptureBuffer == NULL)
- mProxyParams.mCaptureBuffer = malloc(mProxyParams.mCaptureBufferSize);
-
- memcpy(mProxyParams.mCaptureBuffer, (char *)data,
- (mProxyParams.mFrames * 2 * 2));
-
- capture_handle->sync_ptr->c.control.appl_ptr += mProxyParams.mFrames;
- capture_handle->sync_ptr->flags = 0;
- *bufferSize = (mProxyParams.mFrames * 2 * 2);
- mProxyParams.mFrames -= mProxyParams.mFrames;
- ALOGV("Calling sync_ptr for proxy after sync with mFrames is %d", mProxyParams.mFrames);
+ if (mProxyParams.mX.frames > mProxyParams.mAvail)
+ mProxyParams.mFrames = mProxyParams.mAvail;
+ void *data = dst_address(capture_handle);
+ //TODO: Return a pointer to AudioHardware
+ if(mProxyParams.mCaptureBuffer == NULL)
+ mProxyParams.mCaptureBuffer = malloc(mProxyParams.mCaptureBufferSize);
+ memcpy(mProxyParams.mCaptureBuffer, (char *)data,
+ mProxyParams.mCaptureBufferSize);
+ mProxyParams.mX.frames -= mProxyParams.mFrames;
+ capture_handle->sync_ptr->c.control.appl_ptr += mProxyParams.mFrames;
+ capture_handle->sync_ptr->flags = 0;
+ ALOGV("Calling sync_ptr for proxy after sync");
+ err = sync_ptr(capture_handle);
+ if(err == EPIPE) {
+ ALOGV("Failed in sync_ptr \n");
+ capture_handle->running = 0;
err = sync_ptr(capture_handle);
- if(err == EPIPE) {
- ALOGV("Failed in sync_ptr \n");
- capture_handle->running = 0;
- err = sync_ptr(capture_handle);
- }
- if(err != NO_ERROR ) {
- ALOGE("Error: Sync ptr end returned %d", err);
- *captureBuffer = NULL;
- *bufferSize = 0;
- return err;
- }
- *captureBuffer = mProxyParams.mCaptureBuffer;
- } else {
- /* If we dont have data to copy just return 0 */
+ }
+ if(err != NO_ERROR ) {
+ ALOGE("Error: Sync ptr end returned %d", err);
*captureBuffer = NULL;
*bufferSize = 0;
- err = FAILED_TRANSACTION;
- ALOGE("Error Nothing copied from Proxy");
+ return err;
}
+ *captureBuffer = mProxyParams.mCaptureBuffer;
+ *bufferSize = mProxyParams.mCaptureBufferSize;
return err;
}
diff --git a/alsa_sound/AudioHardwareALSA.cpp b/alsa_sound/AudioHardwareALSA.cpp
index 6161303..1777664 100644
--- a/alsa_sound/AudioHardwareALSA.cpp
+++ b/alsa_sound/AudioHardwareALSA.cpp
@@ -2928,7 +2928,7 @@
uint32_t bytesAvailInBuffer = 0;
uint32_t proxyBufferTime = 0;
void *data;
- status_t err = NO_ERROR;
+ int err = NO_ERROR;
ssize_t size = 0;
void * outbuffer= malloc(AFE_PROXY_PERIOD_SIZE);
@@ -2958,11 +2958,6 @@
}
}
err = mALSADevice->readFromProxy(&data, &size);
- if(err == (status_t) FAILED_TRANSACTION) {
- ALOGE("readFromProxy returned an error, mostly a flush or an under run continuing");
- err = NO_ERROR;
- continue;
- }
if(err < 0) {
ALOGE("ALSADevice readFromProxy returned err = %d,data = %p,\
size = %ld", err, data, size);
diff --git a/alsa_sound/AudioHardwareALSA.h b/alsa_sound/AudioHardwareALSA.h
index ab466ae..ced6e81 100644
--- a/alsa_sound/AudioHardwareALSA.h
+++ b/alsa_sound/AudioHardwareALSA.h
@@ -168,7 +168,6 @@
#define AFE_PROXY_SAMPLE_RATE 48000
#define AFE_PROXY_CHANNEL_COUNT 2
#define AFE_PROXY_PERIOD_SIZE 3072
-#define AFE_PROXY_HIGH_WATER_MARK_FRAME_COUNT 40000
#define MAX_SLEEP_RETRY 100 /* Will check 100 times before continuing */
#define AUDIO_INIT_SLEEP_WAIT 50 /* 50 ms */
@@ -353,7 +352,6 @@
int mADSPState;
bool mSSRComplete;
int mCurDevice;
- long mAvailInMs;
protected:
friend class AudioHardwareALSA;
private:
diff --git a/alsa_sound/AudioSessionOut.cpp b/alsa_sound/AudioSessionOut.cpp
index 2e0d1de..9831f21 100644
--- a/alsa_sound/AudioSessionOut.cpp
+++ b/alsa_sound/AudioSessionOut.cpp
@@ -738,23 +738,7 @@
uint32_t AudioSessionOutALSA::latency() const
{
// Android wants latency in milliseconds.
- uint32_t latency = mAlsaHandle->latency;
- if ( ((mParent->mCurRxDevice & AudioSystem::DEVICE_OUT_ALL_A2DP) &&
- (mParent->mExtOutStream == mParent->mA2dpStream))
- && (mParent->mA2dpStream != NULL) ) {
- uint32_t bt_latency = mParent->mA2dpStream->get_latency(mParent->mA2dpStream);
- uint32_t proxy_latency = mParent->mALSADevice->mAvailInMs;
- latency += bt_latency*1000 + proxy_latency*1000;
- ALOGV("latency = %d, bt_latency = %d, proxy_latency = %d", latency, bt_latency, proxy_latency);
- }
- else if ( ((mParent->mCurRxDevice & AudioSystem::DEVICE_OUT_ALL_USB) &&
- (mParent->mExtOutStream == mParent->mUsbStream))
- && (mParent->mUsbStream != NULL) ) {
- uint32_t usb_latency = mParent->mUsbStream->get_latency(mParent->mUsbStream);
- latency += usb_latency*1000;
- }
-
- return USEC_TO_MSEC (latency);
+ return USEC_TO_MSEC (mAlsaHandle->latency);
}
status_t AudioSessionOutALSA::setObserver(void *observer)
diff --git a/alsa_sound/AudioStreamOutALSA.cpp b/alsa_sound/AudioStreamOutALSA.cpp
index a21a87b..5e34317 100644
--- a/alsa_sound/AudioStreamOutALSA.cpp
+++ b/alsa_sound/AudioStreamOutALSA.cpp
@@ -412,23 +412,7 @@
uint32_t AudioStreamOutALSA::latency() const
{
// Android wants latency in milliseconds.
- uint32_t latency = mHandle->latency;
- if ( ((mParent->mCurRxDevice & AudioSystem::DEVICE_OUT_ALL_A2DP) &&
- (mParent->mExtOutStream == mParent->mA2dpStream))
- && (mParent->mA2dpStream != NULL) ) {
- uint32_t bt_latency = mParent->mA2dpStream->get_latency(mParent->mA2dpStream);
- uint32_t proxy_latency = mParent->mALSADevice->mAvailInMs;
- latency += bt_latency*1000 + proxy_latency*1000;
- ALOGV("latency = %d, bt_latency = %d, proxy_latency = %d", latency, bt_latency, proxy_latency);
- }
- else if ( ((mParent->mCurRxDevice & AudioSystem::DEVICE_OUT_ALL_USB) &&
- (mParent->mExtOutStream == mParent->mUsbStream))
- && (mParent->mUsbStream != NULL) ) {
- uint32_t usb_latency = mParent->mUsbStream->get_latency(mParent->mUsbStream);
- latency += usb_latency*1000;
- }
-
- return USEC_TO_MSEC (latency);
+ return USEC_TO_MSEC (mHandle->latency);
}
// return the number of audio frames written by the audio dsp to DAC since