-
Notifications
You must be signed in to change notification settings - Fork 434
Expand file tree
/
Copy pathtest_packet.py
More file actions
102 lines (81 loc) · 3.85 KB
/
test_packet.py
File metadata and controls
102 lines (81 loc) · 3.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
from typing import get_args
from unittest import SkipTest
import av
from .common import fate_suite
class TestProperties:
def test_is_keyframe(self) -> None:
with av.open(fate_suite("h264/interlaced_crop.mp4")) as container:
stream = container.streams.video[0]
for i, packet in enumerate(container.demux(stream)):
if i in (0, 21, 45, 69, 93, 117):
assert packet.is_keyframe
else:
assert not packet.is_keyframe
def test_is_corrupt(self) -> None:
with av.open(fate_suite("mov/white_zombie_scrunch-part.mov")) as container:
stream = container.streams.video[0]
for i, packet in enumerate(container.demux(stream)):
if i == 65:
assert packet.is_corrupt
else:
assert not packet.is_corrupt
def test_is_discard(self) -> None:
with av.open(fate_suite("mov/mov-1elist-ends-last-bframe.mov")) as container:
stream = container.streams.video[0]
for i, packet in enumerate(container.demux(stream)):
if i == 46:
assert packet.is_discard
else:
assert not packet.is_discard
def test_is_disposable(self) -> None:
with av.open(fate_suite("hap/HAPQA_NoSnappy_127x1.mov")) as container:
stream = container.streams.video[0]
for i, packet in enumerate(container.demux(stream)):
if i == 0:
assert packet.is_disposable
else:
assert not packet.is_disposable
def test_set_duration(self) -> None:
with av.open(fate_suite("h264/interlaced_crop.mp4")) as container:
for packet in container.demux():
assert packet.duration is not None
old_duration = packet.duration
packet.duration += 10
assert packet.duration == old_duration + 10
class TestPacketSideData:
def test_data_types(self) -> None:
dtypes = get_args(av.packet.PktSideDataT)
if av.ffmpeg_version_info.startswith("n") or av.ffmpeg_version_info.count(
"."
) not in (1, 2):
raise SkipTest(f"Expect version to be SemVar: {av.ffmpeg_version_info}")
ffmpeg_ver = [int(v) for v in av.ffmpeg_version_info.split(".", 2)[:2]]
for dtype in dtypes:
av_enum = av.packet.packet_sidedata_type_from_literal(dtype)
assert dtype == av.packet.packet_sidedata_type_to_literal(av_enum)
if (ffmpeg_ver[0] < 8 and dtype == "lcevc") or (
ffmpeg_ver[0] < 9 and dtype == "rtcp_sr"
):
break
def test_iter(self) -> None:
with av.open(fate_suite("h264/extradata-reload-multi-stsd.mov")) as container:
for pkt in container.demux():
for sdata in pkt.iter_sidedata():
assert pkt.dts == 2 and sdata.data_type == "new_extradata"
def test_palette(self) -> None:
with av.open(fate_suite("h264/extradata-reload-multi-stsd.mov")) as container:
iterpackets = container.demux()
pkt = next(pkt for pkt in iterpackets if pkt.has_sidedata("new_extradata"))
sdata = pkt.get_sidedata("new_extradata")
assert sdata.data_type == "new_extradata"
assert bool(sdata)
assert sdata.data_size > 0
assert sdata.data_desc == "New Extradata"
nxt = next(iterpackets) # has no palette
assert not nxt.has_sidedata("new_extradata")
sdata1 = nxt.get_sidedata("new_extradata")
assert sdata1.data_type == "new_extradata"
assert not bool(sdata1)
assert sdata1.data_size == 0
nxt.set_sidedata(sdata, move=True)
assert not bool(sdata)