AV1 treat show_existing_frame headers as not depended on

PiperOrigin-RevId: 724300793
This commit is contained in:
dancho 2025-02-07 04:47:34 -08:00 committed by Copybara-Service
parent babc2dd416
commit 65e7b599d8
4 changed files with 57 additions and 73 deletions

View File

@ -294,10 +294,7 @@ public final class ObuParser {
throwWhenFeatureRequired(sequenceHeader.reducedStillPictureHeader);
boolean showExistingFrame = obuData.readBit();
if (showExistingFrame) {
// TODO: b/391108133 - Treat showExistingFrame as depended on. The picture was already
// decoded and the player may not save a lot of resources by rendering. Check if this
// assumption is correct!
isDependedOn = true;
isDependedOn = false;
return;
}
int frameType = obuData.readBits(2);

View File

@ -102,7 +102,7 @@ public class ObuParserTest {
}
@Test
public void parseFrameHeader_fromFrameHeader_returnsIsDependedOn() {
public void parseFrameHeader_fromShowExistingFrameHeader_returnsIsNotDependedOn() {
ObuParser.Obu sequenceHeaderObu = ObuParser.split(SEQUENCE_HEADER_AND_FRAME).get(0);
ObuParser.SequenceHeader sequenceHeader = ObuParser.SequenceHeader.parse(sequenceHeaderObu);
ObuParser.Obu frameHeaderObu =
@ -110,7 +110,7 @@ public class ObuParserTest {
ObuParser.FrameHeader frameHeader = ObuParser.FrameHeader.parse(sequenceHeader, frameHeaderObu);
assertThat(frameHeader.isDependedOn()).isTrue();
assertThat(frameHeader.isDependedOn()).isFalse();
}
@Test

View File

@ -16,6 +16,7 @@
package androidx.media3.exoplayer.video;
import static androidx.media3.container.ObuParser.OBU_FRAME;
import static androidx.media3.container.ObuParser.OBU_FRAME_HEADER;
import static androidx.media3.container.ObuParser.OBU_PADDING;
import static androidx.media3.container.ObuParser.OBU_SEQUENCE_HEADER;
import static androidx.media3.container.ObuParser.OBU_TEMPORAL_DELIMITER;
@ -63,7 +64,7 @@ import java.util.List;
int skippedFramesCount = 0;
int last = obuList.size() - 1;
while (last >= 0 && canSkipObu(obuList.get(last))) {
if (obuList.get(last).type == OBU_FRAME) {
if (obuList.get(last).type == OBU_FRAME || obuList.get(last).type == OBU_FRAME_HEADER) {
skippedFramesCount++;
}
last--;
@ -86,7 +87,7 @@ import java.util.List;
if (obu.type == OBU_TEMPORAL_DELIMITER || obu.type == OBU_PADDING) {
return true;
}
if (obu.type == OBU_FRAME && sequenceHeader != null) {
if ((obu.type == OBU_FRAME || obu.type == OBU_FRAME_HEADER) && sequenceHeader != null) {
FrameHeader frameHeader = FrameHeader.parse(sequenceHeader, obu);
return frameHeader != null && !frameHeader.isDependedOn();
}

View File

@ -1,198 +1,184 @@
MediaCodecAdapter (exotest.video.av1):
inputBuffers:
count = 28
count = 26
input buffer #0:
timeUs = 1000000000000
contents = length 84, hash 9C46A819
input buffer #1:
timeUs = 1000000066666
contents = length 133, hash 1F0DB1A3
input buffer #2:
timeUs = 1000000133333
contents = length 3, hash D5F0
input buffer #3:
timeUs = 1000000200000
contents = length 31, hash 4D3984BD
input buffer #4:
contents = length 161, hash 489E5DE0
input buffer #2:
timeUs = 1000000233333
contents = length 27, hash 70CFAC05
input buffer #5:
input buffer #3:
timeUs = 1000000266666
contents = length 3, hash D5D0
input buffer #6:
input buffer #4:
timeUs = 1000000300000
contents = length 82, hash 944218D6
input buffer #7:
input buffer #5:
timeUs = 1000000333333
contents = length 3, hash D600
input buffer #8:
input buffer #6:
timeUs = 1000000366666
contents = length 27, hash BA4D4A06
input buffer #9:
input buffer #7:
timeUs = 1000000400000
contents = length 3, hash D5F0
input buffer #10:
input buffer #8:
timeUs = 1000000433333
contents = length 54, hash A98584CA
input buffer #11:
input buffer #9:
timeUs = 1000000466666
contents = length 3, hash D600
input buffer #12:
input buffer #10:
timeUs = 1000000500000
contents = length 27, hash 45D733B8
input buffer #13:
input buffer #11:
timeUs = 1000000533333
contents = length 3, hash D5A0
input buffer #14:
input buffer #12:
timeUs = 1000000566666
contents = length 112, hash B80B26FD
input buffer #15:
input buffer #13:
timeUs = 1000000600000
contents = length 3, hash D5F0
input buffer #16:
input buffer #14:
timeUs = 1000000633333
contents = length 27, hash 37DD29D9
input buffer #17:
input buffer #15:
timeUs = 1000000666666
contents = length 3, hash D5E0
input buffer #18:
input buffer #16:
timeUs = 1000000700000
contents = length 54, hash 1C15581C
input buffer #19:
input buffer #17:
timeUs = 1000000733333
contents = length 3, hash D5F0
input buffer #20:
input buffer #18:
timeUs = 1000000766666
contents = length 27, hash 49EC3531
input buffer #21:
input buffer #19:
timeUs = 1000000800000
contents = length 3, hash D5B0
input buffer #22:
input buffer #20:
timeUs = 1000000833333
contents = length 84, hash 2025C9F5
input buffer #23:
input buffer #21:
timeUs = 1000000866666
contents = length 3, hash D5D0
input buffer #24:
input buffer #22:
timeUs = 1000000900000
contents = length 27, hash B927669C
input buffer #25:
input buffer #23:
timeUs = 1000000933333
contents = length 3, hash D5C0
input buffer #26:
input buffer #24:
timeUs = 1000000966666
contents = length 27, hash 706C58AD
input buffer #27:
input buffer #25:
timeUs = 0
flags = 4
contents = length 0, hash 1
outputBuffers:
count = 27
count = 25
output buffer #0:
timeUs = 1000000000000
size = 84
rendered = false
output buffer #1:
timeUs = 1000000066666
size = 133
rendered = false
output buffer #2:
timeUs = 1000000133333
size = 3
rendered = false
output buffer #3:
timeUs = 1000000200000
size = 31
size = 161
rendered = true
output buffer #4:
output buffer #2:
timeUs = 1000000233333
size = 27
rendered = true
output buffer #5:
output buffer #3:
timeUs = 1000000266666
size = 3
rendered = true
output buffer #6:
output buffer #4:
timeUs = 1000000300000
size = 82
rendered = true
output buffer #7:
output buffer #5:
timeUs = 1000000333333
size = 3
rendered = true
output buffer #8:
output buffer #6:
timeUs = 1000000366666
size = 27
rendered = true
output buffer #9:
output buffer #7:
timeUs = 1000000400000
size = 3
rendered = true
output buffer #10:
output buffer #8:
timeUs = 1000000433333
size = 54
rendered = true
output buffer #11:
output buffer #9:
timeUs = 1000000466666
size = 3
rendered = true
output buffer #12:
output buffer #10:
timeUs = 1000000500000
size = 27
rendered = true
output buffer #13:
output buffer #11:
timeUs = 1000000533333
size = 3
rendered = true
output buffer #14:
output buffer #12:
timeUs = 1000000566666
size = 112
rendered = true
output buffer #15:
output buffer #13:
timeUs = 1000000600000
size = 3
rendered = true
output buffer #16:
output buffer #14:
timeUs = 1000000633333
size = 27
rendered = true
output buffer #17:
output buffer #15:
timeUs = 1000000666666
size = 3
rendered = true
output buffer #18:
output buffer #16:
timeUs = 1000000700000
size = 54
rendered = true
output buffer #19:
output buffer #17:
timeUs = 1000000733333
size = 3
rendered = true
output buffer #20:
output buffer #18:
timeUs = 1000000766666
size = 27
rendered = true
output buffer #21:
output buffer #19:
timeUs = 1000000800000
size = 3
rendered = true
output buffer #22:
output buffer #20:
timeUs = 1000000833333
size = 84
rendered = true
output buffer #23:
output buffer #21:
timeUs = 1000000866666
size = 3
rendered = true
output buffer #24:
output buffer #22:
timeUs = 1000000900000
size = 27
rendered = true
output buffer #25:
output buffer #23:
timeUs = 1000000933333
size = 3
rendered = true
output buffer #26:
output buffer #24:
timeUs = 1000000966666
size = 27
rendered = true