1
+ //! Benchmark on a large video file.
2
+ //!
3
+ //! Expects a copy of [Big Buck Bunny](https://peach.blender.org/download/):
4
+ //! ```text
5
+ //! $ curl --OL https://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_1080p_h264.mov
6
+ //! $ ffmpeg -i big_buck_bunny_1080p_h264.mov -c copy big_buck_bunny_1080p.h264
7
+ //! ```
8
+
1
9
#[ macro_use]
2
10
extern crate criterion;
3
11
extern crate h264_reader;
4
12
5
13
use criterion:: Criterion ;
6
14
use std:: fs:: File ;
7
- use criterion:: Benchmark ;
8
15
use criterion:: Throughput ;
16
+ use std:: convert:: TryFrom ;
9
17
use std:: io:: Read ;
10
18
use h264_reader:: annexb:: AnnexBReader ;
11
19
use h264_reader:: annexb:: NalReader ;
@@ -33,7 +41,7 @@ impl NalHandler for NullNalHandler {
33
41
}
34
42
35
43
struct NullNalReader {
36
- decoder : RbspDecoder < NullNalHandler > ,
44
+ _decoder : RbspDecoder < NullNalHandler > ,
37
45
start : u64 ,
38
46
push : u64 ,
39
47
end : u64 ,
@@ -53,26 +61,29 @@ impl NalReader for NullNalReader {
53
61
}
54
62
55
63
fn h264_reader ( c : & mut Criterion ) {
56
- let mut f = File :: open ( "big_buck_bunny_1080p_24fps_h264 .h264" ) . expect ( "file not found" ) ;
57
- let size = f. metadata ( ) . unwrap ( ) . len ( ) as usize ;
58
- let mut buf = vec ! [ 0 ; size ] ;
64
+ let mut f = File :: open ( "big_buck_bunny_1080p .h264" ) . expect ( "file not found" ) ;
65
+ let len = f. metadata ( ) . unwrap ( ) . len ( ) ;
66
+ let mut buf = vec ! [ 0 ; usize :: try_from ( len ) . unwrap ( ) ] ;
59
67
f. read ( & mut buf[ ..] ) . unwrap ( ) ;
60
68
let mut ctx = Context :: default ( ) ;
61
69
let nal_handler = NullNalHandler { } ;
62
70
let nal_reader = NullNalReader {
63
- decoder : RbspDecoder :: new ( nal_handler) ,
71
+ _decoder : RbspDecoder :: new ( nal_handler) ,
64
72
start : 0 ,
65
73
push : 0 ,
66
74
end : 0 ,
67
75
} ;
68
76
let mut annexb_reader = AnnexBReader :: new ( nal_reader) ;
69
- c. bench ( "parse" , Benchmark :: new ( "parse" , move |b| {
77
+
78
+ let mut group = c. benchmark_group ( "parse" ) ;
79
+ group. throughput ( Throughput :: Bytes ( len) ) ;
80
+ group. bench_function ( "parse" , move |b| {
70
81
b. iter ( || {
71
82
annexb_reader. start ( & mut ctx) ;
72
83
annexb_reader. push ( & mut ctx, & buf[ ..] ) ;
73
84
annexb_reader. end_units ( & mut ctx) ;
74
- } ) ;
75
- } ) . throughput ( Throughput :: Bytes ( size as u32 ) ) ) ;
85
+ } )
86
+ } ) ;
76
87
}
77
88
78
89
criterion_group ! ( benches, h264_reader) ;
0 commit comments