From 3084eb792963e57dbba5e2f11b1d0d1915a0e1bf Mon Sep 17 00:00:00 2001 From: JungYumin Date: Tue, 19 Mar 2013 17:29:54 +0900 Subject: [PATCH] Added parameter 'srcBufUsed' and 'dstBufUsed' to _IAudioEncoder::Encode() Change-Id: I1753fde5a7304831cbfca79b1288e08bc8e44cdc Signed-off-by: JungYumin --- src/FMedia_AacEncoder.cpp | 18 +++++++++--------- src/FMedia_AacEncoder.h | 2 +- src/FMedia_AmrEncoder.cpp | 18 +++++++++--------- src/FMedia_AmrEncoder.h | 2 +- src/FMedia_AudioEncoderImpl.cpp | 17 +++++++++++------ src/FMedia_IAudioEncoder.h | 2 +- 6 files changed, 32 insertions(+), 27 deletions(-) diff --git a/src/FMedia_AacEncoder.cpp b/src/FMedia_AacEncoder.cpp index 72a94c1..058b48f 100644 --- a/src/FMedia_AacEncoder.cpp +++ b/src/FMedia_AacEncoder.cpp @@ -192,7 +192,7 @@ CATCH: } result -_AacEncoder::Encode(const byte* srcBuf, int& srcBufLength, byte*& dstBuf, int& dstBufLength) +_AacEncoder::Encode(const byte* srcBuf, int srcBufSize, int &srcBufUsed, byte* dstBuf, int dstBufSize, int &dstBufUsed) { result r = E_SUCCESS; int res = 0; @@ -209,13 +209,13 @@ _AacEncoder::Encode(const byte* srcBuf, int& srcBufLength, byte*& dstBuf, int& d SysTryCatch(NID_MEDIA, srcBuf != null && dstBuf != null, r = E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used: 0x%x %d %d 0x%x %d %d", - GetErrorMessage(E_INVALID_ARG), srcBuf, srcBufLength, minSrcBufLength, dstBuf, dstBufLength, minDstBufLength); + GetErrorMessage(E_INVALID_ARG), srcBuf, srcBufSize, minSrcBufLength, dstBuf, dstBufSize, minDstBufLength); //Partial frame encoding is supported hence no need of checking sourcebuf length. - SysTryCatch(NID_MEDIA, dstBufLength >= minDstBufLength, + SysTryCatch(NID_MEDIA, dstBufSize >= minDstBufLength, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Destination Buffer Length is less than FF_MIN_BUFFER_SIZE: 0x%x %d %d 0x%x %d %d", - GetErrorMessage(E_OUT_OF_MEMORY), srcBuf, srcBufLength, minSrcBufLength, dstBuf, dstBufLength, minDstBufLength); + GetErrorMessage(E_OUT_OF_MEMORY), srcBuf, srcBufSize, minSrcBufLength, dstBuf, dstBufSize, minDstBufLength); //Only AV_SAMPLE_FMT_FLT is supported by FFMpeg AAC Encoder hence Sample Format Conversion from S16 to Float if (__pCodecCtx->sample_fmt == AV_SAMPLE_FMT_FLT) @@ -233,13 +233,13 @@ _AacEncoder::Encode(const byte* srcBuf, int& srcBufLength, byte*& dstBuf, int& d memset(__pInputBuf,0,__pCodecCtx->frame_size * __pCodecCtx->channels * FLT_SAMPLE_SIZE); - if(srcBufLength >= minSrcBufLength) + if(srcBufSize >= minSrcBufLength) { samples = audio_resample (__pResampleContext, (short *) __pInputBuf, (short *)srcBuf, __pCodecCtx->frame_size); } else { - int sampleCount = srcBufLength/(__pCodecCtx->channels * S16_SAMPLE_SIZE); + int sampleCount = srcBufSize/(__pCodecCtx->channels * S16_SAMPLE_SIZE); samples = audio_resample (__pResampleContext, (short *) __pInputBuf, (short *)srcBuf,sampleCount); } @@ -262,16 +262,16 @@ _AacEncoder::Encode(const byte* srcBuf, int& srcBufLength, byte*& dstBuf, int& d if(gotOutput) { memcpy(dstBuf,outPacket.data,outPacket.size); - dstBufLength = outPacket.size; + dstBufUsed = outPacket.size; av_free_packet(&outPacket); } else { - dstBufLength = 0; + dstBufUsed = 0; } } - srcBufLength = minSrcBufLength; //Input bytes used + srcBufUsed = minSrcBufLength; //Input bytes used return r; CATCH: diff --git a/src/FMedia_AacEncoder.h b/src/FMedia_AacEncoder.h index 26451b5..8186178 100644 --- a/src/FMedia_AacEncoder.h +++ b/src/FMedia_AacEncoder.h @@ -40,7 +40,7 @@ public: public: virtual result Construct(const Tizen::Base::Collection::HashMap* pOption = null); - virtual result Encode(const byte* srcBuf, int& srcBufLength, byte*& dstBuf, int& dstBufLength); + virtual result Encode(const byte* srcBuf, int srcBufSize, int& secBufUsed, byte* dstBuf, int dstBufSize, int &dstBufUsed); virtual result Reset(void); diff --git a/src/FMedia_AmrEncoder.cpp b/src/FMedia_AmrEncoder.cpp index 3427a8e..22ed840 100644 --- a/src/FMedia_AmrEncoder.cpp +++ b/src/FMedia_AmrEncoder.cpp @@ -128,7 +128,7 @@ CATCH: } result -_AmrEncoder::Encode(const byte* srcBuf, int& srcBufLength, byte*& dstBuf, int& dstBufLength) +_AmrEncoder::Encode(const byte* srcBuf, int srcBufSize, int &srcBufUsed, byte* dstBuf, int dstBufSize, int &dstBufUsed) { result r = E_SUCCESS; int res = 0; @@ -138,14 +138,14 @@ _AmrEncoder::Encode(const byte* srcBuf, int& srcBufLength, byte*& dstBuf, int& d //Partial frame encoding is supported by the open core amr_nb library . So no need of checking sourcebuf length. SysTryCatch(NID_MEDIA, srcBuf != null && dstBuf != null - && srcBufLength > 0 && dstBufLength > 0, + && srcBufSize > 0 && dstBufSize > 0, r = E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument is used. 0x%x %d 0x%x %d", - srcBuf, srcBufLength, dstBuf, dstBufLength); + srcBuf, srcBufSize, dstBuf, dstBufSize); // Encoding the Audio packet using the amr open core // Accomodating for destinationBuf less than encoded frame size. - if (dstBufLength >= DECODED_FRAME_SIZE ) + if (dstBufSize >= DECODED_FRAME_SIZE ) { res = Encoder_Interface_Encode(__pEnc, __encBitrate, (const short*)srcBuf, dstBuf, 0); } @@ -156,15 +156,15 @@ _AmrEncoder::Encode(const byte* srcBuf, int& srcBufLength, byte*& dstBuf, int& d SysTryCatch(NID_MEDIA, res > 0, r = E_SYSTEM, E_SYSTEM, "[%s] Amr Encoding Failed:%d", GetErrorMessage(E_SYSTEM), res); - SysTryCatch(NID_MEDIA, res <= dstBufLength, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, - "[%s] Amr Encoding Failed %d %d", GetErrorMessage(E_OUT_OF_MEMORY), res, dstBufLength); + SysTryCatch(NID_MEDIA, res <= dstBufSize, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, + "[%s] Amr Encoding Failed %d %d", GetErrorMessage(E_OUT_OF_MEMORY), res, dstBufSize); - if (dstBufLength < DECODED_FRAME_SIZE ) + if (dstBufSize < DECODED_FRAME_SIZE ) { memcpy(dstBuf, outBuf, res); } - srcBufLength = DECODED_FRAME_SIZE; - dstBufLength = res; + srcBufUsed = DECODED_FRAME_SIZE; + dstBufUsed = res; return r; CATCH: diff --git a/src/FMedia_AmrEncoder.h b/src/FMedia_AmrEncoder.h index c7ea003..904110e 100644 --- a/src/FMedia_AmrEncoder.h +++ b/src/FMedia_AmrEncoder.h @@ -40,7 +40,7 @@ public: public: virtual result Construct(const Tizen::Base::Collection::HashMap* pOption = null); - virtual result Encode(const byte* srcBuf, int& srcBufLength, byte*& dstBuf, int& dstBufLength); + virtual result Encode(const byte* srcBuf, int srcBufSize, int &srcBufUsed, byte* dstBuf, int dstBufSize, int &dstBufUsed); virtual result Reset(void); diff --git a/src/FMedia_AudioEncoderImpl.cpp b/src/FMedia_AudioEncoderImpl.cpp index 16af53f..32ea667 100644 --- a/src/FMedia_AudioEncoderImpl.cpp +++ b/src/FMedia_AudioEncoderImpl.cpp @@ -79,6 +79,8 @@ _AudioEncoderImpl::Encode(Tizen::Base::ByteBuffer& srcBuf, Tizen::Base::ByteBuff byte* pDstByte = null; int srcByteSize = 0; int dstByteSize = 0; + int srcByteUsed = 0; + int dstByteUsed = 0; int offset = 0; SysTryReturnResult(NID_MEDIA, __pEnc, E_INVALID_STATE, "not constructed"); @@ -91,27 +93,28 @@ _AudioEncoderImpl::Encode(Tizen::Base::ByteBuffer& srcBuf, Tizen::Base::ByteBuff SysTryCatch(NID_MEDIA, srcByteSize > 0 && dstByteSize > 0, r = E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used. srcSize:%d dstSize:%d", GetErrorMessage(E_INVALID_ARG), srcByteSize, dstByteSize); - r = __pEnc->Encode(pSrcByte, srcByteSize, pDstByte, dstByteSize); + r = __pEnc->Encode(pSrcByte, srcByteSize, srcByteUsed, pDstByte, dstByteSize, dstByteUsed); SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Audio Encoder encode failed", GetErrorMessage(r)); offset = srcBuf.GetPosition(); - if (offset + srcByteSize > srcBuf.GetLimit()) + + if (offset + srcByteUsed > srcBuf.GetLimit()) { srcBuf.SetPosition(srcBuf.GetLimit()); } else { - srcBuf.SetPosition(offset + srcByteSize); + srcBuf.SetPosition(offset + srcByteUsed); } offset = dstBuf.GetPosition(); - if (offset + dstByteSize > dstBuf.GetLimit()) + if (offset + dstByteUsed > dstBuf.GetLimit()) { dstBuf.SetPosition(dstBuf.GetLimit()); } else { - dstBuf.SetPosition(offset + dstByteSize); + dstBuf.SetPosition(offset + dstByteUsed); } return r; @@ -124,9 +127,11 @@ result _AudioEncoderImpl::Encode(const byte* srcBuf, int& srcBufLength, byte*& dstBuf, int& dstBufLength) { result r = E_SUCCESS; + int srcBufUsed = 0; + int dstBufUsed = 0; SysTryReturnResult(NID_MEDIA, __pEnc, E_INVALID_STATE, "not constructed"); - r = __pEnc->Encode(srcBuf, srcBufLength, dstBuf, dstBufLength); + r = __pEnc->Encode(srcBuf, srcBufLength, srcBufUsed, dstBuf, dstBufLength, dstBufUsed); SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Audio Encoder encode failed", GetErrorMessage(r)); return r; diff --git a/src/FMedia_IAudioEncoder.h b/src/FMedia_IAudioEncoder.h index d81e24c..4d7404d 100644 --- a/src/FMedia_IAudioEncoder.h +++ b/src/FMedia_IAudioEncoder.h @@ -36,7 +36,7 @@ public: public: virtual result Construct(const Tizen::Base::Collection::HashMap* pOption = null) = 0; - virtual result Encode(const byte* srcBuf, int& srcBufLength, byte*& dstBuf, int& dstBufLength) = 0; + virtual result Encode(const byte* pSrcBuf, int srcBufSize, int &srcBufUsed, byte* pDstBuf, int dstBufSize, int &dstBufUsed) = 0; virtual result Reset(void) = 0; }; -- 2.7.4