Project

General

Profile

Actions

DeprecatedBuildAndroid » History » Revision 8

« Previous | Revision 8/34 (diff) | Next »
Denis 'GNUtoo' Carikli, 08/26/2009 10:41 AM


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) * no sound on the application cpu(the baseband cpu has sound) (that means the you can make calls but you can't play mp3 or ringtones)

Updated by Denis 'GNUtoo' Carikli over 15 years ago · 8 revisions

Also available in: PDF HTML TXT