[x265] [PATCH] modify api x265_get_ref_frame_list to provide POC lists for L0 and L1 references
santhoshini at multicorewareinc.com
santhoshini at multicorewareinc.com
Wed Dec 13 04:12:18 CET 2017
# HG changeset patch
# User Santhoshini Sekar <santhoshini at 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**);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: x265.patch
Type: text/x-patch
Size: 5720 bytes
Desc: not available
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20171213/47916d8b/attachment.bin>
More information about the x265-devel
mailing list