aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason M Harper <jasonx.m.harper@intel.com>2011-05-06 10:35:21 -0700
committerPatrick Tjin <pattjin@google.com>2014-07-21 22:03:38 -0700
commite503ec3c9728cb056beb28d4cfbe267962bdd1c9 (patch)
treede09a5517c6ced1882f9064110a0b269d1f94dbc
parenta08b0640a5c18bef7ddf8493abb249dc05df2f2f (diff)
downloadwrs_omxil_core-e503ec3c9728cb056beb28d4cfbe267962bdd1c9.tar.gz
wrs_omxil_core: Add support for AMR codec ports.
BZ: 1772 Added helper class/functions for AMR codecs. All IPP audio codecs being moved to OMX wrappers for consistency and performance/power improvements. Change-Id: Iab26290f2be699979fff3a542150cb08d0a35eba Signed-off-by: Jason M Harper <jasonx.m.harper@intel.com>
-rw-r--r--base/inc/portaudio.h16
-rw-r--r--base/src/portaudio.cpp50
2 files changed, 66 insertions, 0 deletions
diff --git a/base/inc/portaudio.h b/base/inc/portaudio.h
index 1c0debf..280f6f7 100644
--- a/base/inc/portaudio.h
+++ b/base/inc/portaudio.h
@@ -100,4 +100,20 @@ private:
/* end of PortPcm */
+class PortAmr : public PortAudio
+{
+public:
+ PortAmr();
+
+ OMX_ERRORTYPE SetPortAmrParam(const OMX_AUDIO_PARAM_AMRTYPE *p,
+ bool overwrite_readonly);
+ const OMX_AUDIO_PARAM_AMRTYPE*GetPortAmrParam(void);
+
+private:
+ OMX_AUDIO_PARAM_AMRTYPE amrparam;
+};
+
+/* end of PortAmr */
+
+
#endif /* __PORTAUDIO_H */
diff --git a/base/src/portaudio.cpp b/base/src/portaudio.cpp
index cab5e36..e0c315b 100644
--- a/base/src/portaudio.cpp
+++ b/base/src/portaudio.cpp
@@ -274,3 +274,53 @@ const OMX_AUDIO_PARAM_PCMMODETYPE *PortPcm::GetPortPcmParam(void)
}
/* end of PortPcm */
+
+PortAmr::PortAmr()
+{
+ OMX_AUDIO_PARAM_PORTFORMATTYPE audioparam;
+
+ memcpy(&audioparam, GetPortAudioParam(), sizeof(audioparam));
+ audioparam.eEncoding = OMX_AUDIO_CodingAMR;
+ SetPortAudioParam(&audioparam, false);
+
+ memset(&amrparam, 0, sizeof(amrparam));
+ ComponentBase::SetTypeHeader(&amrparam, sizeof(amrparam));
+}
+
+OMX_ERRORTYPE PortAmr::SetPortAmrParam(const OMX_AUDIO_PARAM_AMRTYPE *p,
+ bool overwrite_readonly)
+{
+ if (!overwrite_readonly) {
+ OMX_ERRORTYPE ret;
+
+ ret = ComponentBase::CheckTypeHeader((void *)p, sizeof(*p));
+ if (ret != OMX_ErrorNone)
+ return ret;
+ if (amrparam.nPortIndex != p->nPortIndex)
+ return OMX_ErrorBadPortIndex;
+ }
+ else {
+ OMX_AUDIO_PARAM_PORTFORMATTYPE audioparam;
+
+ memcpy(&audioparam, GetPortAudioParam(), sizeof(audioparam));
+ audioparam.nPortIndex = p->nPortIndex;
+ SetPortAudioParam(&audioparam, true);
+
+ amrparam.nPortIndex = p->nPortIndex;
+ }
+
+ amrparam.nChannels = p->nChannels;
+ amrparam.nBitRate = p->nBitRate;
+ amrparam.eAMRBandMode = p->eAMRBandMode;
+ amrparam.eAMRDTXMode = p->eAMRDTXMode;
+ amrparam.eAMRFrameFormat = p->eAMRFrameFormat;
+
+ return OMX_ErrorNone;
+}
+
+const OMX_AUDIO_PARAM_AMRTYPE *PortAmr::GetPortAmrParam(void)
+{
+ return &amrparam;
+}
+
+/* end of PortAmr */