On Mon, Jun 13, 2016 at 11:45 AM, Divya Manivannan < [email protected]> wrote:
> On Mon, Jun 13, 2016 at 11:00 AM, Divya Manivannan < > [email protected]> wrote: > >> # HG changeset patch >> # User Divya Manivannan <[email protected]> >> # Date 1465554208 -19800 >> # Fri Jun 10 15:53:28 2016 +0530 >> # Node ID c898428779dfbfaaf9b1e7eb2d7676d86a2f54c0 >> # Parent 0af296185f7ae3e05493ecf164046ddfec085bb3 >> rc: Add multi-pass data to x265_rc_stats >> x265_rc_stats is changed into void pointer to avoid the build number >> change >> whenever new fields are added to it in future. >> >> diff -r 0af296185f7a -r c898428779df source/CMakeLists.txt >> --- a/source/CMakeLists.txt Tue Jun 07 09:20:11 2016 +0530 >> +++ b/source/CMakeLists.txt Fri Jun 10 15:53:28 2016 +0530 >> @@ -30,7 +30,7 @@ >> mark_as_advanced(FPROFILE_USE FPROFILE_GENERATE NATIVE_BUILD) >> >> # X265_BUILD must be incremented each time the public API is changed >> -set(X265_BUILD 85) >> +set(X265_BUILD 86) >> configure_file("${PROJECT_SOURCE_DIR}/x265.def.in" >> "${PROJECT_BINARY_DIR}/x265.def") >> configure_file("${PROJECT_SOURCE_DIR}/x265_config.h.in" >> diff -r 0af296185f7a -r c898428779df source/common/frame.cpp >> --- a/source/common/frame.cpp Tue Jun 07 09:20:11 2016 +0530 >> +++ b/source/common/frame.cpp Fri Jun 10 15:53:28 2016 +0530 >> @@ -42,12 +42,14 @@ >> m_prev = NULL; >> m_param = NULL; >> memset(&m_lowres, 0, sizeof(m_lowres)); >> + m_rcData = NULL; >> } >> >> bool Frame::create(x265_param *param, float* quantOffsets) >> { >> m_fencPic = new PicYuv; >> m_param = param; >> + CHECKED_MALLOC_ZERO(m_rcData, x265_rc_stats, 1); >> >> if (m_fencPic->create(param->sourceWidth, param->sourceHeight, >> param->internalCsp) && >> m_lowres.create(m_fencPic, param->bframes, !!param->rc.aqMode)) >> @@ -64,6 +66,8 @@ >> return true; >> } >> return false; >> +fail: >> + return false; >> } >> >> bool Frame::allocEncodeData(x265_param *param, const SPS& sps) >> @@ -140,4 +144,5 @@ >> } >> >> m_lowres.destroy(); >> + X265_FREE(m_rcData); >> } >> diff -r 0af296185f7a -r c898428779df source/common/frame.h >> --- a/source/common/frame.h Tue Jun 07 09:20:11 2016 +0530 >> +++ b/source/common/frame.h Fri Jun 10 15:53:28 2016 +0530 >> @@ -72,6 +72,7 @@ >> Frame* m_prev; >> x265_param* m_param; // Points to the latest >> param set for the frame. >> x265_analysis_data m_analysisData; >> + x265_rc_stats* m_rcData; >> Frame(); >> >> bool create(x265_param *param, float* quantOffsets); >> diff -r 0af296185f7a -r c898428779df source/encoder/encoder.cpp >> --- a/source/encoder/encoder.cpp Tue Jun 07 09:20:11 2016 +0530 >> +++ b/source/encoder/encoder.cpp Fri Jun 10 15:53:28 2016 +0530 >> @@ -779,17 +779,22 @@ >> >> if (pic_out && m_param->rc.bStatWrite) >> { >> - pic_out->rcData.qpaRc = outFrame->m_encData->m_avgQpRc; >> - pic_out->rcData.qRceq = curEncoder->m_rce.qRceq; >> - pic_out->rcData.qpNoVbv = curEncoder->m_rce.qpNoVbv; >> - pic_out->rcData.coeffBits = >> outFrame->m_encData->m_frameStats.coeffBits; >> - pic_out->rcData.miscBits = >> outFrame->m_encData->m_frameStats.miscBits; >> - pic_out->rcData.mvBits = >> outFrame->m_encData->m_frameStats.mvBits; >> - pic_out->rcData.newQScale = >> x265_qp2qScale(outFrame->m_encData->m_avgQpRc); >> - pic_out->rcData.poc = curEncoder->m_rce.poc; >> - pic_out->rcData.encodeOrder = >> curEncoder->m_rce.encodeOrder; >> - pic_out->rcData.sliceType = curEncoder->m_rce.sliceType; >> - pic_out->rcData.keptAsRef = curEncoder->m_rce.sliceType >> == B_SLICE && !IS_REFERENCED(outFrame) ? 0 : 1; >> + pic_out->rcData = outFrame->m_rcData; >> + outFrame->m_rcData->qpaRc = >> outFrame->m_encData->m_avgQpRc; >> + outFrame->m_rcData->qRceq = curEncoder->m_rce.qRceq; >> + outFrame->m_rcData->qpNoVbv = curEncoder->m_rce.qpNoVbv; >> + outFrame->m_rcData->coeffBits = >> outFrame->m_encData->m_frameStats.coeffBits; >> + outFrame->m_rcData->miscBits = >> outFrame->m_encData->m_frameStats.miscBits; >> + outFrame->m_rcData->mvBits = >> outFrame->m_encData->m_frameStats.mvBits; >> + outFrame->m_rcData->qScale = >> outFrame->m_rcData->newQScale = >> x265_qp2qScale(outFrame->m_encData->m_avgQpRc); >> + outFrame->m_rcData->poc = curEncoder->m_rce.poc; >> + outFrame->m_rcData->encodeOrder = >> curEncoder->m_rce.encodeOrder; >> + outFrame->m_rcData->sliceType = >> curEncoder->m_rce.sliceType; >> + outFrame->m_rcData->keptAsRef = >> curEncoder->m_rce.sliceType == B_SLICE && !IS_REFERENCED(outFrame) ? 0 : 1; >> + outFrame->m_rcData->qpAq = >> outFrame->m_encData->m_avgQpAq; >> + outFrame->m_rcData->iCuCount = >> outFrame->m_encData->m_frameStats.percent8x8Intra * m_rateControl->m_ncu; >> + outFrame->m_rcData->pCuCount = >> outFrame->m_encData->m_frameStats.percent8x8Inter * m_rateControl->m_ncu; >> + outFrame->m_rcData->skipCuCount = >> outFrame->m_encData->m_frameStats.percent8x8Skip * m_rateControl->m_ncu; >> } >> > > This still needs to be copied into x265_picture..... > > It is copied into x265_picture in the above code: pic_out->rcData = > outFrame->m_rcData; > pic_out is memory "owned" by the application. You cannot return a pointer to a block of encoder's internal memory (within Frame). If statswrite (analysis save or pass 1) is enabled, x265_picture_alloc allocates data for rcdata, copies from Frame* and returns in pic_out (also free it in picture_free). You may need to modify the CLI to use x265_picture_alloc and free. > >> /* Allow this frame to be recycled if no frame encoders are >> using it for reference */ >> diff -r 0af296185f7a -r c898428779df source/x265.h >> --- a/source/x265.h Tue Jun 07 09:20:11 2016 +0530 >> +++ b/source/x265.h Fri Jun 10 15:53:28 2016 +0530 >> @@ -153,17 +153,22 @@ >> /* Ratecontrol statistics */ >> typedef struct x265_rc_stats >> { >> - double qpaRc; >> - double qRceq; >> - double qpNoVbv; >> - double newQScale; >> - int mvBits; >> - int miscBits; >> - int coeffBits; >> - int poc; >> - int encodeOrder; >> - int sliceType; >> - int keptAsRef; >> + double qpaRc; >> + double qpAq; >> + double qRceq; >> + double qpNoVbv; >> + double newQScale; >> + double iCuCount; >> + double pCuCount; >> + double skipCuCount; >> + double qScale; >> + int mvBits; >> + int miscBits; >> + int coeffBits; >> + int poc; >> + int encodeOrder; >> + int sliceType; >> + int keptAsRef; >> } x265_rc_stats; >> >> > This definition can now be moved inside into frame.h. > > I will move this definition and send the patch again. > > >> /* Used to pass pictures into the encoder, and to get picture data back >> out of >> @@ -240,7 +245,7 @@ >> /* Ratecontrol statistics for collecting the ratecontrol information. >> * It is not used for collecting the last pass ratecontrol data in >> * multi pass ratecontrol mode. */ >> - x265_rc_stats rcData; >> + void* rcData; >> >> uint64_t framesize; >> >> _______________________________________________ >> x265-devel mailing list >> [email protected] >> https://mailman.videolan.org/listinfo/x265-devel >> > > > > -- > Deepthi Nandakumar > Engineering Manager, x265 > Multicoreware, Inc > > _______________________________________________ > x265-devel mailing list > [email protected] > https://mailman.videolan.org/listinfo/x265-devel > > > > _______________________________________________ > x265-devel mailing list > [email protected] > https://mailman.videolan.org/listinfo/x265-devel > > -- Deepthi Nandakumar Engineering Manager, x265 Multicoreware, Inc
_______________________________________________ x265-devel mailing list [email protected] https://mailman.videolan.org/listinfo/x265-devel
