Project

General

Profile

Actions

DeprecatedBuildAndroid » History » Revision 9

« Previous | Revision 9/34 (diff) | Next »
Denis 'GNUtoo' Carikli, 08/26/2009 10:42 AM
sound working


Build system * root your phone * Backup your current system!!! * Check out the Dream Android repository following that howto: [http://source.android.com/documentation/building-for-dream],but be carefull...DO NOT RUN extract-files.sh...it would put proprietary files in your build,that you can't even redistribute
Android use a custom Makefile based buildsystem * Add the patches that can be find here [http://groups.fsf.org/wiki/Freest_hardware_comparisons/replicant] * Add this patch for sound: {{{
diff --git a/include/hardware_legacy/AudioHardwareInterface.h b/include/hardware_legacy/AudioHardwareInterface.h
index 0aa3a95..371ee48 100644
--- a/include/hardware_legacy/AudioHardwareInterface.h
++ b/include/hardware_legacy/AudioHardwareInterface.h
211,8 +211,7 @@ public:
int format,
int channelCount,
uint32_t sampleRate,
status_t *status,
- AudioSystem::audio_in_acoustics acoustics) = 0;
status_t *status) = 0; /**This method dumps the state of the audio hardware /
virtual status_t dumpState(int fd, const Vector<String16>& args) = 0;
diff --git a/libs/audioflinger/A2dpAudioInterface.cpp b/libs/audioflinger/A2dpAudioInterface.cpp
index b6d5078..15ce1dd 100644
--- a/libs/audioflinger/A2dpAudioInterface.cpp
+++ b/libs/audioflinger/A2dpAudioInterface.cpp
-71,8 +71,7 @@ AudioStreamOut
A2dpAudioInterface::openOutputStream(
} AudioStreamIn* A2dpAudioInterface::openInputStream(
- int format, int channelCount, uint32_t sampleRate, status_t *status,
- AudioSystem::audio_in_acoustics acoustics)
+ int format, int channelCount, uint32_t sampleRate, status_t *status) {
if (status)
*status = 1;
diff --git a/libs/audioflinger/A2dpAudioInterface.h b/libs/audioflinger/A2dpAudioInterface.h
index 7901a8c..e67f05f 100644
--
a/libs/audioflinger/A2dpAudioInterface.h
++ b/libs/audioflinger/A2dpAudioInterface.h
58,8 +58,7 @@ public:
int format,
int channelCount,
uint32_t sampleRate,
status_t *status,
- AudioSystem::audio_in_acoustics acoustics);
status_t *status); protected:
virtual status_t doRouting();
diff --git a/libs/audioflinger/AudioDumpInterface.h b/libs/audioflinger/AudioDumpInterface.h
index 9a94102..42204d6 100644
--- a/libs/audioflinger/AudioDumpInterface.h
+++ b/libs/audioflinger/AudioDumpInterface.h
-78,9 +78,8 @@ public:
virtual status_t setParameter(const char* key, const char* value) {return mFinalInterface->setParameter(key, value);}

- virtual AudioStreamIn* openInputStream( int format, int channelCount, uint32_t sampleRate, status_t status,
- AudioSystem::audio_in_acoustics acoustics)
- {return mFinalInterface->openInputStream( format, channelCount, sampleRate, status, acoustics);}
+ virtual AudioStreamIn
openInputStream( int format, int channelCount, uint32_t sampleRate, status_t *status)
+ {return mFinalInterface->openInputStream( format, channelCount, sampleRate, status);}

virtual status_t    dump(int fd, const Vector&lt;String16&gt;& args) { return mFinalInterface->dumpState(fd, args); }

diff --git a/libs/audioflinger/AudioFlinger.cpp b/libs/audioflinger/AudioFlinger.cpp
index 43df7dd..f376b67 100644
--- a/libs/audioflinger/AudioFlinger.cpp
+++ b/libs/audioflinger/AudioFlinger.cpp
-2435,8 +2435,7 @ bool AudioFlinger::AudioRecordThread::threadLoop()
input = mAudioHardware->openInputStream(mRecordTrack->format(),
mRecordTrack->channelCount(),
mRecordTrack->sampleRate(),
- &mStartStatus,
- (AudioSystem::audio_in_acoustics)(mRecordTrack->mFlags >> 16));
+ &mStartStatus);
if (input != 0) {
inBufferSize = input->bufferSize();
inFrameCount = inBufferSize/input->frameSize();
diff --git a/libs/audioflinger/AudioHardwareGeneric.cpp b/libs/audioflinger/AudioHardwareGeneric.cpp
index 62beada..e455186 100644
--- a/libs/audioflinger/AudioHardwareGeneric.cpp
+++ b/libs/audioflinger/AudioHardwareGeneric.cpp
-93,8 +93,7
@ void AudioHardwareGeneric::closeOutputStream(AudioStreamOutGeneric* out) {
}

AudioStreamIn* AudioHardwareGeneric::openInputStream(
- int format, int channelCount, uint32_t sampleRate, status_t *status,
- AudioSystem::audio_in_acoustics acoustics)
+ int format, int channelCount, uint32_t sampleRate, status_t *status) {
AutoMutex lock(mLock);
-108,7 +107,7 @@ AudioStreamIn* AudioHardwareGeneric::openInputStream(
{
// FIXME: remove logging
LOGD("AudioStreamInGeneric::set(%p, %d, %d, %d, %u)", hw, fd, format, channels, rate);
diff --git a/libs/audioflinger/AudioHardwareGeneric.h b/libs/audioflinger/AudioHardwareGeneric.h
index c949aa1..64e0396 100644
--- a/libs/audioflinger/AudioHardwareGeneric.h
++ b/libs/audioflinger/AudioHardwareGeneric.h
69,8 +69,7 @@ public:
int mFd,
int format,
int channelCount,
uint32_t sampleRate,
- AudioSystem::audio_in_acoustics acoustics);
uint32_t sampleRate);
uint32_t    sampleRate() const { return 8000; }
virtual size_t bufferSize() const { return 320; }
115,8 114,7 @@ public:
int format,
int channelCount,
uint32_t sampleRate,
status_t *status,
- AudioSystem::audio_in_acoustics acoustics);
status_t *status);
void            closeOutputStream(AudioStreamOutGeneric* out);
void closeInputStream(AudioStreamInGeneric* in);
diff --git a/libs/audioflinger/AudioHardwareStub.cpp b/libs/audioflinger/AudioHardwareStub.cpp
index b13cb1c..683af04 100644
--- a/libs/audioflinger/AudioHardwareStub.cpp
+++ b/libs/audioflinger/AudioHardwareStub.cpp
-57,10 +57,10 @@ AudioStreamOut* AudioHardwareStub::openOutputStream(
AudioStreamIn* AudioHardwareStub::openInputStream(
int format, int channelCount, uint32_t sampleRate,
- status_t *status, AudioSystem::audio_in_acoustics acoustics)
+ status_t *status) {
AudioStreamInStub* in = new AudioStreamInStub();
- status_t lStatus = in->set(format, channelCount, sampleRate, acoustics);
+ status_t lStatus = in->set(format, channelCount, sampleRate);
if (status) {
*status = lStatus;
}
-143,8 +143,7 @@ status_t AudioStreamOutStub::dump(int fd, const Vector&lt;String16&gt;& args)
// ----------------------------------------------------------------------------

status_t AudioStreamInStub::set(int format, int channels, uint32_t rate,
AudioSystem::audio_in_acoustics acoustics)
+status_t AudioStreamInStub::set(int format, int channels, uint32_t rate) {
if ((format AudioSystem::PCM_16_BIT) &&
(channels channelCount()) &&
diff --git a/libs/audioflinger/AudioHardwareStub.h b/libs/audioflinger/AudioHardwareStub.h
index d406424..24736ed 100644
--- a/libs/audioflinger/AudioHardwareStub.h
+++ b/libs/audioflinger/AudioHardwareStub.h
-43,7 +43,7 @@ public:

class AudioStreamInStub : public AudioStreamIn {
public:
- virtual status_t set(int format, int channelCount, uint32_t sampleRate, AudioSystem::audio_in_acoustics acoustics);
+ virtual status_t set(int format, int channelCount, uint32_t sampleRate);
virtual uint32_t sampleRate() const { return 8000; }
virtual size_t bufferSize() const { return 320; }
virtual int channelCount() const { return 1; }
81,8 81,7 @@ public:
int format,
int channelCount,
uint32_t sampleRate,
status_t *status,
- AudioSystem::audio_in_acoustics acoustics);
status_t *status);
protected:
virtual status_t doRouting() { return NO_ERROR; }
diff --git a/libaudio/AudioHardware.cpp b/libaudio/AudioHardware.cpp
index 0ece3f7..88dd46f 100644
--- a/libaudio/AudioHardware.cpp
+++ b/libaudio/AudioHardware.cpp
-36,12 +36,51 @@
#define LOG_SND_RPC 0 // Set to 1 to log sound RPC's
namespace android {
static int audpre_index, tx_iir_index;
-static void * acoustic;
const uint32_t AudioHardware::inputSamplingRates[] = {
8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000
};



// ---------------------------------------------------------------------------

+static int snd_get_endpoint( int cnt,msm_snd_endpoint * ept)
{
+ int fd;
+ int status;
+ fd = open("/dev/msm_snd",O_RDWR);
+ if (fd < 0)
+ {
+ perror("Cannot open msm_snd device");
+ close(fd);
+ return -1;
+ }
+ status = ioctl(fd,SND_GET_ENDPOINT, ept);
+ close(fd);
+ return status;
}

static int snd_get_num()
{
+ int fd;
+ int status;
+ int mNumSndEndpoints;
+ fd = open("/dev/msm_snd",O_RDWR);
+ if (fd < 0)
+ {
+ perror("Cannot open msm_snd device");
+ return -1;
+ }

if(ioctl(fd,SND_GET_NUM_ENDPOINTS,&mNumSndEndpoints)&lt;0 )
+ {
+ perror("get number of endpoints error");
+ close(fd);
+ return -1;
+ }
+ close(fd);
+ return mNumSndEndpoints;

}
AudioHardware::AudioHardware() :
mInit(false), mMicMute(true), mBluetoothNrec(true), mBluetoothId(0),
-54,44 +93,22 @@ AudioHardware::AudioHardware() :
SND_DEVICE_HEADSET(-1),
SND_DEVICE_HEADSET_AND_SPEAKER(-1) {

int (*snd_get_num)();
- int (*snd_get_endpoint)(int, msm_snd_endpoint *);
- int (*set_acoustic_parameters)();
+ LOGE("inside AudioHardware::AudioHardware()");
+ //int snd_get_num();
+ //int snd_get_endpoint(int cnt,msm_snd_endpoint *ept);
+ //int (*snd_get_num)();
+ //int (*snd_get_endpoint)(int, msm_snd_endpoint *);
struct msm_snd_endpoint ept;

acoustic = ::dlopen("/system/lib/libhtc_acoustic.so", RTLD_NOW);
- if (acoustic == NULL ) {
- LOGE("Could not open libhtc_acoustic.so");
- return;
- }

set_acoustic_parameters = (int (
)(void))::dlsym(acoustic, "set_acoustic_parameters");
- if ((set_acoustic_parameters) == 0 ) {
- LOGE("Could not open set_acoustic_parameters()");
- return;
- }

int rc = set_acoustic_parameters();
- if (rc < 0) {
- LOGE("Could not set acoustic parameters to share memory: %d", rc);
// return;
}

snd_get_num = (int (
)(void))::dlsym(acoustic, "snd_get_num_endpoints");
- if ((snd_get_num) == 0 ) {
- LOGE("Could not open snd_get_num()");
// return;
}

+ LOGE("before");
mNumSndEndpoints = snd_get_num();
+ LOGE("after");
LOGD("mNumSndEndpoints = %d", mNumSndEndpoints);
mSndEndpoints = new msm_snd_endpoint[mNumSndEndpoints];
mInit = true;
LOGV("constructed %d SND endpoints)", mNumSndEndpoints);
ept = mSndEndpoints;
- snd_get_endpoint = (int (
)(int, msm_snd_endpoint *))::dlsym(acoustic, "snd_get_endpoint");
+ ept = mSndEndpoints; //LOOK AT mSndEndpoints type...
+
if ((*snd_get_endpoint) == 0 ) {
LOGE("Could not open snd_get_endpoint()");
return;
121,7 +138,6 @@ AudioHardware::~AudioHardware()
delete mInput;
delete mOutput;
delete [] mSndEndpoints;
::dlclose(acoustic);
mInit = false;
}
-168,8 +184,7 @@ void AudioHardware::closeOutputStream(AudioStreamOutMSM72xx* out) {
}
AudioStreamIn* AudioHardware::openInputStream(
- int format, int channelCount, uint32_t sampleRate, status_t *status,
- AudioSystem::audio_in_acoustics acoustic_flags)
+ int format, int channelCount, uint32_t sampleRate, status_t *status) {
mLock.lock();
// input stream already open?
-182,7 +197,7 @@ AudioStreamIn* AudioHardware::openInputStream(
}
AudioStreamInMSM72xx* in = new AudioStreamInMSM72xx();
- status_t lStatus = in->set(this, format, channelCount, sampleRate, acoustic_flags);
+ status_t lStatus = in->set(this, format, channelCount, sampleRate);
if (status) {
*status = lStatus;
}
-449,6 +464,42 @@ static int count_bits(uint32_t vector)
return bits;
}

static int msm72xx_enable_audpp (uint16_t enable_mask)
{
+ int fd;

// if (!audpp_filter_inited)
// return -1;

+ fd = open ("/dev/msm_pcm_ctl", O_RDWR);
+ if (fd < 0)
+ {
+ perror ("Cannot open audio device");
+ return -1;
+ }

if (enable_mask & ADRC_ENABLE)
+ enable_mask &= ~ADRC_ENABLE;
+ if (enable_mask & EQ_ENABLE)
+ enable_mask &= ~EQ_ENABLE;
+ if (enable_mask & RX_IIR_ENABLE)
+ enable_mask &= ~RX_IIR_ENABLE;

printf ("msm72xx_enable_audpp: 0x%04x", enable_mask);
+ if (ioctl (fd, AUDIO_ENABLE_AUDPP, &enable_mask) < 0)
+ {
+ perror ("enable audpp error");
+ close (fd);
+ return -1;
+ }

close (fd);
+ return 0;
}



+
status_t AudioHardware::doRouting() {
Mutex::Autolock lock(mLock);
460,8 511,7 @ status_t AudioHardware::doRouting()
" picking closest possible route...", routes);
}
}
- int (*msm72xx_enable_audpp)(int);
- msm72xx_enable_audpp = (int (*)(int))::dlsym(acoustic, "msm72xx_enable_audpp");
+
status_t ret = NO_ERROR;
if (routes & AudioSystem::ROUTE_BLUETOOTH_SCO) {
LOGI("Routing audio to Bluetooth PCM\n");
-700,14 +750,12
@ bool AudioHardware::AudioStreamOutMSM72xx::checkStandby()
AudioHardware::AudioStreamInMSM72xx::AudioStreamInMSM72xx() :
mHardware(0), mFd(-1), mState(AUDIO_INPUT_CLOSED), mRetryCount(0),
mFormat(AUDIO_HW_IN_FORMAT), mChannelCount(AUDIO_HW_IN_CHANNELS),
mSampleRate(AUDIO_HW_IN_SAMPLERATE), mBufferSize(AUDIO_HW_IN_BUFFERSIZE),
- mAcoustics((AudioSystem::audio_in_acoustics)0)
mSampleRate(AUDIO_HW_IN_SAMPLERATE), mBufferSize(AUDIO_HW_IN_BUFFERSIZE) {
} {{{
TARGET_PRODUCT := htc_dream
}}}
To ~/replicant/buildspec.mk * Then type {{{
cd ~/replicant
export ANDROID_JAVA_HOME=$JAVA_HOME
make
}}}
The files to flash are in ~/replicant/out/target/product/dream

status_t AudioHardware::AudioStreamInMSM72xx::set(
- AudioHardware* hw, int format, int channelCount, uint32_t sampleRate,
- AudioSystem::audio_in_acoustics acoustic_flags)
+ AudioHardware* hw, int format, int channelCount, uint32_t sampleRate) {
LOGV("AudioStreamInMSM72xx::set(%d, %d, %u)", format, channelCount, sampleRate);
if (mFd >= 0) {
763,26 811,7 @@ status_t AudioHardware::AudioStreamInMSM72xx::set(
mHardware = hw;
mHardware
>setMicMute_nosync(false);
mState = AUDIO_INPUT_OPENED;
- audpre_index = calculate_audpre_table_index(sampleRate);
- tx_iir_index = (audpre_index * 2) + (hw->checkOutputStandby() ? 0 : 1);
- LOGD("audpre_index = %d, tx_iir_index = %d\n", audpre_index, tx_iir_index);

/**
- * If audio-preprocessing failed, we should not block record.
- /
- int (*msm72xx_set_audpre_params)(int, int);
- msm72xx_set_audpre_params = (int (
)(int, int))::dlsym(acoustic, "msm72xx_set_audpre_params");
- status = msm72xx_set_audpre_params(audpre_index, tx_iir_index);
- if (status < 0)
- LOGE("Cannot set audpre parameters");

int (msm72xx_enable_audpre)(int, int, int);
- msm72xx_enable_audpre = (int (
)(int, int, int))::dlsym(acoustic, "msm72xx_enable_audpre");
- mAcoustics = acoustic_flags;
- status = msm72xx_enable_audpre((int)acoustic_flags, audpre_index, tx_iir_index);
- if (status < 0)
- LOGE("Cannot enable audpre");
-

return NO_ERROR;
Error:
-811,7 +840,7 @@ ssize_t AudioHardware::AudioStreamInMSM72xx::read( void* buffer, ssize_t bytes)
uint8_t* p = static_cast<uint8_t*>(buffer);
  • Add that file:
if (mState < AUDIO_INPUT_OPENED) {
- if (set(mHardware, mFormat, mChannelCount, mSampleRate, mAcoustics) != NO_ERROR) {
+ if (set(mHardware, mFormat, mChannelCount, mSampleRate) != NO_ERROR) {
return 1;
}
}
diff --git a/libaudio/AudioHardware.h b/libaudio/AudioHardware.h
index 047bad3..2111e16 100644
--
a/libaudio/AudioHardware.h
++ b/libaudio/AudioHardware.h
128,8 +128,8 @@ public:
int format,
int channelCount,
uint32_t sampleRate,
status_t *status,
- AudioSystem::audio_in_acoustics acoustics);
status_t *status
+ );
void        closeOutputStream(AudioStreamOutMSM72xx* out);
void closeInputStream(AudioStreamInMSM72xx* in);
190,8 190,8 @ private:
status_t set(AudioHardware* mHardware,
int format,
int channelCount,
- uint32_t sampleRate,
- AudioSystem::audio_in_acoustics acoustics);
+ uint32_t sampleRate
+ );
virtual size_t bufferSize() const { return mBufferSize; }
virtual int channelCount() const { return mChannelCount; }
virtual int format() const { return mFormat; }
-210,7 +210,7
@ private:
int mChannelCount;
uint32_t mSampleRate;
size_t mBufferSize;
AudioSystem::audio_in_acoustics mAcoustics;

};
static const uint32_t inputSamplingRates[];
}}}
Build process:
Let's say that our build directory is ~/replicant
Status * web browser crashes * ril seem to work(I made some calls and received sms) * sound on the application cpu(the baseband cpu has sound too) now works

Updated by Denis 'GNUtoo' Carikli over 14 years ago · 9 revisions

Also available in: PDF HTML TXT