Reset pbi->last_output_doh values in coding frame order Fixes #1461
diff --git a/av2/decoder/decodeframe.c b/av2/decoder/decodeframe.c index cb8723f..3336c3d 100644 --- a/av2/decoder/decodeframe.c +++ b/av2/decoder/decodeframe.c
@@ -8074,6 +8074,16 @@ } } } + + // A restricted switch frame resets the DOH epoch for this layer. + // This marks a CVS-internal epoch boundary where DOH derivation is + // restarted. + for (int ml = 0; ml <= cm->seq_params.max_mlayer_id; ml++) { + if (is_mlayer_transitively_dependent(&cm->seq_params, ml, + cm->mlayer_id)) { + pbi->last_output_doh[cm->xlayer_id][ml] = -1; + } + } memset(&pbi->last_frame_unit, -1, sizeof(pbi->last_frame_unit)); memset(&pbi->last_displayable_frame_unit, -1, sizeof(pbi->last_displayable_frame_unit));
diff --git a/av2/decoder/decoder.c b/av2/decoder/decoder.c index a929bb6..3e48f0e 100644 --- a/av2/decoder/decoder.c +++ b/av2/decoder/decoder.c
@@ -632,7 +632,6 @@ // A restricted switch frame resets the DOH epoch for this layer. // This marks a CVS-internal epoch boundary where DOH derivation is restarted. if (frame->is_restricted_switch_frame) { - pbi->last_output_doh[xl][ml] = doh; return 0; }