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

Commit f5879c14 authored by Eric Laurent's avatar Eric Laurent
Browse files

Fix issue 1846343 - part 1

This change is the first part of a fix for issue 1846343, :
- Added new enum values for input sources in AudioRecord and MediaRecorder for voice uplink, downlink and uplink+downlink sources.
- renamed streamType to inputSource in all native functions handling audio record.

A second change is required in opencore author driver and android audio input to completely fix the issue.
parent 260b80b0
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -39,10 +39,15 @@ class AudioRecord
{
public:

    enum stream_type {
    // input sources values must always be defined in the range
    // [AudioRecord::DEFAULT_INPUT, AudioRecord::NUM_INPUT_SOURCES[
    enum input_source {
        DEFAULT_INPUT   =-1,
        MIC_INPUT       = 0,
        NUM_STREAM_TYPES
        VOICE_UPLINK_INPUT = 1,
        VOICE_DOWNLINK_INPUT = 2,
        VOICE_CALL_INPUT = 3,
        NUM_INPUT_SOURCES
    };

    static const int DEFAULT_SAMPLE_RATE = 8000;
@@ -118,7 +123,7 @@ public:
     *
     * Parameters:
     *
     * streamType:         Select the audio input to record to (e.g. AudioRecord::MIC_INPUT).
     * inputSource:        Select the audio input to record to (e.g. AudioRecord::MIC_INPUT).
     * sampleRate:         Track sampling rate in Hz.
     * format:             PCM sample format (e.g AudioSystem::PCM_16_BIT for signed
     *                     16 bits per sample).
@@ -140,7 +145,7 @@ public:
         RECORD_IIR_ENABLE = AudioSystem::TX_IIR_ENABLE
     };

                        AudioRecord(int streamType,
                        AudioRecord(int inputSource,
                                    uint32_t sampleRate = 0,
                                    int format          = 0,
                                    int channelCount    = 0,
@@ -165,7 +170,7 @@ public:
     *  - NO_INIT: audio server or audio hardware not initialized
     *  - PERMISSION_DENIED: recording is not allowed for the requesting process
     * */
            status_t    set(int streamType      = 0,
            status_t    set(int inputSource     = 0,
                            uint32_t sampleRate = 0,
                            int format          = 0,
                            int channelCount    = 0,
@@ -197,6 +202,7 @@ public:
            int         channelCount() const;
            uint32_t    frameCount() const;
            int         frameSize() const;
            int         inputSource() const;


    /* After it's created the track is not active. Call start() to
@@ -323,7 +329,8 @@ private:
    audio_track_cblk_t*     mCblk;
    uint8_t                 mFormat;
    uint8_t                 mChannelCount;
    uint8_t                 mReserved[2];
    uint8_t                 mInputSource;
    uint8_t                 mReserved;
    status_t                mStatus;
    uint32_t                mLatency;

+1 −1
Original line number Diff line number Diff line
@@ -54,7 +54,7 @@ public:

    virtual sp<IAudioRecord> openRecord(
                                pid_t pid,
                                int streamType,
                                int inputSource,
                                uint32_t sampleRate,
                                int format,
                                int channelCount,
+4 −0
Original line number Diff line number Diff line
@@ -35,6 +35,10 @@ typedef void (*media_completion_f)(status_t status, void *cookie);
enum audio_source {
    AUDIO_SOURCE_DEFAULT = 0,
    AUDIO_SOURCE_MIC = 1,
    AUDIO_SOURCE_VOICE_UPLINK = 2,
    AUDIO_SOURCE_VOICE_DOWNLINK = 3,
    AUDIO_SOURCE_VOICE_CALL = 4,
    AUDIO_SOURCE_MAX = AUDIO_SOURCE_VOICE_CALL
};

enum video_source {
+12 −6
Original line number Diff line number Diff line
@@ -50,7 +50,7 @@ AudioRecord::AudioRecord()
}

AudioRecord::AudioRecord(
        int streamType,
        int inputSource,
        uint32_t sampleRate,
        int format,
        int channelCount,
@@ -61,7 +61,7 @@ AudioRecord::AudioRecord(
        int notificationFrames)
    : mStatus(NO_INIT)
{
    mStatus = set(streamType, sampleRate, format, channelCount,
    mStatus = set(inputSource, sampleRate, format, channelCount,
            frameCount, flags, cbf, user, notificationFrames);
}

@@ -82,7 +82,7 @@ AudioRecord::~AudioRecord()
}

status_t AudioRecord::set(
        int streamType,
        int inputSource,
        uint32_t sampleRate,
        int format,
        int channelCount,
@@ -104,8 +104,8 @@ status_t AudioRecord::set(
        return NO_INIT;
    }

    if (streamType == DEFAULT_INPUT) {
        streamType = MIC_INPUT;
    if (inputSource == DEFAULT_INPUT) {
        inputSource = MIC_INPUT;
    }

    if (sampleRate == 0) {
@@ -157,7 +157,7 @@ status_t AudioRecord::set(

    // open record channel
    status_t status;
    sp<IAudioRecord> record = audioFlinger->openRecord(getpid(), streamType,
    sp<IAudioRecord> record = audioFlinger->openRecord(getpid(), inputSource,
                                                       sampleRate, format,
                                                       channelCount,
                                                       frameCount,
@@ -201,6 +201,7 @@ status_t AudioRecord::set(
    mMarkerReached = false;
    mNewPosition = 0;
    mUpdatePeriod = 0;
    mInputSource = (uint8_t)inputSource;

    return NO_ERROR;
}
@@ -242,6 +243,11 @@ int AudioRecord::frameSize() const
    return channelCount()*((format() == AudioSystem::PCM_8_BIT) ? sizeof(uint8_t) : sizeof(int16_t));
}

int AudioRecord::inputSource() const
{
    return (int)mInputSource;
}

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

status_t AudioRecord::start()
+4 −4
Original line number Diff line number Diff line
@@ -99,7 +99,7 @@ public:

    virtual sp<IAudioRecord> openRecord(
                                pid_t pid,
                                int streamType,
                                int inputSource,
                                uint32_t sampleRate,
                                int format,
                                int channelCount,
@@ -110,7 +110,7 @@ public:
        Parcel data, reply;
        data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
        data.writeInt32(pid);
        data.writeInt32(streamType);
        data.writeInt32(inputSource);
        data.writeInt32(sampleRate);
        data.writeInt32(format);
        data.writeInt32(channelCount);
@@ -384,14 +384,14 @@ status_t BnAudioFlinger::onTransact(
        case OPEN_RECORD: {
            CHECK_INTERFACE(IAudioFlinger, data, reply);
            pid_t pid = data.readInt32();
            int streamType = data.readInt32();
            int inputSource = data.readInt32();
            uint32_t sampleRate = data.readInt32();
            int format = data.readInt32();
            int channelCount = data.readInt32();
            size_t bufferCount = data.readInt32();
            uint32_t flags = data.readInt32();
            status_t status;
            sp<IAudioRecord> record = openRecord(pid, streamType,
            sp<IAudioRecord> record = openRecord(pid, inputSource,
                    sampleRate, format, channelCount, bufferCount, flags, &status);
            reply->writeInt32(status);
            reply->writeStrongBinder(record->asBinder());