diff options
Diffstat (limited to 'media/libnbaio/NBAIO.cpp')
-rw-r--r-- | media/libnbaio/NBAIO.cpp | 41 |
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 |