# HG changeset patch
# User Aruna Matheswaran <[email protected]>
# Date 1532078824 -19800
# Fri Jul 20 14:57:04 2018 +0530
# Node ID 29345837cd2057dd2cfca837c1a36cab94e41bc4
# Parent 79c76e42cb28876d3fa3141f5f1f1a6b3973af0a
Enhance VBV lookahead of RADL pictures
This patch does the following,
1) Modifies the slice type enforcement flow to enhance VBV lookahead of RADL
frames.
2) Update test CLI.
diff -r 79c76e42cb28 -r 29345837cd20 source/encoder/slicetype.cpp
--- a/source/encoder/slicetype.cpp Wed Jul 25 14:40:47 2018 +0530
+++ b/source/encoder/slicetype.cpp Fri Jul 20 14:57:04 2018 +0530
@@ -1147,14 +1147,6 @@
bframes--;
}
}
- if (m_param->radl && !m_param->bOpenGOP && list[bframes + 1])
- {
- if ((frm.frameNum - m_lastKeyframe) > (m_param->keyframeMax -
m_param->radl - 1) && (frm.frameNum - m_lastKeyframe) < m_param->keyframeMax)
- frm.sliceType = X265_TYPE_B;
- if ((frm.frameNum - m_lastKeyframe) == (m_param->keyframeMax -
m_param->radl - 1))
- frm.sliceType = X265_TYPE_P;
- }
-
if (bframes == m_param->bframes || !list[bframes + 1])
{
if (IS_X265_TYPE_B(frm.sliceType))
@@ -1538,6 +1530,7 @@
int numBFrames = 0;
int numAnalyzed = numFrames;
bool isScenecut = scenecut(frames, 0, 1, true, origNumFrames);
+
/* When scenecut threshold is set, use scenecut detection for I frame
placements */
if (m_param->scenecutThreshold && isScenecut)
{
@@ -1645,14 +1638,28 @@
frames[numFrames]->sliceType = X265_TYPE_P;
}
- /* Check scenecut on the first minigop. */
- for (int j = 1; j < numBFrames + 1; j++)
+ bool bForceRADL = m_param->radl && !m_param->bOpenGOP;
+ bool bLastMiniGop = (framecnt >= m_param->bframes + 1) ? false : true;
+ int preRADL = m_lastKeyframe + m_param->keyframeMax - m_param->radl -
1; /*Frame preceeding RADL in POC order*/
+ if (bForceRADL && (frames[0]->frameNum == preRADL) && !bLastMiniGop)
{
- if (scenecut(frames, j, j + 1, false, origNumFrames))
+ int j = 1;
+ numBFrames = m_param->radl;
+ for (; j <= m_param->radl; j++)
+ frames[j]->sliceType = X265_TYPE_B;
+ frames[j]->sliceType = X265_TYPE_I;
+ }
+ else /* Check scenecut and RADL on the first minigop. */
+ {
+ for (int j = 1; j < numBFrames + 1; j++)
{
- frames[j]->sliceType = X265_TYPE_P;
- numAnalyzed = j;
- break;
+ if (scenecut(frames, j, j + 1, false, origNumFrames) ||
+ (bForceRADL && (frames[j]->frameNum == preRADL)))
+ {
+ frames[j]->sliceType = X265_TYPE_P;
+ numAnalyzed = j;
+ break;
+ }
}
}
resetStart = bKeyframe ? 1 : X265_MIN(numBFrames + 2, numAnalyzed + 1);
diff -r 79c76e42cb28 -r 29345837cd20 source/test/regression-tests.txt
--- a/source/test/regression-tests.txt Wed Jul 25 14:40:47 2018 +0530
+++ b/source/test/regression-tests.txt Fri Jul 20 14:57:04 2018 +0530
@@ -149,7 +149,7 @@
Kimono1_1920x1080_24_400.yuv,--preset veryslow --crf 4 --cu-lossless --slices
2 --limit-refs 3 --limit-modes
Kimono1_1920x1080_24_400.yuv,--preset placebo --ctu 32 --max-tu-size 8
--limit-tu 2
big_buck_bunny_360p24.y4m, --keyint 60 --min-keyint 40 --gop-lookahead 14
-BasketballDrive_1920x1080_50.y4m, --preset medium --no-open-gop --keyint 50
--min-keyint 50 --radl 2
+BasketballDrive_1920x1080_50.y4m, --preset medium --no-open-gop --keyint 50
--min-keyint 50 --radl 2 --vbv-maxrate 5000 --vbv-bufsize 5000
# Main12 intraCost overflow bug test
720p50_parkrun_ter.y4m,--preset medium
# HG changeset patch
# User Aruna Matheswaran <[email protected]>
# Date 1532078824 -19800
# Fri Jul 20 14:57:04 2018 +0530
# Node ID 29345837cd2057dd2cfca837c1a36cab94e41bc4
# Parent 79c76e42cb28876d3fa3141f5f1f1a6b3973af0a
Enhance VBV lookahead of RADL pictures
This patch does the following,
1) Modifies the slice type enforcement flow to enhance VBV lookahead of RADL frames.
2) Update test CLI.
diff -r 79c76e42cb28 -r 29345837cd20 source/encoder/slicetype.cpp
--- a/source/encoder/slicetype.cpp Wed Jul 25 14:40:47 2018 +0530
+++ b/source/encoder/slicetype.cpp Fri Jul 20 14:57:04 2018 +0530
@@ -1147,14 +1147,6 @@
bframes--;
}
}
- if (m_param->radl && !m_param->bOpenGOP && list[bframes + 1])
- {
- if ((frm.frameNum - m_lastKeyframe) > (m_param->keyframeMax - m_param->radl - 1) && (frm.frameNum - m_lastKeyframe) < m_param->keyframeMax)
- frm.sliceType = X265_TYPE_B;
- if ((frm.frameNum - m_lastKeyframe) == (m_param->keyframeMax - m_param->radl - 1))
- frm.sliceType = X265_TYPE_P;
- }
-
if (bframes == m_param->bframes || !list[bframes + 1])
{
if (IS_X265_TYPE_B(frm.sliceType))
@@ -1538,6 +1530,7 @@
int numBFrames = 0;
int numAnalyzed = numFrames;
bool isScenecut = scenecut(frames, 0, 1, true, origNumFrames);
+
/* When scenecut threshold is set, use scenecut detection for I frame placements */
if (m_param->scenecutThreshold && isScenecut)
{
@@ -1645,14 +1638,28 @@
frames[numFrames]->sliceType = X265_TYPE_P;
}
- /* Check scenecut on the first minigop. */
- for (int j = 1; j < numBFrames + 1; j++)
+ bool bForceRADL = m_param->radl && !m_param->bOpenGOP;
+ bool bLastMiniGop = (framecnt >= m_param->bframes + 1) ? false : true;
+ int preRADL = m_lastKeyframe + m_param->keyframeMax - m_param->radl - 1; /*Frame preceeding RADL in POC order*/
+ if (bForceRADL && (frames[0]->frameNum == preRADL) && !bLastMiniGop)
{
- if (scenecut(frames, j, j + 1, false, origNumFrames))
+ int j = 1;
+ numBFrames = m_param->radl;
+ for (; j <= m_param->radl; j++)
+ frames[j]->sliceType = X265_TYPE_B;
+ frames[j]->sliceType = X265_TYPE_I;
+ }
+ else /* Check scenecut and RADL on the first minigop. */
+ {
+ for (int j = 1; j < numBFrames + 1; j++)
{
- frames[j]->sliceType = X265_TYPE_P;
- numAnalyzed = j;
- break;
+ if (scenecut(frames, j, j + 1, false, origNumFrames) ||
+ (bForceRADL && (frames[j]->frameNum == preRADL)))
+ {
+ frames[j]->sliceType = X265_TYPE_P;
+ numAnalyzed = j;
+ break;
+ }
}
}
resetStart = bKeyframe ? 1 : X265_MIN(numBFrames + 2, numAnalyzed + 1);
diff -r 79c76e42cb28 -r 29345837cd20 source/test/regression-tests.txt
--- a/source/test/regression-tests.txt Wed Jul 25 14:40:47 2018 +0530
+++ b/source/test/regression-tests.txt Fri Jul 20 14:57:04 2018 +0530
@@ -149,7 +149,7 @@
Kimono1_1920x1080_24_400.yuv,--preset veryslow --crf 4 --cu-lossless --slices 2 --limit-refs 3 --limit-modes
Kimono1_1920x1080_24_400.yuv,--preset placebo --ctu 32 --max-tu-size 8 --limit-tu 2
big_buck_bunny_360p24.y4m, --keyint 60 --min-keyint 40 --gop-lookahead 14
-BasketballDrive_1920x1080_50.y4m, --preset medium --no-open-gop --keyint 50 --min-keyint 50 --radl 2
+BasketballDrive_1920x1080_50.y4m, --preset medium --no-open-gop --keyint 50 --min-keyint 50 --radl 2 --vbv-maxrate 5000 --vbv-bufsize 5000
# Main12 intraCost overflow bug test
720p50_parkrun_ter.y4m,--preset medium
_______________________________________________
x265-devel mailing list
[email protected]
https://mailman.videolan.org/listinfo/x265-devel