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

Commit 5e983fe2 authored by Mingming Yin's avatar Mingming Yin Committed by Ricardo Cerqueira
Browse files

audio: Add support for compress voip

- Add support for compress voip where voip
  driver is used instead of audio playback
  or record path.

Conflicts:
        core/jni/android_media_AudioRecord.cpp

Change-Id: I3c9e53004c1d22435e2060b4c3563a3c219b8720
parent b1bbfc68
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -177,8 +177,6 @@ android_media_AudioRecord_setup(JNIEnv *env, jobject thiz, jobject weak_this,
         ALOGE("Error creating AudioRecord: frameCount is 0.");
        return (jint) AUDIORECORD_ERROR_SETUP_ZEROFRAMECOUNT;
    }
    size_t frameSize = channelCount * bytesPerSample;
    size_t frameCount = buffSizeInBytes / frameSize;

    jclass clazz = env->GetObjectClass(thiz);
    if (clazz == NULL) {
@@ -214,12 +212,23 @@ android_media_AudioRecord_setup(JNIEnv *env, jobject thiz, jobject weak_this,
    env->ReleaseStringUTFChars(jtags, tags);
    paa->source = (audio_source_t) env->GetIntField(jaa, javaAudioAttrFields.fieldRecSource);
    paa->flags = (audio_flags_mask_t)env->GetIntField(jaa, javaAudioAttrFields.fieldFlags);

    //overwrite bytesPerSample for compress VOIP use cases
    if ((paa->source == AUDIO_SOURCE_VOICE_COMMUNICATION) &&
        (format != AUDIO_FORMAT_PCM_16_BIT)) {
        bytesPerSample = sizeof(uint8_t);
    }

    size_t frameSize = channelCount * bytesPerSample;
    size_t frameCount = buffSizeInBytes / frameSize;

    ALOGV("AudioRecord_setup for source=%d tags=%s flags=%08x", paa->source, paa->tags, paa->flags);

    audio_input_flags_t flags = AUDIO_INPUT_FLAG_NONE;
    if (paa->flags & AUDIO_FLAG_HW_HOTWORD) {
        flags = AUDIO_INPUT_FLAG_HW_HOTWORD;
    }

    // create the callback information:
    // this data will be passed with every AudioRecord callback
    audiorecord_callback_cookie *lpCallbackData = new audiorecord_callback_cookie;
+5 −0
Original line number Diff line number Diff line
@@ -418,6 +418,11 @@ public class AudioRecord
        // To update when supporting compressed formats
        int frameSizeInBytes = mChannelCount
            * (AudioFormat.getBytesPerSample(mAudioFormat));
        //overwrite frameSizeInBytes for compress voip
        if ((mRecordSource == MediaRecorder.AudioSource.VOICE_COMMUNICATION) &&
            (mAudioFormat != AudioFormat.ENCODING_PCM_16BIT)) {
            frameSizeInBytes = mChannelCount * 1;
        }
        if ((audioBufferSize % frameSizeInBytes != 0) || (audioBufferSize < 1)) {
            throw new IllegalArgumentException("Invalid audio buffer size.");
        }