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

Commit e13404b6 authored by Eric Laurent's avatar Eric Laurent Committed by Android (Google) Code Review
Browse files

Merge "audio: add reporting of gapless playback support"

parents 5998a63a 90fe31c8
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -645,6 +645,8 @@ ConversionResult<audio_output_flags_t> aidl2legacy_AudioOutputFlags_audio_output
            return AUDIO_OUTPUT_FLAG_VOIP_RX;
            return AUDIO_OUTPUT_FLAG_VOIP_RX;
        case media::AudioOutputFlags::INCALL_MUSIC:
        case media::AudioOutputFlags::INCALL_MUSIC:
            return AUDIO_OUTPUT_FLAG_INCALL_MUSIC;
            return AUDIO_OUTPUT_FLAG_INCALL_MUSIC;
        case media::AudioOutputFlags::GAPLESS_OFFLOAD:
            return AUDIO_OUTPUT_FLAG_GAPLESS_OFFLOAD;
        default:
        default:
            return unexpected(BAD_VALUE);
            return unexpected(BAD_VALUE);
    }
    }
@@ -683,6 +685,8 @@ ConversionResult<media::AudioOutputFlags> legacy2aidl_audio_output_flags_t_Audio
            return media::AudioOutputFlags::VOIP_RX;
            return media::AudioOutputFlags::VOIP_RX;
        case AUDIO_OUTPUT_FLAG_INCALL_MUSIC:
        case AUDIO_OUTPUT_FLAG_INCALL_MUSIC:
            return media::AudioOutputFlags::INCALL_MUSIC;
            return media::AudioOutputFlags::INCALL_MUSIC;
        case AUDIO_OUTPUT_FLAG_GAPLESS_OFFLOAD:
            return media::AudioOutputFlags::GAPLESS_OFFLOAD;
        default:
        default:
            return unexpected(BAD_VALUE);
            return unexpected(BAD_VALUE);
    }
    }
+4 −4
Original line number Original line Diff line number Diff line
@@ -1188,12 +1188,12 @@ status_t AudioSystem::setAllowedCapturePolicy(uid_t uid, audio_flags_mask_t flag
    return aps->setAllowedCapturePolicy(uid, flags);
    return aps->setAllowedCapturePolicy(uid, flags);
}
}


bool AudioSystem::isOffloadSupported(const audio_offload_info_t& info)
audio_offload_mode_t AudioSystem::getOffloadSupport(const audio_offload_info_t& info)
{
{
    ALOGV("isOffloadSupported()");
    ALOGV("%s", __func__);
    const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
    const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service();
    if (aps == 0) return false;
    if (aps == 0) return AUDIO_OFFLOAD_NOT_SUPPORTED;
    return aps->isOffloadSupported(info);
    return aps->getOffloadSupport(info);
}
}


status_t AudioSystem::listAudioPorts(audio_port_role_t role,
status_t AudioSystem::listAudioPorts(audio_port_role_t role,
+6 −7
Original line number Original line Diff line number Diff line
@@ -69,7 +69,7 @@ enum {
    QUERY_DEFAULT_PRE_PROCESSING,
    QUERY_DEFAULT_PRE_PROCESSING,
    SET_EFFECT_ENABLED,
    SET_EFFECT_ENABLED,
    IS_STREAM_ACTIVE_REMOTELY,
    IS_STREAM_ACTIVE_REMOTELY,
    IS_OFFLOAD_SUPPORTED,
    GET_OFFLOAD_MODE_SUPPORTED,
    IS_DIRECT_OUTPUT_SUPPORTED,
    IS_DIRECT_OUTPUT_SUPPORTED,
    LIST_AUDIO_PORTS,
    LIST_AUDIO_PORTS,
    GET_AUDIO_PORT,
    GET_AUDIO_PORT,
@@ -666,13 +666,13 @@ public:
        return reply.readInt32();
        return reply.readInt32();
    }
    }


    virtual bool isOffloadSupported(const audio_offload_info_t& info)
    virtual audio_offload_mode_t getOffloadSupport(const audio_offload_info_t& info)
    {
    {
        Parcel data, reply;
        Parcel data, reply;
        data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
        data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor());
        data.write(&info, sizeof(audio_offload_info_t));
        data.write(&info, sizeof(audio_offload_info_t));
        remote()->transact(IS_OFFLOAD_SUPPORTED, data, &reply);
        remote()->transact(GET_OFFLOAD_MODE_SUPPORTED, data, &reply);
        return reply.readInt32();
        return static_cast<audio_offload_mode_t>(reply.readInt32());
    }
    }


    virtual bool isDirectOutputSupported(const audio_config_base_t& config,
    virtual bool isDirectOutputSupported(const audio_config_base_t& config,
@@ -2149,12 +2149,11 @@ status_t BnAudioPolicyService::onTransact(
            return status;
            return status;
        }
        }


        case IS_OFFLOAD_SUPPORTED: {
        case GET_OFFLOAD_MODE_SUPPORTED: {
            CHECK_INTERFACE(IAudioPolicyService, data, reply);
            CHECK_INTERFACE(IAudioPolicyService, data, reply);
            audio_offload_info_t info = {};
            audio_offload_info_t info = {};
            data.read(&info, sizeof(audio_offload_info_t));
            data.read(&info, sizeof(audio_offload_info_t));
            bool isSupported = isOffloadSupported(info);
            reply->writeInt32(static_cast<int32_t>(getOffloadSupport(info)));
            reply->writeInt32(isSupported);
            return NO_ERROR;
            return NO_ERROR;
        }
        }


+1 −0
Original line number Original line Diff line number Diff line
@@ -35,4 +35,5 @@ enum AudioOutputFlags {
    MMAP_NOIRQ       = 12,
    MMAP_NOIRQ       = 12,
    VOIP_RX          = 13,
    VOIP_RX          = 13,
    INCALL_MUSIC     = 14,
    INCALL_MUSIC     = 14,
    GAPLESS_OFFLOAD  = 15,
}
}
+4 −3
Original line number Original line Diff line number Diff line
@@ -319,9 +319,10 @@ public:


    static status_t setAllowedCapturePolicy(uid_t uid, audio_flags_mask_t flags);
    static status_t setAllowedCapturePolicy(uid_t uid, audio_flags_mask_t flags);


    // Check if hw offload is possible for given format, stream type, sample rate,
    // Indicate if hw offload is possible for given format, stream type, sample rate,
    // bit rate, duration, video and streaming or offload property is enabled
    // bit rate, duration, video and streaming or offload property is enabled and when possible
    static bool isOffloadSupported(const audio_offload_info_t& info);
    // if gapless transitions are supported.
    static audio_offload_mode_t getOffloadSupport(const audio_offload_info_t& info);


    // check presence of audio flinger service.
    // check presence of audio flinger service.
    // returns NO_ERROR if binding to service succeeds, DEAD_OBJECT otherwise
    // returns NO_ERROR if binding to service succeeds, DEAD_OBJECT otherwise
Loading