haraldott/dash

FESTIVE stateful bitrate update misunderstanding

chanh1964 opened this issue · 1 comments

Dear authors and to whom it may concern,

I have been using this project for my research and I'd like to thank the authors for such a great contribution.

However, I have checked the FESTIVE algorithm and found out that there was a part in your FESTIVE.cc file that might have been misunderstood.

m_smooth.push_back (5); // after how many steps switch up is possible

dash/model/festive.cc

Lines 122 to 147 in 3522e46

if (currentRepIndex < m_highestRepIndex && !decisionMade)
{
int count = 0;
for (unsigned _sd = m_playbackData.playbackIndex.size () - 1; _sd-- > 0; )
{
if (currentRepIndex == m_playbackData.playbackIndex.at (_sd))
{
count++;
if (count >= m_smooth.at (0))
{
break;
}
}
else
{
break;
}
}
if (count >= m_smooth.at (0)
&& (double) m_videoData.averageBitrate.at (currentRepIndex + 1) <= thrptEstimation)
{
refIndex = currentRepIndex + 1;
answer.decisionCase = 1;
decisionMade = true;
}
}

According to the white paper of FESTIVE, bitrate at level k will remain the same for at least k chunks, before switching up to level k+1. Also in their paper, they've given an example where bitrate at 1130Kbps would switch up after 5 chunks, which I think might have led to this misunderstanding.

Therefore, the comparisons at line #130 and #140 should be if (count >= currentRepIndex), instead of the fixed value of 5.

Hope it helps.

i think the original code is right ,count represents steps