forked from egao1980/PyAV
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_decode.py
More file actions
51 lines (33 loc) · 1.7 KB
/
Copy pathtest_decode.py
File metadata and controls
51 lines (33 loc) · 1.7 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
from __future__ import print_function
from .common import *
class TestDecode(TestCase):
def test_decoded_video_frame_count(self):
container = av.open(fate_suite('h264/interlaced_crop.mp4'))
video_stream = next(s for s in container.streams if s.type == 'video')
self.assertIs(video_stream, container.streams.video[0])
frame_count = 0
for packet in container.demux(video_stream):
for frame in packet.decode():
frame_count += 1
self.assertEqual(frame_count, video_stream.frames)
def test_decode_audio_sample_count(self):
container = av.open(fate_suite('audio-reference/chorusnoise_2ch_44kHz_s16.wav'))
audio_stream = next(s for s in container.streams if s.type == 'audio')
self.assertIs(audio_stream, container.streams.audio[0])
sample_count = 0
print(audio_stream.frames)
for packet in container.demux(audio_stream):
for frame in packet.decode():
sample_count += frame.samples
total_samples = (audio_stream.duration * audio_stream.rate.numerator) / audio_stream.time_base.denominator
self.assertEqual(sample_count, total_samples)
def test_decoded_time_base(self):
container = av.open(fate_suite('h264/interlaced_crop.mp4'))
stream = container.streams.video[0]
codec_context = stream.codec_context
self.assertNotEqual(stream.time_base, codec_context.time_base)
for packet in container.demux(stream):
for frame in packet.decode():
self.assertEqual(packet.time_base, frame.time_base)
self.assertEqual(stream.time_base, frame.time_base)
return