st/omx/dec/h265: fix the skip for before and after list

For reference picture sets, there are cases that rps will not always
be used. Once detect the unused flag from encoded bitstream, we should
not add this rps to any list, otherwise pass the incorrect reference
and skip the correct rps.

Signed-off-by: Leo Liu <leo.liu@amd.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
This commit is contained in:
Leo Liu 2016-09-23 12:05:16 -04:00
parent c50b68e6a8
commit ffb863fd2c

View file

@ -594,6 +594,8 @@ static void vid_dec_h265_EndFrame(vid_dec_PrivateType *priv)
rps = priv->codec_data.h265.rps;
if (rps) {
unsigned bf = 0, af = 0;
priv->picture.h265.NumDeltaPocsOfRefRpsIdx = rps->num_delta_poc;
for (i = 0; i < rps->num_pics; ++i) {
priv->picture.h265.PicOrderCntVal[i] =
@ -609,11 +611,10 @@ static void vid_dec_h265_EndFrame(vid_dec_PrivateType *priv)
if (rps->used[i]) {
if (i < rps->num_neg_pics) {
priv->picture.h265.NumPocStCurrBefore++;
priv->picture.h265.RefPicSetStCurrBefore[i] = i;
priv->picture.h265.RefPicSetStCurrBefore[bf++] = i;
} else {
int j = i - rps->num_neg_pics;
priv->picture.h265.NumPocStCurrAfter++;
priv->picture.h265.RefPicSetStCurrAfter[j] = i;
priv->picture.h265.RefPicSetStCurrAfter[af++] = i;
}
}
}