unplugged-system/frameworks/av/media/libaudiousecasevalidation/include/media/UsecaseValidator.h

98 lines
3.3 KiB
C++

/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef MEDIA_LIBAUDIOUSECASEVALIDATION_INCLUDE_MEDIA_USECASEVALIDATOR_H_
#define MEDIA_LIBAUDIOUSECASEVALIDATION_INCLUDE_MEDIA_USECASEVALIDATOR_H_
#pragma once
#include <error/Result.h>
#include <system/audio.h>
#include <android/content/AttributionSourceState.h>
#include <limits>
#include <memory>
namespace android {
namespace media {
/**
* Main entry-point for this library.
*/
class UsecaseValidator {
public:
virtual ~UsecaseValidator() = default;
/**
* A callback called by the module when the audio attributes for
* an active portId changes.
*/
class AttributesChangedCallback {
public:
virtual ~AttributesChangedCallback() = default;
virtual void onAttributesChanged(audio_port_handle_t portId,
const audio_attributes_t& attributes) = 0;
};
/**
* Register a new mixer/stream.
* Called when the stream is opened at the HAL and communicates
* immutable stream attributes like flags, sampling rate, format.
*/
virtual status_t registerStream(audio_io_handle_t streamId,
const audio_config_base_t& audioConfig,
const audio_output_flags_t outputFlags) = 0;
/**
* Unregister a stream/mixer.
* Called when the stream is closed.
*/
virtual status_t unregisterStream(audio_io_handle_t streamId) = 0;
/**
* Indicates that some playback activity started on the stream.
* Called each time an audio track starts or resumes.
*/
virtual error::Result<audio_attributes_t> startClient(audio_io_handle_t streamId,
audio_port_handle_t portId,
const content::AttributionSourceState& attributionSource,
const audio_attributes_t& attributes,
const AttributesChangedCallback *callback) = 0;
/**
* Indicates that some playback activity stopped on the stream.
* Called each time an audio track stops or pauses.
*/
virtual status_t stopClient(audio_io_handle_t streamId, audio_port_handle_t portId) = 0;
/**
* Called to verify and update audio attributes for a track that is connected
* to the specified stream.
*/
virtual error::Result<audio_attributes_t> verifyAudioAttributes(audio_io_handle_t streamId,
const content::AttributionSourceState& attributionSource,
const audio_attributes_t& attributes) = 0;
};
/**
* Creates an instance featuring a default implementation of the UsecaseValidator interface.
*/
std::unique_ptr<UsecaseValidator> createUsecaseValidator();
} // namespace media
} // namespace android
#endif // MEDIA_LIBAUDIOUSECASEVALIDATION_INCLUDE_MEDIA_USECASEVALIDATOR_H_