aml_audio_hal: add audio effect support on buildroot [2/4]
PD#TV-23616
Problem:
add audio effect support on buildroot
Solution:
1.add audio effect interfaces
2.add effect tuning tool
Verify:
tm2-ab311
Change-Id: Ie67ca03eb386634982e21431ba8676955d2dca52
Signed-off-by: cheng tong <cheng.tong@amlogic.com>
diff --git a/src/audio_server.cpp b/src/audio_server.cpp
index ec6a2ed..1d4b681 100644
--- a/src/audio_server.cpp
+++ b/src/audio_server.cpp
@@ -20,6 +20,7 @@
#include "audio_if.h"
#include "audio_service.grpc.pb.h"
#include "CircularBuffer.h"
+#include "audio_effect_if.h"
using grpc::Server;
using grpc::ServerBuilder;
@@ -51,6 +52,7 @@
using audio_service::StreamReadWrite;
using audio_service::GetFrameTimestampReturn;
using audio_service::StreamGain;
+using audio_service::EffectParameters;
using google::protobuf::Empty;
using namespace boost::interprocess;
@@ -77,12 +79,18 @@
explicit AudioServiceImpl(managed_shared_memory &shm)
: shm_(shm) {
if (audio_hw_load_interface(&dev_) == 0) {
+ if (dev_) {
+ effect_ = (audio_effect_t *)dev_->common.reserved[0];
+ }
//ALOGI(__func__, "[AudioServer] Get audio hal interface successfully.\n");
}
}
~AudioServiceImpl() {
if (dev_) {
+ if (effect_) {
+ effect_ = nullptr;
+ }
audio_hw_unload_interface(dev_);
dev_ = nullptr;
}
@@ -701,6 +709,38 @@
return Status::OK;
}
+ Status Effect_set_parameters(ServerContext* context, const EffectParameters* request, StatusReturn* response) {
+ TRACE_ENTRY();
+ if (!dev_ || !effect_) return Status::CANCELLED;
+
+ aml_audio_effect_type_e type = (aml_audio_effect_type_e)request->type();
+ uint32_t cmdSize = request->cmd_size();
+ void *pCmdData = (void *)request->cmd_data().data();
+ uint32_t replySize = request->reply_size();
+ uint32_t pReplyData = 0;
+
+ response->set_ret(effect_->set_parameters(type, cmdSize, pCmdData, &replySize, &pReplyData));
+ response->set_status_32(pReplyData);
+ return Status::OK;
+ }
+
+ Status Effect_get_parameters(ServerContext* context, const EffectParameters* request, StatusReturn* response) {
+ TRACE_ENTRY();
+ if (!dev_ || !effect_) return Status::CANCELLED;
+
+ aml_audio_effect_type_e type = (aml_audio_effect_type_e)request->type();
+ uint32_t cmdSize = request->cmd_size();
+ void *pCmdData = (void *)request->cmd_data().data();
+ uint32_t replySize = request->reply_size();
+ void * pReplyData = malloc(replySize);
+
+ response->set_ret(effect_->get_parameters(type, cmdSize, pCmdData, &replySize, pReplyData));
+ response->set_status_bytes(pReplyData, replySize);
+ free(pReplyData);
+ pReplyData = nullptr;
+ return Status::OK;
+ }
+
private:
void streamout_gc_()
{
@@ -801,6 +841,7 @@
/* audio hal interface */
struct audio_hw_device *dev_;
+ audio_effect_t *effect_;
static std::mutex map_in_mutex_;
static std::mutex map_out_mutex_;
std::map<const std::string, streamout_map_t > streamout_map_;