summaryrefslogtreecommitdiffstats
path: root/media/libnbaio/NBAIO.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'media/libnbaio/NBAIO.cpp')
-rw-r--r--media/libnbaio/NBAIO.cpp41
1 files changed, 29 insertions, 12 deletions
diff --git a/media/libnbaio/NBAIO.cpp b/media/libnbaio/NBAIO.cpp
index e0d2c21..51514de 100644
--- a/media/libnbaio/NBAIO.cpp
+++ b/media/libnbaio/NBAIO.cpp
@@ -22,17 +22,22 @@
namespace android {
-size_t Format_frameSize(NBAIO_Format format)
+size_t Format_frameSize(const NBAIO_Format& format)
{
+ // FIXME The sample format is hard-coded to AUDIO_FORMAT_PCM_16_BIT
return Format_channelCount(format) * sizeof(short);
}
-size_t Format_frameBitShift(NBAIO_Format format)
+int Format_frameBitShift(const NBAIO_Format& format)
{
+ // FIXME The sample format is hard-coded to AUDIO_FORMAT_PCM_16_BIT
// sizeof(short) == 2, so frame size == 1 << channels
return Format_channelCount(format);
+ // FIXME must return -1 for non-power of 2
}
+const NBAIO_Format Format_Invalid = { 0 };
+
enum {
Format_SR_8000,
Format_SR_11025,
@@ -51,12 +56,12 @@ enum {
Format_C_Mask = 0x18
};
-unsigned Format_sampleRate(NBAIO_Format format)
+unsigned Format_sampleRate(const NBAIO_Format& format)
{
- if (format == Format_Invalid) {
+ if (!Format_isValid(format)) {
return 0;
}
- switch (format & Format_SR_Mask) {
+ switch (format.mPacked & Format_SR_Mask) {
case Format_SR_8000:
return 8000;
case Format_SR_11025:
@@ -78,12 +83,12 @@ unsigned Format_sampleRate(NBAIO_Format format)
}
}
-unsigned Format_channelCount(NBAIO_Format format)
+unsigned Format_channelCount(const NBAIO_Format& format)
{
- if (format == Format_Invalid) {
+ if (!Format_isValid(format)) {
return 0;
}
- switch (format & Format_C_Mask) {
+ switch (format.mPacked & Format_C_Mask) {
case Format_C_1:
return 1;
case Format_C_2:
@@ -95,7 +100,7 @@ unsigned Format_channelCount(NBAIO_Format format)
NBAIO_Format Format_from_SR_C(unsigned sampleRate, unsigned channelCount)
{
- NBAIO_Format format;
+ unsigned format;
switch (sampleRate) {
case 8000:
format = Format_SR_8000;
@@ -134,7 +139,9 @@ NBAIO_Format Format_from_SR_C(unsigned sampleRate, unsigned channelCount)
default:
return Format_Invalid;
}
- return format;
+ NBAIO_Format ret;
+ ret.mPacked = format;
+ return ret;
}
// This is a default implementation; it is expected that subclasses will optimize this.
@@ -216,9 +223,9 @@ ssize_t NBAIO_Port::negotiate(const NBAIO_Format offers[], size_t numOffers,
{
ALOGV("negotiate offers=%p numOffers=%u countersOffers=%p numCounterOffers=%u",
offers, numOffers, counterOffers, numCounterOffers);
- if (mFormat != Format_Invalid) {
+ if (Format_isValid(mFormat)) {
for (size_t i = 0; i < numOffers; ++i) {
- if (offers[i] == mFormat) {
+ if (Format_isEqual(offers[i], mFormat)) {
mNegotiated = true;
return i;
}
@@ -233,4 +240,14 @@ ssize_t NBAIO_Port::negotiate(const NBAIO_Format offers[], size_t numOffers,
return (ssize_t) NEGOTIATE;
}
+bool Format_isValid(const NBAIO_Format& format)
+{
+ return format.mPacked != Format_Invalid.mPacked;
+}
+
+bool Format_isEqual(const NBAIO_Format& format1, const NBAIO_Format& format2)
+{
+ return format1.mPacked == format2.mPacked;
+}
+
} // namespace android