fix libmix encoder klockwork issues, rename IntelMetadatabuffer APIs
BZ: 50965
fix libmix encoder klockwork issues, remove all unused variables;
rename IntelMetadatabuffer APIs, rename SetBytes to UnSerialize,
GetBytes to Serialize, SetBytes/GetBytes will be dropped later;
Refine encoder code to avoid dynamic memory allocation.
Change-Id: I44344bb6d2e8536e65ecee8957e67722c1af21e5
Signed-off-by: Zhao Liang <leo.zhao@intel.com>
Reviewed-on: http://android.intel.com:8080/60688
Reviewed-by: Ding, Haitao <haitao.ding@intel.com>
Tested-by: Ding, Haitao <haitao.ding@intel.com>
Reviewed-by: buildbot <buildbot@intel.com>
Tested-by: buildbot <buildbot@intel.com>
diff --git a/test/btest.cpp b/test/btest.cpp
index 26f104f..13b790b 100644
--- a/test/btest.cpp
+++ b/test/btest.cpp
@@ -37,7 +37,7 @@
ret = mb1->SetValueInfo(&vi1);
ret = mb1->SetExtraValues(ev1, 10);
}
- ret = mb1->GetBytes(bytes, size);
+ ret = mb1->Serialize(bytes, size);
printf("assembling IntelMetadataBuffer %s, ret = %d\n", (ret == IMB_SUCCESS)?"Success":"Fail", ret );
printf("size = %d, bytes = ", size);
@@ -48,7 +48,7 @@
printf("\n");
mb2 = new IntelMetadataBuffer();
- ret = mb2->SetBytes(bytes, size);
+ ret = mb2->UnSerialize(bytes, size);
printf("parsing IntelMetadataBuffer %s, ret = %d\n", (ret == IMB_SUCCESS)?"Success":"Fail", ret );
ret = mb2->GetType(t2);
diff --git a/test/mix_encoder.cpp b/test/mix_encoder.cpp
index 38fbc00..d4b88c0 100644
--- a/test/mix_encoder.cpp
+++ b/test/mix_encoder.cpp
@@ -697,7 +697,7 @@
{
if (gMode != 4)
{
- gIMB[i % gSrcFrames]->GetBytes(data, size);
+ gIMB[i % gSrcFrames]->Serialize(data, size);
// printf("srcno =%d, data=%x, size=%d\n", i % gSrcFrames, data, size);
}else
{
@@ -729,11 +729,10 @@
stat.total_frames, stat.skipped_frames, stat.average_encode_time, stat.max_encode_time, stat.max_encode_frame, \
stat.min_encode_time, stat.min_encode_frame );
}
- if(gVideoEncoder) {
- releaseVideoEncoder(gVideoEncoder);
- gVideoEncoder = NULL;
- }
+ gVideoEncoder->stop();
+ releaseVideoEncoder(gVideoEncoder);
+ gVideoEncoder = NULL;
switch(gMode)
{
diff --git a/videoencoder/IntelMetadataBuffer.cpp b/videoencoder/IntelMetadataBuffer.cpp
index 531d0ca..eb9fe43 100644
--- a/videoencoder/IntelMetadataBuffer.cpp
+++ b/videoencoder/IntelMetadataBuffer.cpp
@@ -60,6 +60,55 @@
delete[] mBytes;
}
+
+IntelMetadataBuffer::IntelMetadataBuffer(const IntelMetadataBuffer& imb)
+ :mType(imb.mType), mValue(imb.mValue), mInfo(NULL), mExtraValues(NULL),
+ mExtraValues_Count(imb.mExtraValues_Count), mBytes(NULL), mSize(imb.mSize)
+{
+ if (imb.mInfo)
+ mInfo = new ValueInfo(*imb.mInfo);
+
+ if (imb.mExtraValues)
+ {
+ mExtraValues = new int32_t[mExtraValues_Count];
+ memcpy(mExtraValues, imb.mExtraValues, 4 * mExtraValues_Count);
+ }
+
+ if (imb.mBytes)
+ {
+ mBytes = new uint8_t[mSize];
+ memcpy(mBytes, imb.mBytes, mSize);
+ }
+}
+
+const IntelMetadataBuffer& IntelMetadataBuffer::operator=(const IntelMetadataBuffer& imb)
+{
+ mType = imb.mType;
+ mValue = imb.mValue;
+ mInfo = NULL;
+ mExtraValues = NULL;
+ mExtraValues_Count = imb.mExtraValues_Count;
+ mBytes = NULL;
+ mSize = imb.mSize;
+
+ if (imb.mInfo)
+ mInfo = new ValueInfo(*imb.mInfo);
+
+ if (imb.mExtraValues)
+ {
+ mExtraValues = new int32_t[mExtraValues_Count];
+ memcpy(mExtraValues, imb.mExtraValues, 4 * mExtraValues_Count);
+ }
+
+ if (imb.mBytes)
+ {
+ mBytes = new uint8_t[mSize];
+ memcpy(mBytes, imb.mBytes, mSize);
+ }
+
+ return *this;
+}
+
IMB_Result IntelMetadataBuffer::GetType(MetadataBufferType& type)
{
type = mType;
@@ -143,7 +192,7 @@
return IMB_SUCCESS;
}
-IMB_Result IntelMetadataBuffer::SetBytes(uint8_t* data, uint32_t size)
+IMB_Result IntelMetadataBuffer::UnSerialize(uint8_t* data, uint32_t size)
{
if (!data || size == 0)
return IMB_INVAL_PARAM;
@@ -214,7 +263,12 @@
return IMB_SUCCESS;
}
-IMB_Result IntelMetadataBuffer::GetBytes(uint8_t* &data, uint32_t& size)
+IMB_Result IntelMetadataBuffer::SetBytes(uint8_t* data, uint32_t size)
+{
+ return UnSerialize(data, size);
+}
+
+IMB_Result IntelMetadataBuffer::Serialize(uint8_t* &data, uint32_t& size)
{
if (mBytes == NULL)
{
@@ -253,6 +307,11 @@
return IMB_SUCCESS;
}
+IMB_Result IntelMetadataBuffer::GetBytes(uint8_t* &data, uint32_t& size)
+{
+ return Serialize(data, size);
+}
+
uint32_t IntelMetadataBuffer::GetMaxBufferSize()
{
return 256;
diff --git a/videoencoder/IntelMetadataBuffer.h b/videoencoder/IntelMetadataBuffer.h
index 802ef7b..2eacc5f 100644
--- a/videoencoder/IntelMetadataBuffer.h
+++ b/videoencoder/IntelMetadataBuffer.h
@@ -72,6 +72,9 @@
IntelMetadataBuffer(MetadataBufferType type, int32_t value); //for quick generator
~IntelMetadataBuffer();
+ IntelMetadataBuffer(const IntelMetadataBuffer& imb);
+ const IntelMetadataBuffer& operator=(const IntelMetadataBuffer& imb);
+
IMB_Result GetType(MetadataBufferType &type);
IMB_Result SetType(MetadataBufferType type);
IMB_Result GetValue(int32_t &value);
@@ -81,12 +84,15 @@
IMB_Result GetExtraValues(int32_t* &values, uint32_t &num);
IMB_Result SetExtraValues(int32_t *values, uint32_t num);
- //for bytes input, also for parser
+ //for bytes input, also for parser, will be obsoleted
IMB_Result SetBytes(uint8_t* data, uint32_t size);
-
- //for bytes output, also for generator
+ //for bytes output, also for generator, will be obsoleted
IMB_Result GetBytes(uint8_t* &data, uint32_t& size);
+ //New API for bytes input/ouput, UnSerialize=SetBytes, Serialize=GetBytes
+ IMB_Result UnSerialize(uint8_t* data, uint32_t size);
+ IMB_Result Serialize(uint8_t* &data, uint32_t& size);
+
//Static, for get max IntelMetadataBuffer size
static uint32_t GetMaxBufferSize();
diff --git a/videoencoder/VideoEncoderAVC.cpp b/videoencoder/VideoEncoderAVC.cpp
index 5922e6a..738eefa 100644
--- a/videoencoder/VideoEncoderAVC.cpp
+++ b/videoencoder/VideoEncoderAVC.cpp
@@ -197,9 +197,6 @@
Encode_Status ret = ENCODE_SUCCESS;
VAStatus vaStatus = VA_STATUS_SUCCESS;
bool useLocalBuffer = false;
- uint32_t nalType = 0;
- uint32_t nalSize = 0;
- uint32_t nalOffset = 0;
uint32_t idrPeroid = mComParams.intraPeriod * mVideoParamsAVC.idrInterval;
LOG_V("Begin\n");
@@ -283,8 +280,6 @@
uint32_t *nalType, uint32_t *nalOffset, uint32_t status) {
uint32_t pos = 0;
uint32_t zeroByteCount = 0;
- uint32_t prefixLength = 0;
- uint32_t leadingZeroCnt = 0;
uint32_t singleByteTable[3][2] = {{1,0},{2,0},{2,3}};
uint32_t dataRemaining = 0;
uint8_t *dataPtr;
@@ -520,7 +515,6 @@
uint32_t nalSize = 0;
uint32_t nalOffset = 0;
uint32_t sizeCopiedHere = 0;
- uint32_t sizeToBeCopied = 0;
CHECK_NULL_RETURN_IFFAIL(mCurSegment->buf);
@@ -648,7 +642,6 @@
Encode_Status VideoEncoderAVC::renderMaxSliceSize() {
VAStatus vaStatus = VA_STATUS_SUCCESS;
- Encode_Status ret = ENCODE_SUCCESS;
LOG_V( "Begin\n\n");
if (mComParams.rcMode != RATE_CONTROL_VCM) {
@@ -794,12 +787,6 @@
avcSeqParams.intra_idr_period = mVideoParamsAVC.idrInterval;
avcSeqParams.picture_width_in_mbs = (mComParams.resolution.width + 15) / 16;
avcSeqParams.picture_height_in_mbs = (mComParams.resolution.height + 15) / 16;
- if((avcSeqParams.picture_width_in_mbs >=1920)|| (avcSeqParams.picture_height_in_mbs >=1080))
- {
- device_info = vaQueryVendorString(mVADisplay);
- if(strstr(device_info, "LEXINGTON"))
- return ENCODE_INVALID_PARAMS;
- }
level = calcLevel (avcSeqParams.picture_width_in_mbs * avcSeqParams.picture_height_in_mbs);
avcSeqParams.level_idc = level;
@@ -913,7 +900,6 @@
VAStatus vaStatus = VA_STATUS_SUCCESS;
uint32_t sliceNum = 0;
- uint32_t sliceHeight = 0;
uint32_t sliceIndex = 0;
uint32_t sliceHeightInMB = 0;
uint32_t maxSliceNum = 0;
diff --git a/videoencoder/VideoEncoderBase.cpp b/videoencoder/VideoEncoderBase.cpp
index b574d2c..f4df5e2 100644
--- a/videoencoder/VideoEncoderBase.cpp
+++ b/videoencoder/VideoEncoderBase.cpp
@@ -649,7 +649,6 @@
Encode_Status VideoEncoderBase::prepareForOutput(
VideoEncOutputBuffer *outBuffer, bool *useLocalBuffer) {
- Encode_Status ret = ENCODE_SUCCESS;
VAStatus vaStatus = VA_STATUS_SUCCESS;
VACodedBufferSegment *vaCodedSeg = NULL;
uint32_t status = 0;
@@ -733,7 +732,6 @@
Encode_Status VideoEncoderBase::cleanupForOutput() {
VAStatus vaStatus = VA_STATUS_SUCCESS;
- Encode_Status ret = ENCODE_SUCCESS;
//mCurSegment is NULL means all data has been copied out
if (mCurSegment == NULL && mCodedBufferMapped) {
@@ -1733,25 +1731,23 @@
int32_t *extravalues = NULL;
unsigned int extravalues_count = 0;
- IntelMetadataBuffer *imb = new IntelMetadataBuffer;
+ IntelMetadataBuffer imb;
SurfaceMap *map = NULL;
if (mStoreMetaDataInBuffers.isEnabled) {
//metadatabuffer mode
LOG_I("in metadata mode, data=%p, size=%d\n", inBuffer->data, inBuffer->size);
- if (imb->SetBytes(inBuffer->data, inBuffer->size) != IMB_SUCCESS) {
+ if (imb.UnSerialize(inBuffer->data, inBuffer->size) != IMB_SUCCESS) {
//fail to parse buffer
- delete imb;
return ENCODE_NO_REQUEST_DATA;
}
- imb->GetType(type);
- imb->GetValue(value);
+ imb.GetType(type);
+ imb.GetValue(value);
} else {
//raw mode
LOG_I("in raw mode, data=%p, size=%d\n", inBuffer->data, inBuffer->size);
if (! inBuffer->data || inBuffer->size == 0) {
- delete imb;
return ENCODE_NULL_PTR;
}
@@ -1767,7 +1763,6 @@
LOG_I("direct find surface %d from value %x\n", map->surface, value);
mCurSurface = map->surface;
- delete imb;
return ret;
}
@@ -1789,8 +1784,8 @@
vinfo.s3dformat = 0xFFFFFFFF;
} else {
//get all info mapping needs
- imb->GetValueInfo(pvinfo);
- imb->GetExtraValues(extravalues, extravalues_count);
+ imb.GetValueInfo(pvinfo);
+ imb.GetExtraValues(extravalues, extravalues_count);
}
} else {
@@ -1825,7 +1820,6 @@
mSrcSurfaceMapList = appendSurfaceMap(mSrcSurfaceMapList, map);
} else {
delete map;
- delete imb;
LOG_E("surface mapping failed, wrong info or meet serious error\n");
return ret;
}
@@ -1834,7 +1828,6 @@
} else {
//can't map due to no info
- delete imb;
LOG_E("surface mapping failed, missing information\n");
return ENCODE_NO_REQUEST_DATA;
}
@@ -1861,8 +1854,6 @@
}
}
- delete imb;
-
return ret;
}
diff --git a/videoencoder/VideoEncoderH263.cpp b/videoencoder/VideoEncoderH263.cpp
index 68f8741..cbe1e09 100644
--- a/videoencoder/VideoEncoderH263.cpp
+++ b/videoencoder/VideoEncoderH263.cpp
@@ -120,7 +120,6 @@
Encode_Status VideoEncoderH263::renderSliceParams() {
VAStatus vaStatus = VA_STATUS_SUCCESS;
- uint32_t sliceNum;
uint32_t sliceHeight;
uint32_t sliceHeightInMB;
diff --git a/videoencoder/VideoEncoderMP4.cpp b/videoencoder/VideoEncoderMP4.cpp
index 51068f4..d93d774 100644
--- a/videoencoder/VideoEncoderMP4.cpp
+++ b/videoencoder/VideoEncoderMP4.cpp
@@ -22,9 +22,7 @@
Encode_Status VideoEncoderMP4::getHeaderPos(
uint8_t *inBuffer, uint32_t bufSize, uint32_t *headerSize) {
- uint8_t *buf = inBuffer;
uint32_t bytesLeft = bufSize;
- Encode_Status ret = ENCODE_SUCCESS;
*headerSize = 0;
CHECK_NULL_RETURN_IFFAIL(inBuffer);