diff options
author | v0lt <v0lt@rambler.ru> | 2013-05-18 08:46:47 +0400 |
---|---|---|
committer | v0lt <v0lt@rambler.ru> | 2013-05-18 08:46:47 +0400 |
commit | 994119bd13f79759d8c6fc349a9baf070ca0dfe3 (patch) | |
tree | a12e86ece76632f0adefbe00f78013096bb5b9dd /src | |
parent | b4c5355498cca2d90aa4fdbd760bfbca1993b35f (diff) |
MpaDecFilter: added convert_int24_to_int32 function.
Diffstat (limited to 'src')
-rw-r--r-- | src/filters/transform/MpaDecFilter/AudioHelper.h | 9 | ||||
-rw-r--r-- | src/filters/transform/MpaDecFilter/MpaDecFilter.cpp | 14 |
2 files changed, 12 insertions, 11 deletions
diff --git a/src/filters/transform/MpaDecFilter/AudioHelper.h b/src/filters/transform/MpaDecFilter/AudioHelper.h index 41d0cd10e..1b5fd2031 100644 --- a/src/filters/transform/MpaDecFilter/AudioHelper.h +++ b/src/filters/transform/MpaDecFilter/AudioHelper.h @@ -52,3 +52,12 @@ HRESULT convert_to_int32(enum AVSampleFormat avsf, WORD nChannels, DWORD nSample HRESULT convert_to_float(enum AVSampleFormat avsf, WORD nChannels, DWORD nSamples, BYTE* pIn, float* pOut); HRESULT convert_to_planar_float(enum AVSampleFormat avsf, WORD nChannels, DWORD nSamples, BYTE* pIn, float* pOut); + +inline void convert_int24_to_int32(size_t allsamples, BYTE* pIn, int32_t* pOut) +{ + for (size_t i = 0; i < allsamples; ++i) { + pOut[i] = (uint32_t)pIn[3 * i] << 8 | + (uint32_t)pIn[3 * i + 1] << 16 | + (uint32_t)pIn[3 * i + 2] << 24; + } +} diff --git a/src/filters/transform/MpaDecFilter/MpaDecFilter.cpp b/src/filters/transform/MpaDecFilter/MpaDecFilter.cpp index 4c235e65e..e347e791a 100644 --- a/src/filters/transform/MpaDecFilter/MpaDecFilter.cpp +++ b/src/filters/transform/MpaDecFilter/MpaDecFilter.cpp @@ -1266,18 +1266,10 @@ HRESULT CMpaDecFilter::ProcessPCMintLE() // 'sowt', little-endian 'in24' and 'in out_avsf = AV_SAMPLE_FMT_S16;
memcpy(outBuff.GetData(), m_buff.GetData(), outSize);
break;
- case 24: { // signed little-endian 32-bit
+ case 24: // signed little-endian 32-bit
out_avsf = AV_SAMPLE_FMT_S32;
- uint8_t* pIn = (uint8_t*)m_buff.GetData();
- uint32_t* pOut = (uint32_t*)outBuff.GetData();
-
- for (size_t i = 0; i < nSamples; i++) {
- pOut[i] = (uint32_t)pIn[3 * i] << 8 |
- (uint32_t)pIn[3 * i + 1] << 16 |
- (uint32_t)pIn[3 * i + 2] << 24;
- }
- }
- break;
+ convert_int24_to_int32(nSamples, (uint8_t*)m_buff.GetData(), (int32_t*)outBuff.GetData());
+ break;
case 32: // signed little-endian 32-bit
out_avsf = AV_SAMPLE_FMT_S32;
memcpy(outBuff.GetData(), m_buff.GetData(), outSize);
|