Loading media/codec2/components/avc/C2SoftAvcEnc.cpp +11 −60 Original line number Diff line number Diff line Loading @@ -454,19 +454,11 @@ static size_t GetCPUCoreCount() { } // namespace static IV_COLOR_FORMAT_T GetIvColorFormat() { static IV_COLOR_FORMAT_T sColorFormat = (GetYuv420FlexibleLayout() == FLEX_LAYOUT_SEMIPLANAR_UV) ? IV_YUV_420SP_UV : (GetYuv420FlexibleLayout() == FLEX_LAYOUT_SEMIPLANAR_VU) ? IV_YUV_420SP_VU : IV_YUV_420P; return sColorFormat; } C2SoftAvcEnc::C2SoftAvcEnc( const char *name, c2_node_id_t id, const std::shared_ptr<IntfImpl> &intfImpl) : SimpleC2Component(std::make_shared<SimpleInterface<IntfImpl>>(name, id, intfImpl)), mIntf(intfImpl), mIvVideoColorFormat(GetIvColorFormat()), mIvVideoColorFormat(IV_YUV_420P), mAVCEncProfile(IV_PROFILE_BASE), mAVCEncLevel(41), mStarted(false), Loading Loading @@ -1034,7 +1026,8 @@ c2_status_t C2SoftAvcEnc::initEncoder() { // Assume worst case output buffer size to be equal to number of bytes in input mOutBufferSize = std::max(width * height * 3 / 2, kMinOutBufferSize); mIvVideoColorFormat = GetIvColorFormat(); // TODO mIvVideoColorFormat = IV_YUV_420P; ALOGD("Params width %d height %d level %d colorFormat %d bframes %d", width, height, mAVCEncLevel, mIvVideoColorFormat, mBframes); Loading Loading @@ -1332,6 +1325,7 @@ c2_status_t C2SoftAvcEnc::setEncodeArgs( mSize->width, input->height(), mSize->height); return C2_BAD_VALUE; } ALOGV("width = %d, height = %d", input->width(), input->height()); const C2PlanarLayout &layout = input->layout(); uint8_t *yPlane = const_cast<uint8_t *>(input->data()[C2PlanarLayout::PLANE_Y]); uint8_t *uPlane = const_cast<uint8_t *>(input->data()[C2PlanarLayout::PLANE_U]); Loading Loading @@ -1368,8 +1362,7 @@ c2_status_t C2SoftAvcEnc::setEncodeArgs( return C2_BAD_VALUE; } if (mIvVideoColorFormat == IV_YUV_420P && layout.planes[layout.PLANE_Y].colInc == 1 if (layout.planes[layout.PLANE_Y].colInc == 1 && layout.planes[layout.PLANE_U].colInc == 1 && layout.planes[layout.PLANE_V].colInc == 1 && uStride == vStride Loading @@ -1377,61 +1370,21 @@ c2_status_t C2SoftAvcEnc::setEncodeArgs( // I420 compatible - already set up above break; } if (mIvVideoColorFormat == IV_YUV_420SP_UV && layout.planes[layout.PLANE_Y].colInc == 1 && layout.planes[layout.PLANE_U].colInc == 2 && layout.planes[layout.PLANE_V].colInc == 2 && uStride == vStride && yStride == vStride && uPlane + 1 == vPlane) { // NV12 compatible - already set up above break; } if (mIvVideoColorFormat == IV_YUV_420SP_VU && layout.planes[layout.PLANE_Y].colInc == 1 && layout.planes[layout.PLANE_U].colInc == 2 && layout.planes[layout.PLANE_V].colInc == 2 && uStride == vStride && yStride == vStride && uPlane == vPlane + 1) { // NV21 compatible - already set up above break; } // copy to I420 yStride = width; uStride = vStride = yStride / 2; MemoryBlock conversionBuffer = mConversionBuffers.fetch(yPlaneSize * 3 / 2); mConversionBuffersInUse.emplace(conversionBuffer.data(), conversionBuffer); MediaImage2 img; switch (mIvVideoColorFormat) { case IV_YUV_420P: img = CreateYUV420PlanarMediaImage2(width, height, yStride, height); yPlane = conversionBuffer.data(); uPlane = yPlane + yPlaneSize; vPlane = uPlane + yPlaneSize / 4; break; case IV_YUV_420SP_VU: img = CreateYUV420SemiPlanarMediaImage2(width, height, yStride, height); img.mPlane[MediaImage2::U].mOffset++; img.mPlane[MediaImage2::V].mOffset--; yPlane = conversionBuffer.data(); vPlane = yPlane + yPlaneSize; uPlane = vPlane + 1; break; case IV_YUV_420SP_UV: default: img = CreateYUV420SemiPlanarMediaImage2(width, height, yStride, height); yPlane = conversionBuffer.data(); uPlane = yPlane + yPlaneSize; vPlane = uPlane + 1; break; } MediaImage2 img = CreateYUV420PlanarMediaImage2(width, height, yStride, height); status_t err = ImageCopy(conversionBuffer.data(), &img, *input); if (err != OK) { ALOGE("Buffer conversion failed: %d", err); return C2_BAD_VALUE; } yPlane = conversionBuffer.data(); uPlane = yPlane + yPlaneSize; vPlane = uPlane + yPlaneSize / 4; break; } Loading Loading @@ -1477,17 +1430,15 @@ c2_status_t C2SoftAvcEnc::setEncodeArgs( break; } case IV_YUV_420SP_VU: uPlane = vPlane; [[fallthrough]]; case IV_YUV_420SP_UV: case IV_YUV_420SP_VU: default: { ps_inp_raw_buf->apv_bufs[0] = yPlane; ps_inp_raw_buf->apv_bufs[1] = uPlane; ps_inp_raw_buf->au4_wd[0] = mSize->width; ps_inp_raw_buf->au4_wd[1] = mSize->width / 2; ps_inp_raw_buf->au4_wd[1] = mSize->width; ps_inp_raw_buf->au4_ht[0] = mSize->height; ps_inp_raw_buf->au4_ht[1] = mSize->height / 2; Loading Loading
media/codec2/components/avc/C2SoftAvcEnc.cpp +11 −60 Original line number Diff line number Diff line Loading @@ -454,19 +454,11 @@ static size_t GetCPUCoreCount() { } // namespace static IV_COLOR_FORMAT_T GetIvColorFormat() { static IV_COLOR_FORMAT_T sColorFormat = (GetYuv420FlexibleLayout() == FLEX_LAYOUT_SEMIPLANAR_UV) ? IV_YUV_420SP_UV : (GetYuv420FlexibleLayout() == FLEX_LAYOUT_SEMIPLANAR_VU) ? IV_YUV_420SP_VU : IV_YUV_420P; return sColorFormat; } C2SoftAvcEnc::C2SoftAvcEnc( const char *name, c2_node_id_t id, const std::shared_ptr<IntfImpl> &intfImpl) : SimpleC2Component(std::make_shared<SimpleInterface<IntfImpl>>(name, id, intfImpl)), mIntf(intfImpl), mIvVideoColorFormat(GetIvColorFormat()), mIvVideoColorFormat(IV_YUV_420P), mAVCEncProfile(IV_PROFILE_BASE), mAVCEncLevel(41), mStarted(false), Loading Loading @@ -1034,7 +1026,8 @@ c2_status_t C2SoftAvcEnc::initEncoder() { // Assume worst case output buffer size to be equal to number of bytes in input mOutBufferSize = std::max(width * height * 3 / 2, kMinOutBufferSize); mIvVideoColorFormat = GetIvColorFormat(); // TODO mIvVideoColorFormat = IV_YUV_420P; ALOGD("Params width %d height %d level %d colorFormat %d bframes %d", width, height, mAVCEncLevel, mIvVideoColorFormat, mBframes); Loading Loading @@ -1332,6 +1325,7 @@ c2_status_t C2SoftAvcEnc::setEncodeArgs( mSize->width, input->height(), mSize->height); return C2_BAD_VALUE; } ALOGV("width = %d, height = %d", input->width(), input->height()); const C2PlanarLayout &layout = input->layout(); uint8_t *yPlane = const_cast<uint8_t *>(input->data()[C2PlanarLayout::PLANE_Y]); uint8_t *uPlane = const_cast<uint8_t *>(input->data()[C2PlanarLayout::PLANE_U]); Loading Loading @@ -1368,8 +1362,7 @@ c2_status_t C2SoftAvcEnc::setEncodeArgs( return C2_BAD_VALUE; } if (mIvVideoColorFormat == IV_YUV_420P && layout.planes[layout.PLANE_Y].colInc == 1 if (layout.planes[layout.PLANE_Y].colInc == 1 && layout.planes[layout.PLANE_U].colInc == 1 && layout.planes[layout.PLANE_V].colInc == 1 && uStride == vStride Loading @@ -1377,61 +1370,21 @@ c2_status_t C2SoftAvcEnc::setEncodeArgs( // I420 compatible - already set up above break; } if (mIvVideoColorFormat == IV_YUV_420SP_UV && layout.planes[layout.PLANE_Y].colInc == 1 && layout.planes[layout.PLANE_U].colInc == 2 && layout.planes[layout.PLANE_V].colInc == 2 && uStride == vStride && yStride == vStride && uPlane + 1 == vPlane) { // NV12 compatible - already set up above break; } if (mIvVideoColorFormat == IV_YUV_420SP_VU && layout.planes[layout.PLANE_Y].colInc == 1 && layout.planes[layout.PLANE_U].colInc == 2 && layout.planes[layout.PLANE_V].colInc == 2 && uStride == vStride && yStride == vStride && uPlane == vPlane + 1) { // NV21 compatible - already set up above break; } // copy to I420 yStride = width; uStride = vStride = yStride / 2; MemoryBlock conversionBuffer = mConversionBuffers.fetch(yPlaneSize * 3 / 2); mConversionBuffersInUse.emplace(conversionBuffer.data(), conversionBuffer); MediaImage2 img; switch (mIvVideoColorFormat) { case IV_YUV_420P: img = CreateYUV420PlanarMediaImage2(width, height, yStride, height); yPlane = conversionBuffer.data(); uPlane = yPlane + yPlaneSize; vPlane = uPlane + yPlaneSize / 4; break; case IV_YUV_420SP_VU: img = CreateYUV420SemiPlanarMediaImage2(width, height, yStride, height); img.mPlane[MediaImage2::U].mOffset++; img.mPlane[MediaImage2::V].mOffset--; yPlane = conversionBuffer.data(); vPlane = yPlane + yPlaneSize; uPlane = vPlane + 1; break; case IV_YUV_420SP_UV: default: img = CreateYUV420SemiPlanarMediaImage2(width, height, yStride, height); yPlane = conversionBuffer.data(); uPlane = yPlane + yPlaneSize; vPlane = uPlane + 1; break; } MediaImage2 img = CreateYUV420PlanarMediaImage2(width, height, yStride, height); status_t err = ImageCopy(conversionBuffer.data(), &img, *input); if (err != OK) { ALOGE("Buffer conversion failed: %d", err); return C2_BAD_VALUE; } yPlane = conversionBuffer.data(); uPlane = yPlane + yPlaneSize; vPlane = uPlane + yPlaneSize / 4; break; } Loading Loading @@ -1477,17 +1430,15 @@ c2_status_t C2SoftAvcEnc::setEncodeArgs( break; } case IV_YUV_420SP_VU: uPlane = vPlane; [[fallthrough]]; case IV_YUV_420SP_UV: case IV_YUV_420SP_VU: default: { ps_inp_raw_buf->apv_bufs[0] = yPlane; ps_inp_raw_buf->apv_bufs[1] = uPlane; ps_inp_raw_buf->au4_wd[0] = mSize->width; ps_inp_raw_buf->au4_wd[1] = mSize->width / 2; ps_inp_raw_buf->au4_wd[1] = mSize->width; ps_inp_raw_buf->au4_ht[0] = mSize->height; ps_inp_raw_buf->au4_ht[1] = mSize->height / 2; Loading