mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
AV1 treat show_existing_frame headers as not depended on
PiperOrigin-RevId: 724300793
This commit is contained in:
parent
babc2dd416
commit
65e7b599d8
@ -294,10 +294,7 @@ public final class ObuParser {
|
|||||||
throwWhenFeatureRequired(sequenceHeader.reducedStillPictureHeader);
|
throwWhenFeatureRequired(sequenceHeader.reducedStillPictureHeader);
|
||||||
boolean showExistingFrame = obuData.readBit();
|
boolean showExistingFrame = obuData.readBit();
|
||||||
if (showExistingFrame) {
|
if (showExistingFrame) {
|
||||||
// TODO: b/391108133 - Treat showExistingFrame as depended on. The picture was already
|
isDependedOn = false;
|
||||||
// decoded and the player may not save a lot of resources by rendering. Check if this
|
|
||||||
// assumption is correct!
|
|
||||||
isDependedOn = true;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int frameType = obuData.readBits(2);
|
int frameType = obuData.readBits(2);
|
||||||
|
@ -102,7 +102,7 @@ public class ObuParserTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void parseFrameHeader_fromFrameHeader_returnsIsDependedOn() {
|
public void parseFrameHeader_fromShowExistingFrameHeader_returnsIsNotDependedOn() {
|
||||||
ObuParser.Obu sequenceHeaderObu = ObuParser.split(SEQUENCE_HEADER_AND_FRAME).get(0);
|
ObuParser.Obu sequenceHeaderObu = ObuParser.split(SEQUENCE_HEADER_AND_FRAME).get(0);
|
||||||
ObuParser.SequenceHeader sequenceHeader = ObuParser.SequenceHeader.parse(sequenceHeaderObu);
|
ObuParser.SequenceHeader sequenceHeader = ObuParser.SequenceHeader.parse(sequenceHeaderObu);
|
||||||
ObuParser.Obu frameHeaderObu =
|
ObuParser.Obu frameHeaderObu =
|
||||||
@ -110,7 +110,7 @@ public class ObuParserTest {
|
|||||||
|
|
||||||
ObuParser.FrameHeader frameHeader = ObuParser.FrameHeader.parse(sequenceHeader, frameHeaderObu);
|
ObuParser.FrameHeader frameHeader = ObuParser.FrameHeader.parse(sequenceHeader, frameHeaderObu);
|
||||||
|
|
||||||
assertThat(frameHeader.isDependedOn()).isTrue();
|
assertThat(frameHeader.isDependedOn()).isFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
package androidx.media3.exoplayer.video;
|
package androidx.media3.exoplayer.video;
|
||||||
|
|
||||||
import static androidx.media3.container.ObuParser.OBU_FRAME;
|
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_PADDING;
|
||||||
import static androidx.media3.container.ObuParser.OBU_SEQUENCE_HEADER;
|
import static androidx.media3.container.ObuParser.OBU_SEQUENCE_HEADER;
|
||||||
import static androidx.media3.container.ObuParser.OBU_TEMPORAL_DELIMITER;
|
import static androidx.media3.container.ObuParser.OBU_TEMPORAL_DELIMITER;
|
||||||
@ -63,7 +64,7 @@ import java.util.List;
|
|||||||
int skippedFramesCount = 0;
|
int skippedFramesCount = 0;
|
||||||
int last = obuList.size() - 1;
|
int last = obuList.size() - 1;
|
||||||
while (last >= 0 && canSkipObu(obuList.get(last))) {
|
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++;
|
skippedFramesCount++;
|
||||||
}
|
}
|
||||||
last--;
|
last--;
|
||||||
@ -86,7 +87,7 @@ import java.util.List;
|
|||||||
if (obu.type == OBU_TEMPORAL_DELIMITER || obu.type == OBU_PADDING) {
|
if (obu.type == OBU_TEMPORAL_DELIMITER || obu.type == OBU_PADDING) {
|
||||||
return true;
|
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);
|
FrameHeader frameHeader = FrameHeader.parse(sequenceHeader, obu);
|
||||||
return frameHeader != null && !frameHeader.isDependedOn();
|
return frameHeader != null && !frameHeader.isDependedOn();
|
||||||
}
|
}
|
||||||
|
@ -1,198 +1,184 @@
|
|||||||
MediaCodecAdapter (exotest.video.av1):
|
MediaCodecAdapter (exotest.video.av1):
|
||||||
inputBuffers:
|
inputBuffers:
|
||||||
count = 28
|
count = 26
|
||||||
input buffer #0:
|
input buffer #0:
|
||||||
timeUs = 1000000000000
|
timeUs = 1000000000000
|
||||||
contents = length 84, hash 9C46A819
|
contents = length 84, hash 9C46A819
|
||||||
input buffer #1:
|
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
|
timeUs = 1000000200000
|
||||||
contents = length 31, hash 4D3984BD
|
contents = length 161, hash 489E5DE0
|
||||||
input buffer #4:
|
input buffer #2:
|
||||||
timeUs = 1000000233333
|
timeUs = 1000000233333
|
||||||
contents = length 27, hash 70CFAC05
|
contents = length 27, hash 70CFAC05
|
||||||
input buffer #5:
|
input buffer #3:
|
||||||
timeUs = 1000000266666
|
timeUs = 1000000266666
|
||||||
contents = length 3, hash D5D0
|
contents = length 3, hash D5D0
|
||||||
input buffer #6:
|
input buffer #4:
|
||||||
timeUs = 1000000300000
|
timeUs = 1000000300000
|
||||||
contents = length 82, hash 944218D6
|
contents = length 82, hash 944218D6
|
||||||
input buffer #7:
|
input buffer #5:
|
||||||
timeUs = 1000000333333
|
timeUs = 1000000333333
|
||||||
contents = length 3, hash D600
|
contents = length 3, hash D600
|
||||||
input buffer #8:
|
input buffer #6:
|
||||||
timeUs = 1000000366666
|
timeUs = 1000000366666
|
||||||
contents = length 27, hash BA4D4A06
|
contents = length 27, hash BA4D4A06
|
||||||
input buffer #9:
|
input buffer #7:
|
||||||
timeUs = 1000000400000
|
timeUs = 1000000400000
|
||||||
contents = length 3, hash D5F0
|
contents = length 3, hash D5F0
|
||||||
input buffer #10:
|
input buffer #8:
|
||||||
timeUs = 1000000433333
|
timeUs = 1000000433333
|
||||||
contents = length 54, hash A98584CA
|
contents = length 54, hash A98584CA
|
||||||
input buffer #11:
|
input buffer #9:
|
||||||
timeUs = 1000000466666
|
timeUs = 1000000466666
|
||||||
contents = length 3, hash D600
|
contents = length 3, hash D600
|
||||||
input buffer #12:
|
input buffer #10:
|
||||||
timeUs = 1000000500000
|
timeUs = 1000000500000
|
||||||
contents = length 27, hash 45D733B8
|
contents = length 27, hash 45D733B8
|
||||||
input buffer #13:
|
input buffer #11:
|
||||||
timeUs = 1000000533333
|
timeUs = 1000000533333
|
||||||
contents = length 3, hash D5A0
|
contents = length 3, hash D5A0
|
||||||
input buffer #14:
|
input buffer #12:
|
||||||
timeUs = 1000000566666
|
timeUs = 1000000566666
|
||||||
contents = length 112, hash B80B26FD
|
contents = length 112, hash B80B26FD
|
||||||
input buffer #15:
|
input buffer #13:
|
||||||
timeUs = 1000000600000
|
timeUs = 1000000600000
|
||||||
contents = length 3, hash D5F0
|
contents = length 3, hash D5F0
|
||||||
input buffer #16:
|
input buffer #14:
|
||||||
timeUs = 1000000633333
|
timeUs = 1000000633333
|
||||||
contents = length 27, hash 37DD29D9
|
contents = length 27, hash 37DD29D9
|
||||||
input buffer #17:
|
input buffer #15:
|
||||||
timeUs = 1000000666666
|
timeUs = 1000000666666
|
||||||
contents = length 3, hash D5E0
|
contents = length 3, hash D5E0
|
||||||
input buffer #18:
|
input buffer #16:
|
||||||
timeUs = 1000000700000
|
timeUs = 1000000700000
|
||||||
contents = length 54, hash 1C15581C
|
contents = length 54, hash 1C15581C
|
||||||
input buffer #19:
|
input buffer #17:
|
||||||
timeUs = 1000000733333
|
timeUs = 1000000733333
|
||||||
contents = length 3, hash D5F0
|
contents = length 3, hash D5F0
|
||||||
input buffer #20:
|
input buffer #18:
|
||||||
timeUs = 1000000766666
|
timeUs = 1000000766666
|
||||||
contents = length 27, hash 49EC3531
|
contents = length 27, hash 49EC3531
|
||||||
input buffer #21:
|
input buffer #19:
|
||||||
timeUs = 1000000800000
|
timeUs = 1000000800000
|
||||||
contents = length 3, hash D5B0
|
contents = length 3, hash D5B0
|
||||||
input buffer #22:
|
input buffer #20:
|
||||||
timeUs = 1000000833333
|
timeUs = 1000000833333
|
||||||
contents = length 84, hash 2025C9F5
|
contents = length 84, hash 2025C9F5
|
||||||
input buffer #23:
|
input buffer #21:
|
||||||
timeUs = 1000000866666
|
timeUs = 1000000866666
|
||||||
contents = length 3, hash D5D0
|
contents = length 3, hash D5D0
|
||||||
input buffer #24:
|
input buffer #22:
|
||||||
timeUs = 1000000900000
|
timeUs = 1000000900000
|
||||||
contents = length 27, hash B927669C
|
contents = length 27, hash B927669C
|
||||||
input buffer #25:
|
input buffer #23:
|
||||||
timeUs = 1000000933333
|
timeUs = 1000000933333
|
||||||
contents = length 3, hash D5C0
|
contents = length 3, hash D5C0
|
||||||
input buffer #26:
|
input buffer #24:
|
||||||
timeUs = 1000000966666
|
timeUs = 1000000966666
|
||||||
contents = length 27, hash 706C58AD
|
contents = length 27, hash 706C58AD
|
||||||
input buffer #27:
|
input buffer #25:
|
||||||
timeUs = 0
|
timeUs = 0
|
||||||
flags = 4
|
flags = 4
|
||||||
contents = length 0, hash 1
|
contents = length 0, hash 1
|
||||||
outputBuffers:
|
outputBuffers:
|
||||||
count = 27
|
count = 25
|
||||||
output buffer #0:
|
output buffer #0:
|
||||||
timeUs = 1000000000000
|
timeUs = 1000000000000
|
||||||
size = 84
|
size = 84
|
||||||
rendered = false
|
rendered = false
|
||||||
output buffer #1:
|
output buffer #1:
|
||||||
timeUs = 1000000066666
|
|
||||||
size = 133
|
|
||||||
rendered = false
|
|
||||||
output buffer #2:
|
|
||||||
timeUs = 1000000133333
|
|
||||||
size = 3
|
|
||||||
rendered = false
|
|
||||||
output buffer #3:
|
|
||||||
timeUs = 1000000200000
|
timeUs = 1000000200000
|
||||||
size = 31
|
size = 161
|
||||||
rendered = true
|
rendered = true
|
||||||
output buffer #4:
|
output buffer #2:
|
||||||
timeUs = 1000000233333
|
timeUs = 1000000233333
|
||||||
size = 27
|
size = 27
|
||||||
rendered = true
|
rendered = true
|
||||||
output buffer #5:
|
output buffer #3:
|
||||||
timeUs = 1000000266666
|
timeUs = 1000000266666
|
||||||
size = 3
|
size = 3
|
||||||
rendered = true
|
rendered = true
|
||||||
output buffer #6:
|
output buffer #4:
|
||||||
timeUs = 1000000300000
|
timeUs = 1000000300000
|
||||||
size = 82
|
size = 82
|
||||||
rendered = true
|
rendered = true
|
||||||
output buffer #7:
|
output buffer #5:
|
||||||
timeUs = 1000000333333
|
timeUs = 1000000333333
|
||||||
size = 3
|
size = 3
|
||||||
rendered = true
|
rendered = true
|
||||||
output buffer #8:
|
output buffer #6:
|
||||||
timeUs = 1000000366666
|
timeUs = 1000000366666
|
||||||
size = 27
|
size = 27
|
||||||
rendered = true
|
rendered = true
|
||||||
output buffer #9:
|
output buffer #7:
|
||||||
timeUs = 1000000400000
|
timeUs = 1000000400000
|
||||||
size = 3
|
size = 3
|
||||||
rendered = true
|
rendered = true
|
||||||
output buffer #10:
|
output buffer #8:
|
||||||
timeUs = 1000000433333
|
timeUs = 1000000433333
|
||||||
size = 54
|
size = 54
|
||||||
rendered = true
|
rendered = true
|
||||||
output buffer #11:
|
output buffer #9:
|
||||||
timeUs = 1000000466666
|
timeUs = 1000000466666
|
||||||
size = 3
|
size = 3
|
||||||
rendered = true
|
rendered = true
|
||||||
output buffer #12:
|
output buffer #10:
|
||||||
timeUs = 1000000500000
|
timeUs = 1000000500000
|
||||||
size = 27
|
size = 27
|
||||||
rendered = true
|
rendered = true
|
||||||
output buffer #13:
|
output buffer #11:
|
||||||
timeUs = 1000000533333
|
timeUs = 1000000533333
|
||||||
size = 3
|
size = 3
|
||||||
rendered = true
|
rendered = true
|
||||||
output buffer #14:
|
output buffer #12:
|
||||||
timeUs = 1000000566666
|
timeUs = 1000000566666
|
||||||
size = 112
|
size = 112
|
||||||
rendered = true
|
rendered = true
|
||||||
output buffer #15:
|
output buffer #13:
|
||||||
timeUs = 1000000600000
|
timeUs = 1000000600000
|
||||||
size = 3
|
size = 3
|
||||||
rendered = true
|
rendered = true
|
||||||
output buffer #16:
|
output buffer #14:
|
||||||
timeUs = 1000000633333
|
timeUs = 1000000633333
|
||||||
size = 27
|
size = 27
|
||||||
rendered = true
|
rendered = true
|
||||||
output buffer #17:
|
output buffer #15:
|
||||||
timeUs = 1000000666666
|
timeUs = 1000000666666
|
||||||
size = 3
|
size = 3
|
||||||
rendered = true
|
rendered = true
|
||||||
output buffer #18:
|
output buffer #16:
|
||||||
timeUs = 1000000700000
|
timeUs = 1000000700000
|
||||||
size = 54
|
size = 54
|
||||||
rendered = true
|
rendered = true
|
||||||
output buffer #19:
|
output buffer #17:
|
||||||
timeUs = 1000000733333
|
timeUs = 1000000733333
|
||||||
size = 3
|
size = 3
|
||||||
rendered = true
|
rendered = true
|
||||||
output buffer #20:
|
output buffer #18:
|
||||||
timeUs = 1000000766666
|
timeUs = 1000000766666
|
||||||
size = 27
|
size = 27
|
||||||
rendered = true
|
rendered = true
|
||||||
output buffer #21:
|
output buffer #19:
|
||||||
timeUs = 1000000800000
|
timeUs = 1000000800000
|
||||||
size = 3
|
size = 3
|
||||||
rendered = true
|
rendered = true
|
||||||
output buffer #22:
|
output buffer #20:
|
||||||
timeUs = 1000000833333
|
timeUs = 1000000833333
|
||||||
size = 84
|
size = 84
|
||||||
rendered = true
|
rendered = true
|
||||||
output buffer #23:
|
output buffer #21:
|
||||||
timeUs = 1000000866666
|
timeUs = 1000000866666
|
||||||
size = 3
|
size = 3
|
||||||
rendered = true
|
rendered = true
|
||||||
output buffer #24:
|
output buffer #22:
|
||||||
timeUs = 1000000900000
|
timeUs = 1000000900000
|
||||||
size = 27
|
size = 27
|
||||||
rendered = true
|
rendered = true
|
||||||
output buffer #25:
|
output buffer #23:
|
||||||
timeUs = 1000000933333
|
timeUs = 1000000933333
|
||||||
size = 3
|
size = 3
|
||||||
rendered = true
|
rendered = true
|
||||||
output buffer #26:
|
output buffer #24:
|
||||||
timeUs = 1000000966666
|
timeUs = 1000000966666
|
||||||
size = 27
|
size = 27
|
||||||
rendered = true
|
rendered = true
|
||||||
|
Loading…
x
Reference in New Issue
Block a user