Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f091f607 authored by Ricardo Cerqueira's avatar Ricardo Cerqueira
Browse files

audio: Add compatibility bits to use legacy libaudio implementations

Enable with BOARD_USES_AUDIO_LEGACY, requires the use of the generic
legacy audio shim
parent 67a59617
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -46,11 +46,22 @@ LOCAL_SRC_FILES:= \
    MemoryLeakTrackUtil.cpp \
    fixedfft.cpp.arm

ifeq ($(BOARD_USES_AUDIO_LEGACY),true)
    LOCAL_SRC_FILES+= \
        AudioParameter.cpp

    LOCAL_CFLAGS += -DUSES_AUDIO_LEGACY
    ifeq ($(BOARD_USE_KINETO_COMPATIBILITY),true)
        LOCAL_CFLAGS += -DUSE_KINETO_COMPATIBILITY
    endif
endif

LOCAL_SHARED_LIBRARIES := \
	libui libcutils libutils libbinder libsonivox libicuuc libexpat \
        libcamera_client libstagefright_foundation \
        libgui libdl


LOCAL_WHOLE_STATIC_LIBRARY := libmedia_helper

LOCAL_MODULE:= libmedia
+32 −0
Original line number Diff line number Diff line
@@ -101,6 +101,38 @@ AudioRecord::AudioRecord(
            frameCount, flags, cbf, user, notificationFrames, sessionId);
}

#ifdef USE_KINETO_COMPATIBILITY
// Really dirty hack to give a Froyo-compatible constructor
extern "C" AudioRecord *_ZN7android11AudioRecordC1EijijijPFviPvS1_ES1_ii(
        AudioRecord *This,
        int inputSource,
        uint32_t sampleRate,
        int format,
        uint32_t channels,
        int frameCount,
        uint32_t flags,
        AudioRecord::callback_t cbf,
        void* user,
        int notificationFrames,
        int sessionId);
extern "C" AudioRecord *_ZN7android11AudioRecordC1EijijijPFviPvS1_ES1_i(
        AudioRecord *This,
        int inputSource,
        uint32_t sampleRate,
        int format,
        uint32_t channels,
        int frameCount,
        uint32_t flags,
        AudioRecord::callback_t cbf,
        void* user,
        int notificationFrames)
{
    return _ZN7android11AudioRecordC1EijijijPFviPvS1_ES1_ii(This,
        inputSource, sampleRate, format, channels,
        frameCount, flags, cbf, user, notificationFrames, 0);
}
#endif

AudioRecord::~AudioRecord()
{
    if (mStatus == NO_ERROR) {
+60 −0
Original line number Diff line number Diff line
@@ -750,5 +750,65 @@ void AudioSystem::AudioPolicyServiceClient::binderDied(const wp<IBinder>& who) {
    LOGW("AudioPolicyService server died!");
}

#ifdef USES_AUDIO_LEGACY
extern "C" uint32_t _ZN7android11AudioSystem8popCountEj(uint32_t u)
{
    return popcount(u);
}

extern "C" bool _ZN7android11AudioSystem12isA2dpDeviceENS0_13audio_devicesE(uint32_t device)
{
    return audio_is_a2dp_device((audio_devices_t)device);
}

extern "C" bool _ZN7android11AudioSystem13isInputDeviceENS0_13audio_devicesE(uint32_t device)
{
    return audio_is_input_device((audio_devices_t)device);
}

extern "C" bool _ZN7android11AudioSystem14isOutputDeviceENS0_13audio_devicesE(uint32_t device)
{
    return audio_is_output_device((audio_devices_t)device);
}

extern "C" bool _ZN7android11AudioSystem20isBluetoothScoDeviceENS0_13audio_devicesE(uint32_t device)
{
    return audio_is_bluetooth_sco_device((audio_devices_t)device);
}

extern "C" status_t _ZN7android11AudioSystem24setDeviceConnectionStateENS0_13audio_devicesENS0_23device_connection_stateEPKc(audio_devices_t device,
                                               audio_policy_dev_state_t state,
                                               const char *device_address) 
{
    return AudioSystem::setDeviceConnectionState(device, state, device_address);
}

extern "C" audio_io_handle_t _ZN7android11AudioSystem9getOutputENS0_11stream_typeEjjjNS0_12output_flagsE(audio_stream_type_t stream,
                                    uint32_t samplingRate,
                                    uint32_t format,
                                    uint32_t channels,
                                    audio_policy_output_flags_t flags) 
{
   return AudioSystem::getOutput(stream,samplingRate,format,channels>>2,flags);
}

extern "C" bool _ZN7android11AudioSystem11isLinearPCMEj(uint32_t format)
{
    return audio_is_linear_pcm(format);
}

extern "C" bool _ZN7android11AudioSystem15isLowVisibilityENS0_11stream_typeE(audio_stream_type_t stream)
{
    if (stream == AUDIO_STREAM_SYSTEM ||
        stream == AUDIO_STREAM_NOTIFICATION ||
        stream == AUDIO_STREAM_RING) {
        return true;
    } else {
        return false;
    }
}

#endif // AUDIO_LEGACY

}; // namespace android
+32 −0
Original line number Diff line number Diff line
@@ -78,6 +78,38 @@ status_t AudioTrack::getMinFrameCount(

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

#ifdef USE_KINETO_COMPATIBILITY
// Really dirty hack to give a Froyo-compatible constructor
extern "C" AudioTrack *_ZN7android10AudioTrackC1EijiiijPFviPvS1_ES1_ii(
        AudioTrack *This,
        int streamType,
        uint32_t sampleRate,
        int format,
        int channels,
        int frameCount,
        uint32_t flags,
        AudioTrack::callback_t cbf,
        void* user,
        int notificationFrames,
        int sessionId);
extern "C" AudioTrack *_ZN7android10AudioTrackC1EijiiijPFviPvS1_ES1_i(
        AudioTrack *This,
        int streamType,
        uint32_t sampleRate,
        int format,
        int channels,
        int frameCount,
        uint32_t flags,
        AudioTrack::callback_t cbf,
        void* user,
        int notificationFrames)
{
    return _ZN7android10AudioTrackC1EijiiijPFviPvS1_ES1_ii(This,
        streamType, sampleRate, format, channels,
        frameCount, flags, cbf, user, notificationFrames, 0);
}
#endif

AudioTrack::AudioTrack()
    : mStatus(NO_INIT)
{