Loading media/codec2/components/hevc/C2SoftHevcEnc.cpp +94 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ #include <media/stagefright/foundation/AUtils.h> #include <C2Debug.h> #include <Codec2Mapper.h> #include <C2PlatformSupport.h> #include <Codec2BufferUtils.h> #include <SimpleC2Interface.h> Loading Loading @@ -208,6 +209,42 @@ class C2SoftHevcEnc::IntfImpl : public SimpleInterface<void>::BaseParams { .withSetter( Setter<decltype(*mSyncFramePeriod)>::StrictValueWithNoDeps) .build()); addParameter( DefineParam(mColorAspects, C2_PARAMKEY_COLOR_ASPECTS) .withDefault(new C2StreamColorAspectsInfo::input( 0u, C2Color::RANGE_UNSPECIFIED, C2Color::PRIMARIES_UNSPECIFIED, C2Color::TRANSFER_UNSPECIFIED, C2Color::MATRIX_UNSPECIFIED)) .withFields({ C2F(mColorAspects, range).inRange( C2Color::RANGE_UNSPECIFIED, C2Color::RANGE_OTHER), C2F(mColorAspects, primaries).inRange( C2Color::PRIMARIES_UNSPECIFIED, C2Color::PRIMARIES_OTHER), C2F(mColorAspects, transfer).inRange( C2Color::TRANSFER_UNSPECIFIED, C2Color::TRANSFER_OTHER), C2F(mColorAspects, matrix).inRange( C2Color::MATRIX_UNSPECIFIED, C2Color::MATRIX_OTHER) }) .withSetter(ColorAspectsSetter) .build()); addParameter( DefineParam(mCodedColorAspects, C2_PARAMKEY_VUI_COLOR_ASPECTS) .withDefault(new C2StreamColorAspectsInfo::output( 0u, C2Color::RANGE_LIMITED, C2Color::PRIMARIES_UNSPECIFIED, C2Color::TRANSFER_UNSPECIFIED, C2Color::MATRIX_UNSPECIFIED)) .withFields({ C2F(mCodedColorAspects, range).inRange( C2Color::RANGE_UNSPECIFIED, C2Color::RANGE_OTHER), C2F(mCodedColorAspects, primaries).inRange( C2Color::PRIMARIES_UNSPECIFIED, C2Color::PRIMARIES_OTHER), C2F(mCodedColorAspects, transfer).inRange( C2Color::TRANSFER_UNSPECIFIED, C2Color::TRANSFER_OTHER), C2F(mCodedColorAspects, matrix).inRange( C2Color::MATRIX_UNSPECIFIED, C2Color::MATRIX_OTHER) }) .withSetter(CodedColorAspectsSetter, mColorAspects) .build()); } static C2R InputDelaySetter( Loading Loading @@ -402,6 +439,34 @@ class C2SoftHevcEnc::IntfImpl : public SimpleInterface<void>::BaseParams { std::shared_ptr<C2StreamGopTuning::output> getGop_l() const { return mGop; } static C2R ColorAspectsSetter(bool mayBlock, C2P<C2StreamColorAspectsInfo::input> &me) { (void)mayBlock; if (me.v.range > C2Color::RANGE_OTHER) { me.set().range = C2Color::RANGE_OTHER; } if (me.v.primaries > C2Color::PRIMARIES_OTHER) { me.set().primaries = C2Color::PRIMARIES_OTHER; } if (me.v.transfer > C2Color::TRANSFER_OTHER) { me.set().transfer = C2Color::TRANSFER_OTHER; } if (me.v.matrix > C2Color::MATRIX_OTHER) { me.set().matrix = C2Color::MATRIX_OTHER; } return C2R::Ok(); } static C2R CodedColorAspectsSetter(bool mayBlock, C2P<C2StreamColorAspectsInfo::output> &me, const C2P<C2StreamColorAspectsInfo::input> &coded) { (void)mayBlock; me.set().range = coded.v.range; me.set().primaries = coded.v.primaries; me.set().transfer = coded.v.transfer; me.set().matrix = coded.v.matrix; return C2R::Ok(); } std::shared_ptr<C2StreamColorAspectsInfo::output> getCodedColorAspects_l() { return mCodedColorAspects; } private: std::shared_ptr<C2StreamUsageTuning::input> mUsage; Loading @@ -415,6 +480,8 @@ class C2SoftHevcEnc::IntfImpl : public SimpleInterface<void>::BaseParams { std::shared_ptr<C2StreamProfileLevelInfo::output> mProfileLevel; std::shared_ptr<C2StreamSyncFrameIntervalTuning::output> mSyncFramePeriod; std::shared_ptr<C2StreamGopTuning::output> mGop; std::shared_ptr<C2StreamColorAspectsInfo::input> mColorAspects; std::shared_ptr<C2StreamColorAspectsInfo::output> mCodedColorAspects; }; static size_t GetCPUCoreCount() { Loading Loading @@ -533,6 +600,32 @@ c2_status_t C2SoftHevcEnc::initEncParams() { mBframes = maxBframes; } } ColorAspects sfAspects; if (!C2Mapper::map(mColorAspects->primaries, &sfAspects.mPrimaries)) { sfAspects.mPrimaries = android::ColorAspects::PrimariesUnspecified; } if (!C2Mapper::map(mColorAspects->range, &sfAspects.mRange)) { sfAspects.mRange = android::ColorAspects::RangeUnspecified; } if (!C2Mapper::map(mColorAspects->matrix, &sfAspects.mMatrixCoeffs)) { sfAspects.mMatrixCoeffs = android::ColorAspects::MatrixUnspecified; } if (!C2Mapper::map(mColorAspects->transfer, &sfAspects.mTransfer)) { sfAspects.mTransfer = android::ColorAspects::TransferUnspecified; } int32_t primaries, transfer, matrixCoeffs; bool range; ColorUtils::convertCodecColorAspectsToIsoAspects(sfAspects, &primaries, &transfer, &matrixCoeffs, &range); mEncParams.s_out_strm_prms.i4_vui_enable = 1; mEncParams.s_vui_sei_prms.u1_colour_description_present_flag = 1; mEncParams.s_vui_sei_prms.u1_colour_primaries = primaries; mEncParams.s_vui_sei_prms.u1_transfer_characteristics = transfer; mEncParams.s_vui_sei_prms.u1_matrix_coefficients = matrixCoeffs; mEncParams.s_vui_sei_prms.u1_video_full_range_flag = range; // update configuration mEncParams.s_src_prms.i4_width = mSize->width; mEncParams.s_src_prms.i4_height = mSize->height; Loading Loading @@ -629,6 +722,7 @@ c2_status_t C2SoftHevcEnc::initEncoder() { mQuality = mIntf->getQuality_l(); mGop = mIntf->getGop_l(); mRequestSync = mIntf->getRequestSync_l(); mColorAspects = mIntf->getCodedColorAspects_l(); } c2_status_t status = initEncParams(); Loading media/codec2/components/hevc/C2SoftHevcEnc.h +1 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,7 @@ struct C2SoftHevcEnc : public SimpleC2Component { std::shared_ptr<C2StreamQualityTuning::output> mQuality; std::shared_ptr<C2StreamGopTuning::output> mGop; std::shared_ptr<C2StreamRequestSyncFrameTuning::output> mRequestSync; std::shared_ptr<C2StreamColorAspectsInfo::output> mColorAspects; #ifdef FILE_DUMP_ENABLE char mInFile[200]; char mOutFile[200]; Loading Loading
media/codec2/components/hevc/C2SoftHevcEnc.cpp +94 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ #include <media/stagefright/foundation/AUtils.h> #include <C2Debug.h> #include <Codec2Mapper.h> #include <C2PlatformSupport.h> #include <Codec2BufferUtils.h> #include <SimpleC2Interface.h> Loading Loading @@ -208,6 +209,42 @@ class C2SoftHevcEnc::IntfImpl : public SimpleInterface<void>::BaseParams { .withSetter( Setter<decltype(*mSyncFramePeriod)>::StrictValueWithNoDeps) .build()); addParameter( DefineParam(mColorAspects, C2_PARAMKEY_COLOR_ASPECTS) .withDefault(new C2StreamColorAspectsInfo::input( 0u, C2Color::RANGE_UNSPECIFIED, C2Color::PRIMARIES_UNSPECIFIED, C2Color::TRANSFER_UNSPECIFIED, C2Color::MATRIX_UNSPECIFIED)) .withFields({ C2F(mColorAspects, range).inRange( C2Color::RANGE_UNSPECIFIED, C2Color::RANGE_OTHER), C2F(mColorAspects, primaries).inRange( C2Color::PRIMARIES_UNSPECIFIED, C2Color::PRIMARIES_OTHER), C2F(mColorAspects, transfer).inRange( C2Color::TRANSFER_UNSPECIFIED, C2Color::TRANSFER_OTHER), C2F(mColorAspects, matrix).inRange( C2Color::MATRIX_UNSPECIFIED, C2Color::MATRIX_OTHER) }) .withSetter(ColorAspectsSetter) .build()); addParameter( DefineParam(mCodedColorAspects, C2_PARAMKEY_VUI_COLOR_ASPECTS) .withDefault(new C2StreamColorAspectsInfo::output( 0u, C2Color::RANGE_LIMITED, C2Color::PRIMARIES_UNSPECIFIED, C2Color::TRANSFER_UNSPECIFIED, C2Color::MATRIX_UNSPECIFIED)) .withFields({ C2F(mCodedColorAspects, range).inRange( C2Color::RANGE_UNSPECIFIED, C2Color::RANGE_OTHER), C2F(mCodedColorAspects, primaries).inRange( C2Color::PRIMARIES_UNSPECIFIED, C2Color::PRIMARIES_OTHER), C2F(mCodedColorAspects, transfer).inRange( C2Color::TRANSFER_UNSPECIFIED, C2Color::TRANSFER_OTHER), C2F(mCodedColorAspects, matrix).inRange( C2Color::MATRIX_UNSPECIFIED, C2Color::MATRIX_OTHER) }) .withSetter(CodedColorAspectsSetter, mColorAspects) .build()); } static C2R InputDelaySetter( Loading Loading @@ -402,6 +439,34 @@ class C2SoftHevcEnc::IntfImpl : public SimpleInterface<void>::BaseParams { std::shared_ptr<C2StreamGopTuning::output> getGop_l() const { return mGop; } static C2R ColorAspectsSetter(bool mayBlock, C2P<C2StreamColorAspectsInfo::input> &me) { (void)mayBlock; if (me.v.range > C2Color::RANGE_OTHER) { me.set().range = C2Color::RANGE_OTHER; } if (me.v.primaries > C2Color::PRIMARIES_OTHER) { me.set().primaries = C2Color::PRIMARIES_OTHER; } if (me.v.transfer > C2Color::TRANSFER_OTHER) { me.set().transfer = C2Color::TRANSFER_OTHER; } if (me.v.matrix > C2Color::MATRIX_OTHER) { me.set().matrix = C2Color::MATRIX_OTHER; } return C2R::Ok(); } static C2R CodedColorAspectsSetter(bool mayBlock, C2P<C2StreamColorAspectsInfo::output> &me, const C2P<C2StreamColorAspectsInfo::input> &coded) { (void)mayBlock; me.set().range = coded.v.range; me.set().primaries = coded.v.primaries; me.set().transfer = coded.v.transfer; me.set().matrix = coded.v.matrix; return C2R::Ok(); } std::shared_ptr<C2StreamColorAspectsInfo::output> getCodedColorAspects_l() { return mCodedColorAspects; } private: std::shared_ptr<C2StreamUsageTuning::input> mUsage; Loading @@ -415,6 +480,8 @@ class C2SoftHevcEnc::IntfImpl : public SimpleInterface<void>::BaseParams { std::shared_ptr<C2StreamProfileLevelInfo::output> mProfileLevel; std::shared_ptr<C2StreamSyncFrameIntervalTuning::output> mSyncFramePeriod; std::shared_ptr<C2StreamGopTuning::output> mGop; std::shared_ptr<C2StreamColorAspectsInfo::input> mColorAspects; std::shared_ptr<C2StreamColorAspectsInfo::output> mCodedColorAspects; }; static size_t GetCPUCoreCount() { Loading Loading @@ -533,6 +600,32 @@ c2_status_t C2SoftHevcEnc::initEncParams() { mBframes = maxBframes; } } ColorAspects sfAspects; if (!C2Mapper::map(mColorAspects->primaries, &sfAspects.mPrimaries)) { sfAspects.mPrimaries = android::ColorAspects::PrimariesUnspecified; } if (!C2Mapper::map(mColorAspects->range, &sfAspects.mRange)) { sfAspects.mRange = android::ColorAspects::RangeUnspecified; } if (!C2Mapper::map(mColorAspects->matrix, &sfAspects.mMatrixCoeffs)) { sfAspects.mMatrixCoeffs = android::ColorAspects::MatrixUnspecified; } if (!C2Mapper::map(mColorAspects->transfer, &sfAspects.mTransfer)) { sfAspects.mTransfer = android::ColorAspects::TransferUnspecified; } int32_t primaries, transfer, matrixCoeffs; bool range; ColorUtils::convertCodecColorAspectsToIsoAspects(sfAspects, &primaries, &transfer, &matrixCoeffs, &range); mEncParams.s_out_strm_prms.i4_vui_enable = 1; mEncParams.s_vui_sei_prms.u1_colour_description_present_flag = 1; mEncParams.s_vui_sei_prms.u1_colour_primaries = primaries; mEncParams.s_vui_sei_prms.u1_transfer_characteristics = transfer; mEncParams.s_vui_sei_prms.u1_matrix_coefficients = matrixCoeffs; mEncParams.s_vui_sei_prms.u1_video_full_range_flag = range; // update configuration mEncParams.s_src_prms.i4_width = mSize->width; mEncParams.s_src_prms.i4_height = mSize->height; Loading Loading @@ -629,6 +722,7 @@ c2_status_t C2SoftHevcEnc::initEncoder() { mQuality = mIntf->getQuality_l(); mGop = mIntf->getGop_l(); mRequestSync = mIntf->getRequestSync_l(); mColorAspects = mIntf->getCodedColorAspects_l(); } c2_status_t status = initEncParams(); Loading
media/codec2/components/hevc/C2SoftHevcEnc.h +1 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,7 @@ struct C2SoftHevcEnc : public SimpleC2Component { std::shared_ptr<C2StreamQualityTuning::output> mQuality; std::shared_ptr<C2StreamGopTuning::output> mGop; std::shared_ptr<C2StreamRequestSyncFrameTuning::output> mRequestSync; std::shared_ptr<C2StreamColorAspectsInfo::output> mColorAspects; #ifdef FILE_DUMP_ENABLE char mInFile[200]; char mOutFile[200]; Loading