mm-audio: add amrwb component
modify amrnb component to support amrwb.
Change-Id: I16119d9bd0c1880b9a4c0c8387e4a54bf4dd163a
diff --git a/mm-audio/aenc-amrnb/qdsp6/inc/omx_amr_aenc.h b/mm-audio/aenc-amrnb/qdsp6/inc/omx_amr_aenc.h
index 2d72eb2..f4fcf8e 100644
--- a/mm-audio/aenc-amrnb/qdsp6/inc/omx_amr_aenc.h
+++ b/mm-audio/aenc-amrnb/qdsp6/inc/omx_amr_aenc.h
@@ -60,6 +60,8 @@
#include <semaphore.h>
#include <linux/msm_audio.h>
#include <linux/msm_audio_amrnb.h>
+#include <linux/msm_audio_amrwb.h>
+
extern "C" {
void * get_omx_component_factory_fn(void);
}
@@ -144,6 +146,7 @@
class omx_amr_aenc: public qc_omx_component
{
public:
+ int amrwb_enable;
omx_amr_aenc(); // constructor
virtual ~omx_amr_aenc(); // destructor
diff --git a/mm-audio/aenc-amrnb/qdsp6/src/omx_amr_aenc.cpp b/mm-audio/aenc-amrnb/qdsp6/src/omx_amr_aenc.cpp
index ba66d1b..5278671 100644
--- a/mm-audio/aenc-amrnb/qdsp6/src/omx_amr_aenc.cpp
+++ b/mm-audio/aenc-amrnb/qdsp6/src/omx_amr_aenc.cpp
@@ -1102,13 +1102,28 @@
component_Role.nVersion.nVersion = OMX_SPEC_VERSION;
if (!strcmp(role,"OMX.qcom.audio.encoder.amrnb"))
{
+ amrwb_enable = 0;
pcm_input = 1;
component_Role.nSize = (OMX_U32)sizeof(role);
strlcpy((char *)component_Role.cRole, (const char*)role,
sizeof(component_Role.cRole));
DEBUG_PRINT("\ncomponent_init: Component %s LOADED \n", role);
- } else if (!strcmp(role,"OMX.qcom.audio.encoder.tunneled.amrnb"))
- {
+ } else if (!strcmp(role,"OMX.qcom.audio.encoder.tunneled.amrnb")) {
+ amrwb_enable = 0;
+ pcm_input = 0;
+ component_Role.nSize = (OMX_U32)sizeof(role);
+ strlcpy((char *)component_Role.cRole, (const char*)role,
+ sizeof(component_Role.cRole));
+ DEBUG_PRINT("\ncomponent_init: Component %s LOADED \n", role);
+ } else if (!strcmp(role,"OMX.qcom.audio.encoder.amrwb")) {
+ amrwb_enable = 1;
+ pcm_input = 1;
+ component_Role.nSize = (OMX_U32)sizeof(role);
+ strlcpy((char *)component_Role.cRole, (const char*)role,
+ sizeof(component_Role.cRole));
+ DEBUG_PRINT("\ncomponent_init: Component %s LOADED \n", role);
+ } else if (!strcmp(role,"OMX.qcom.audio.encoder.tunneled.amrwb")) {
+ amrwb_enable = 1;
pcm_input = 0;
component_Role.nSize = (OMX_U32)sizeof(role);
strlcpy((char *)component_Role.cRole, (const char*)role,
@@ -1124,12 +1139,12 @@
if(pcm_input)
{
m_tmp_meta_buf = (OMX_U8*) malloc(sizeof(OMX_U8) *
- (OMX_CORE_INPUT_BUFFER_SIZE + sizeof(META_IN)));
+ (OMX_CORE_INPUT_BUFFER_SIZE + sizeof(META_IN)));
if (m_tmp_meta_buf == NULL){
DEBUG_PRINT_ERROR("Mem alloc failed for tmp meta buf\n");
- return OMX_ErrorInsufficientResources;
- }
+ return OMX_ErrorInsufficientResources;
+ }
}
m_tmp_out_meta_buf =
(OMX_U8*)malloc(sizeof(OMX_U8)*OMX_AMR_OUTPUT_BUFFER_SIZE);
@@ -1138,16 +1153,29 @@
return OMX_ErrorInsufficientResources;
}
- if(0 == pcm_input)
- {
- m_drv_fd = open("/dev/msm_amrnb_in",O_RDONLY);
- DEBUG_PRINT("Driver in Tunnel mode open\n");
- }
- else
- {
- m_drv_fd = open("/dev/msm_amrnb_in",O_RDWR);
- DEBUG_PRINT("Driver in Non Tunnel mode open\n");
- }
+ if(!amrwb_enable) {
+ if(0 == pcm_input)
+ {
+ m_drv_fd = open("/dev/msm_amrnb_in",O_RDONLY);
+ DEBUG_PRINT("Driver in Tunnel mode open\n");
+ }
+ else
+ {
+ m_drv_fd = open("/dev/msm_amrnb_in",O_RDWR);
+ DEBUG_PRINT("Driver in Non Tunnel mode open\n");
+ }
+ } else {
+ if(0 == pcm_input)
+ {
+ m_drv_fd = open("/dev/msm_amrwb_in",O_RDONLY);
+ DEBUG_PRINT("Driver in Tunnel mode open\n");
+ }
+ else
+ {
+ m_drv_fd = open("/dev/msm_amrwb_in",O_RDWR);
+ DEBUG_PRINT("Driver in Non Tunnel mode open\n");
+ }
+ }
if (m_drv_fd < 0)
{
DEBUG_PRINT_ERROR("Component_init Open Failed[%d] errno[%d]",\
@@ -1417,6 +1445,7 @@
{
struct msm_audio_amrnb_enc_config_v2 drv_amr_enc_config;
+ struct msm_audio_amrwb_enc_config drv_amrwb_enc_config;
struct msm_audio_stream_config drv_stream_config;
struct msm_audio_buf_cfg buf_cfg;
struct msm_audio_config pcm_cfg;
@@ -1433,22 +1462,49 @@
DEBUG_PRINT_ERROR("ioctl AUDIO_SET_STREAM_CONFIG failed, \
errno[%d]\n", errno);
}
+ if(!amrwb_enable)
+ {
+ if(ioctl(m_drv_fd, AUDIO_GET_AMRNB_ENC_CONFIG_V2,
+ &drv_amr_enc_config) == -1)
+ {
+ DEBUG_PRINT_ERROR("ioctl AUDIO_GET_AMRNB_ENC_CONFIG_V2 \
+ failed, errno[%d]\n", errno);
+ }
+ } else {
+ if(ioctl(m_drv_fd, AUDIO_GET_AMRWB_ENC_CONFIG,
+ &drv_amrwb_enc_config) == -1)
+ {
+ DEBUG_PRINT_ERROR("ioctl AUDIO_GET_AMRWB_ENC_CONFIG \
+ failed, errno[%d]\n", errno);
+ }
+ }
+ if(!amrwb_enable) {
+ drv_amr_enc_config.band_mode = m_amr_param.eAMRBandMode;
+ drv_amr_enc_config.dtx_enable = m_amr_param.eAMRDTXMode;
+ drv_amr_enc_config.frame_format = m_amr_param.eAMRFrameFormat;
+ } else {
+ drv_amrwb_enc_config.band_mode = m_amr_param.eAMRBandMode;
+ drv_amrwb_enc_config.dtx_enable = m_amr_param.eAMRDTXMode;
+ drv_amrwb_enc_config.frame_format = m_amr_param.eAMRFrameFormat;
+ }
- if(ioctl(m_drv_fd, AUDIO_GET_AMRNB_ENC_CONFIG_V2,
- &drv_amr_enc_config) == -1)
+ if(!amrwb_enable)
{
- DEBUG_PRINT_ERROR("ioctl AUDIO_GET_AMRNB_ENC_CONFIG_V2 \
- failed, errno[%d]\n", errno);
+ if(ioctl(m_drv_fd, AUDIO_SET_AMRNB_ENC_CONFIG_V2, &drv_amr_enc_config)
+ == -1)
+ {
+ DEBUG_PRINT_ERROR("ioctl AUDIO_SET_AMRNB_ENC_CONFIG_V2 \
+ failed, errno[%d]\n", errno);
+ }
+ } else {
+ if(ioctl(m_drv_fd, AUDIO_SET_AMRWB_ENC_CONFIG, &drv_amrwb_enc_config)
+ == -1)
+ {
+ DEBUG_PRINT_ERROR("ioctl AUDIO_SET_AMRWB_ENC_CONFIG \
+ failed, errno[%d]\n", errno);
+ }
}
- drv_amr_enc_config.band_mode = m_amr_param.eAMRBandMode;
- drv_amr_enc_config.dtx_enable = m_amr_param.eAMRDTXMode;
- drv_amr_enc_config.frame_format = m_amr_param.eAMRFrameFormat;
- if(ioctl(m_drv_fd, AUDIO_SET_AMRNB_ENC_CONFIG_V2, &drv_amr_enc_config)
- == -1)
- {
- DEBUG_PRINT_ERROR("ioctl AUDIO_SET_AMRNB_ENC_CONFIG_V2 \
- failed, errno[%d]\n", errno);
- }
+
if (ioctl(m_drv_fd, AUDIO_GET_BUF_CFG, &buf_cfg) == -1)
{
DEBUG_PRINT_ERROR("ioctl AUDIO_GET_BUF_CFG, errno[%d]\n",
diff --git a/mm-audio/aenc-amrnb/qdsp6/test/omx_amr_enc_test.c b/mm-audio/aenc-amrnb/qdsp6/test/omx_amr_enc_test.c
index e509748..3448bff 100644
--- a/mm-audio/aenc-amrnb/qdsp6/test/omx_amr_enc_test.c
+++ b/mm-audio/aenc-amrnb/qdsp6/test/omx_amr_enc_test.c
@@ -89,6 +89,7 @@
uint32_t pcmplayback = 0;
uint32_t tunnel = 0;
uint32_t format = 1;
+uint32_t amrwb_enable=0;
#define DEBUG_PRINT printf
unsigned to_idle_transition = 0;
unsigned long total_pcm_bytes;
@@ -110,6 +111,7 @@
#define MIN_BITRATE 4 /* Bit rate 1 - 13.6 , 2 - 6.2 , 3 - 2.7 , 4 - 1.0 kbps*/
#define MAX_BITRATE 4
#define AMR_HEADER_SIZE 6
+#define AMRWB_HEADER_SIZE 9
#define FAILED(result) (result != OMX_ErrorNone)
#define SUCCEEDED(result) (result == OMX_ErrorNone)
@@ -499,6 +501,7 @@
struct sigaction sa;
char amr_header[6] = {0x23, 0x21, 0x41, 0x4D, 0x52, 0x0A};
+ char amrwb_header[9] = {0x23, 0x21, 0x41, 0x4D, 0x52,0x2D, 0x57, 0x42, 0x0A};
memset(&sa, 0, sizeof(sa));
sa.sa_handler = &signal_handler;
sigaction(SIGABRT, &sa, NULL);
@@ -513,7 +516,7 @@
pthread_mutex_init(&etb_lock, 0);
pthread_mutex_init(&etb_lock1, 0);
- if (argc >= 8) {
+ if (argc >= 9) {
in_filename = argv[1];
out_filename = argv[2];
tunnel = (uint32_t)atoi(argv[3]);
@@ -521,23 +524,35 @@
dtxenable = (uint32_t)atoi(argv[5]);
recpath = (uint32_t)atoi(argv[6]); // No configuration support yet..
rectime = (uint32_t)atoi(argv[7]);
+ amrwb_enable = (uint32_t)atoi(argv[8]);
} else {
DEBUG_PRINT(" invalid format: \n");
- DEBUG_PRINT("ex: ./mm-aenc-omxamr-test INPUTFILE OUTPUTFILE Tunnel BANDMODE DTXENABLE RECORDPATH RECORDTIME\n");
+ DEBUG_PRINT("ex: ./mm-aenc-omxamr-test INPUTFILE OUTPUTFILE Tunnel BANDMODE DTXENABLE RECORDPATH RECORDTIME amrwb_enable \n");
DEBUG_PRINT("Bandmode 1-7, dtxenable 0-1\n");
DEBUG_PRINT("RECORDPATH 0(TX),1(RX),2(BOTH),3(MIC)\n");
DEBUG_PRINT("RECORDTIME in seconds for AST Automation\n");
+ DEBUG_PRINT("amrwb_enable:1-amrwb 0-amrnb\n");
return 0;
}
if(recpath != 3) {
DEBUG_PRINT("For RECORDPATH Only MIC supported\n");
return 0;
}
- if(tunnel == 0)
- aud_comp = "OMX.qcom.audio.encoder.amrnb";
- else
- aud_comp = "OMX.qcom.audio.encoder.tunneled.amrnb";
+ if(!amrwb_enable)
+ {
+ if(tunnel == 0)
+ aud_comp = "OMX.qcom.audio.encoder.amrnb";
+ else
+ aud_comp = "OMX.qcom.audio.encoder.tunneled.amrnb";
+ }
+ else {
+ if(tunnel == 0)
+ aud_comp = "OMX.qcom.audio.encoder.amrwb";
+ else
+ aud_comp = "OMX.qcom.audio.encoder.tunneled.amrwb";
+ }
+
if(Init_Encoder(aud_comp)!= 0x00)
{
DEBUG_PRINT("Decoder Init failed\n");
@@ -589,7 +604,10 @@
}
wait_for_event();
fseek(outputBufferFile, 0,SEEK_SET);
- fwrite(amr_header,1,AMR_HEADER_SIZE,outputBufferFile);
+ if(!amrwb_enable)
+ fwrite(amr_header,1,AMR_HEADER_SIZE,outputBufferFile);
+ else
+ fwrite(amrwb_header,1,AMRWB_HEADER_SIZE,outputBufferFile);
result = OMX_FreeHandle(amr_enc_handle);
if (result != OMX_ErrorNone) {
@@ -1013,7 +1031,11 @@
error_code = -1;
return error_code;
}
- fseek(outputBufferFile, AMR_HEADER_SIZE, SEEK_SET);
+ if(!amrwb_enable) {
+ fseek(outputBufferFile, AMR_HEADER_SIZE, SEEK_SET);
+ } else {
+ fseek(outputBufferFile, AMRWB_HEADER_SIZE, SEEK_SET);
+ }
return error_code;
}