# HG changeset patch # User Santhoshini Sekar <santhosh...@multicorewareinc.com> # Date 1513082044 -19800 # Tue Dec 12 18:04:04 2017 +0530 # Node ID e71e59aba01927aecd35115aba4a7180817c6da3 # Parent 6b079854e56e5ff3eaa11eab658989e95e2d9152 modify api x265_get_ref_frame_list to provide POC lists for L0 and L1 references
diff --git a/doc/reST/api.rst b/doc/reST/api.rst --- a/doc/reST/api.rst +++ b/doc/reST/api.rst @@ -206,7 +206,7 @@ /* x265_get_ref_frame_list: * returns negative on error, 0 when access unit were output. * This API must be called after(poc >= lookaheadDepth + bframes + 2) condition check */ - int x265_get_ref_frame_list(x265_encoder *encoder, x265_picyuv**, x265_picyuv**, int, int); + int x265_get_ref_frame_list(x265_encoder *encoder, x265_picyuv**, x265_picyuv**, int, int, int*, int*); **x265_encoder_ctu_info** may be used to provide additional CTU-specific information to the encoder:: diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -29,7 +29,7 @@ option(STATIC_LINK_CRT "Statically link C runtime for release builds" OFF) mark_as_advanced(FPROFILE_USE FPROFILE_GENERATE NATIVE_BUILD) # X265_BUILD must be incremented each time the public API is changed -set(X265_BUILD 147) +set(X265_BUILD 148) configure_file("${PROJECT_SOURCE_DIR}/x265.def.in" "${PROJECT_BINARY_DIR}/x265.def") configure_file("${PROJECT_SOURCE_DIR}/x265_config.h.in" diff --git a/source/encoder/api.cpp b/source/encoder/api.cpp --- a/source/encoder/api.cpp +++ b/source/encoder/api.cpp @@ -356,13 +356,13 @@ return -1; } -int x265_get_ref_frame_list(x265_encoder *enc, x265_picyuv** l0, x265_picyuv** l1, int sliceType, int poc) +int x265_get_ref_frame_list(x265_encoder *enc, x265_picyuv** l0, x265_picyuv** l1, int sliceType, int poc, int* pocL0, int* pocL1) { if (!enc) return -1; Encoder *encoder = static_cast<Encoder*>(enc); - return encoder->getRefFrameList((PicYuv**)l0, (PicYuv**)l1, sliceType, poc); + return encoder->getRefFrameList((PicYuv**)l0, (PicYuv**)l1, sliceType, poc, pocL0, pocL1); } int x265_set_analysis_data(x265_encoder *enc, x265_analysis_data *analysis_data, int poc, uint32_t cuBytes) diff --git a/source/encoder/encoder.cpp b/source/encoder/encoder.cpp --- a/source/encoder/encoder.cpp +++ b/source/encoder/encoder.cpp @@ -448,7 +448,7 @@ return 0; } -int Encoder::getRefFrameList(PicYuv** l0, PicYuv** l1, int sliceType, int poc) +int Encoder::getRefFrameList(PicYuv** l0, PicYuv** l1, int sliceType, int poc, int* pocL0, int* pocL1) { if (!(IS_X265_TYPE_I(sliceType))) { @@ -460,6 +460,7 @@ if (framePtr->m_encData->m_slice->m_refFrameList[0][j] && framePtr->m_encData->m_slice->m_refFrameList[0][j]->m_reconPic != NULL) { int l0POC = framePtr->m_encData->m_slice->m_refFrameList[0][j]->m_poc; + pocL0[j] = l0POC; Frame* l0Fp = m_dpb->m_picList.getPOC(l0POC); while (l0Fp->m_reconRowFlag[l0Fp->m_numRows - 1].get() == 0) l0Fp->m_reconRowFlag[l0Fp->m_numRows - 1].waitForChange(0); /* If recon is not ready, current frame encoder has to wait. */ @@ -471,6 +472,7 @@ if (framePtr->m_encData->m_slice->m_refFrameList[1][j] && framePtr->m_encData->m_slice->m_refFrameList[1][j]->m_reconPic != NULL) { int l1POC = framePtr->m_encData->m_slice->m_refFrameList[1][j]->m_poc; + pocL1[j] = l1POC; Frame* l1Fp = m_dpb->m_picList.getPOC(l1POC); while (l1Fp->m_reconRowFlag[l1Fp->m_numRows - 1].get() == 0) l1Fp->m_reconRowFlag[l1Fp->m_numRows - 1].waitForChange(0); /* If recon is not ready, current frame encoder has to wait. */ diff --git a/source/encoder/encoder.h b/source/encoder/encoder.h --- a/source/encoder/encoder.h +++ b/source/encoder/encoder.h @@ -208,7 +208,7 @@ int copySlicetypePocAndSceneCut(int *slicetype, int *poc, int *sceneCut); - int getRefFrameList(PicYuv** l0, PicYuv** l1, int sliceType, int poc); + int getRefFrameList(PicYuv** l0, PicYuv** l1, int sliceType, int poc, int* pocL0, int* pocL1); int setAnalysisDataAfterZScan(x265_analysis_data *analysis_data, Frame* curFrame); diff --git a/source/x265.h b/source/x265.h --- a/source/x265.h +++ b/source/x265.h @@ -1746,7 +1746,7 @@ /* x265_get_ref_frame_list: * returns negative on error, 0 when access unit were output. * This API must be called after(poc >= lookaheadDepth + bframes + 2) condition check */ -int x265_get_ref_frame_list(x265_encoder *encoder, x265_picyuv**, x265_picyuv**, int, int); +int x265_get_ref_frame_list(x265_encoder *encoder, x265_picyuv**, x265_picyuv**, int, int, int*, int*); /* x265_set_analysis_data: * set the analysis data. The incoming analysis_data structure is assumed to be AVC-sized blocks. @@ -1823,7 +1823,7 @@ int (*encoder_intra_refresh)(x265_encoder*); int (*encoder_ctu_info)(x265_encoder*, int, x265_ctu_info_t**); int (*get_slicetype_poc_and_scenecut)(x265_encoder*, int*, int*, int*); - int (*get_ref_frame_list)(x265_encoder*, x265_picyuv**, x265_picyuv**, int, int); + int (*get_ref_frame_list)(x265_encoder*, x265_picyuv**, x265_picyuv**, int, int, int*, int*); FILE* (*csvlog_open)(const x265_param*); void (*csvlog_frame)(const x265_param*, const x265_picture*); void (*csvlog_encode)(x265_encoder*, const x265_stats*, int, char**);
# HG changeset patch # User Santhoshini Sekar <santhosh...@multicorewareinc.com> # Date 1513082044 -19800 # Tue Dec 12 18:04:04 2017 +0530 # Node ID e71e59aba01927aecd35115aba4a7180817c6da3 # Parent 6b079854e56e5ff3eaa11eab658989e95e2d9152 modify api x265_get_ref_frame_list to provide POC lists for L0 and L1 references diff --git a/doc/reST/api.rst b/doc/reST/api.rst --- a/doc/reST/api.rst +++ b/doc/reST/api.rst @@ -206,7 +206,7 @@ /* x265_get_ref_frame_list: * returns negative on error, 0 when access unit were output. * This API must be called after(poc >= lookaheadDepth + bframes + 2) condition check */ - int x265_get_ref_frame_list(x265_encoder *encoder, x265_picyuv**, x265_picyuv**, int, int); + int x265_get_ref_frame_list(x265_encoder *encoder, x265_picyuv**, x265_picyuv**, int, int, int*, int*); **x265_encoder_ctu_info** may be used to provide additional CTU-specific information to the encoder:: diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -29,7 +29,7 @@ option(STATIC_LINK_CRT "Statically link C runtime for release builds" OFF) mark_as_advanced(FPROFILE_USE FPROFILE_GENERATE NATIVE_BUILD) # X265_BUILD must be incremented each time the public API is changed -set(X265_BUILD 147) +set(X265_BUILD 148) configure_file("${PROJECT_SOURCE_DIR}/x265.def.in" "${PROJECT_BINARY_DIR}/x265.def") configure_file("${PROJECT_SOURCE_DIR}/x265_config.h.in" diff --git a/source/encoder/api.cpp b/source/encoder/api.cpp --- a/source/encoder/api.cpp +++ b/source/encoder/api.cpp @@ -356,13 +356,13 @@ return -1; } -int x265_get_ref_frame_list(x265_encoder *enc, x265_picyuv** l0, x265_picyuv** l1, int sliceType, int poc) +int x265_get_ref_frame_list(x265_encoder *enc, x265_picyuv** l0, x265_picyuv** l1, int sliceType, int poc, int* pocL0, int* pocL1) { if (!enc) return -1; Encoder *encoder = static_cast<Encoder*>(enc); - return encoder->getRefFrameList((PicYuv**)l0, (PicYuv**)l1, sliceType, poc); + return encoder->getRefFrameList((PicYuv**)l0, (PicYuv**)l1, sliceType, poc, pocL0, pocL1); } int x265_set_analysis_data(x265_encoder *enc, x265_analysis_data *analysis_data, int poc, uint32_t cuBytes) diff --git a/source/encoder/encoder.cpp b/source/encoder/encoder.cpp --- a/source/encoder/encoder.cpp +++ b/source/encoder/encoder.cpp @@ -448,7 +448,7 @@ return 0; } -int Encoder::getRefFrameList(PicYuv** l0, PicYuv** l1, int sliceType, int poc) +int Encoder::getRefFrameList(PicYuv** l0, PicYuv** l1, int sliceType, int poc, int* pocL0, int* pocL1) { if (!(IS_X265_TYPE_I(sliceType))) { @@ -460,6 +460,7 @@ if (framePtr->m_encData->m_slice->m_refFrameList[0][j] && framePtr->m_encData->m_slice->m_refFrameList[0][j]->m_reconPic != NULL) { int l0POC = framePtr->m_encData->m_slice->m_refFrameList[0][j]->m_poc; + pocL0[j] = l0POC; Frame* l0Fp = m_dpb->m_picList.getPOC(l0POC); while (l0Fp->m_reconRowFlag[l0Fp->m_numRows - 1].get() == 0) l0Fp->m_reconRowFlag[l0Fp->m_numRows - 1].waitForChange(0); /* If recon is not ready, current frame encoder has to wait. */ @@ -471,6 +472,7 @@ if (framePtr->m_encData->m_slice->m_refFrameList[1][j] && framePtr->m_encData->m_slice->m_refFrameList[1][j]->m_reconPic != NULL) { int l1POC = framePtr->m_encData->m_slice->m_refFrameList[1][j]->m_poc; + pocL1[j] = l1POC; Frame* l1Fp = m_dpb->m_picList.getPOC(l1POC); while (l1Fp->m_reconRowFlag[l1Fp->m_numRows - 1].get() == 0) l1Fp->m_reconRowFlag[l1Fp->m_numRows - 1].waitForChange(0); /* If recon is not ready, current frame encoder has to wait. */ diff --git a/source/encoder/encoder.h b/source/encoder/encoder.h --- a/source/encoder/encoder.h +++ b/source/encoder/encoder.h @@ -208,7 +208,7 @@ int copySlicetypePocAndSceneCut(int *slicetype, int *poc, int *sceneCut); - int getRefFrameList(PicYuv** l0, PicYuv** l1, int sliceType, int poc); + int getRefFrameList(PicYuv** l0, PicYuv** l1, int sliceType, int poc, int* pocL0, int* pocL1); int setAnalysisDataAfterZScan(x265_analysis_data *analysis_data, Frame* curFrame); diff --git a/source/x265.h b/source/x265.h --- a/source/x265.h +++ b/source/x265.h @@ -1746,7 +1746,7 @@ /* x265_get_ref_frame_list: * returns negative on error, 0 when access unit were output. * This API must be called after(poc >= lookaheadDepth + bframes + 2) condition check */ -int x265_get_ref_frame_list(x265_encoder *encoder, x265_picyuv**, x265_picyuv**, int, int); +int x265_get_ref_frame_list(x265_encoder *encoder, x265_picyuv**, x265_picyuv**, int, int, int*, int*); /* x265_set_analysis_data: * set the analysis data. The incoming analysis_data structure is assumed to be AVC-sized blocks. @@ -1823,7 +1823,7 @@ int (*encoder_intra_refresh)(x265_encoder*); int (*encoder_ctu_info)(x265_encoder*, int, x265_ctu_info_t**); int (*get_slicetype_poc_and_scenecut)(x265_encoder*, int*, int*, int*); - int (*get_ref_frame_list)(x265_encoder*, x265_picyuv**, x265_picyuv**, int, int); + int (*get_ref_frame_list)(x265_encoder*, x265_picyuv**, x265_picyuv**, int, int, int*, int*); FILE* (*csvlog_open)(const x265_param*); void (*csvlog_frame)(const x265_param*, const x265_picture*); void (*csvlog_encode)(x265_encoder*, const x265_stats*, int, char**);
_______________________________________________ x265-devel mailing list x265-devel@videolan.org https://mailman.videolan.org/listinfo/x265-devel