@@ -53,7 +53,7 @@ impl<R: Read + Send + Sync> symphonia::core::io::MediaSource for MediaInput<R> {
53
53
pub ( crate ) struct MediaDecoder {
54
54
format : Box < dyn FormatReader > ,
55
55
decoder : Box < dyn Decoder > ,
56
- track_id : u32 ,
56
+ track_index : usize ,
57
57
packet_count : usize ,
58
58
}
59
59
@@ -95,15 +95,18 @@ impl MediaDecoder {
95
95
let track = format. default_track ( ) . ok_or ( SymphoniaError :: Unsupported (
96
96
"no default media track available" ,
97
97
) ) ?;
98
- let track_id = track. id ;
99
-
98
+ let track_index = format
99
+ . tracks ( )
100
+ . iter ( )
101
+ . position ( |t| t. id == track. id )
102
+ . unwrap ( ) ;
100
103
// Create a (stateful) decoder for the track.
101
104
let decoder = symphonia:: default:: get_codecs ( ) . make ( & track. codec_params , & decoder_opts) ?;
102
105
103
106
Ok ( Self {
104
107
format,
105
108
decoder,
106
- track_id ,
109
+ track_index ,
107
110
packet_count : 0 ,
108
111
} )
109
112
}
@@ -116,12 +119,13 @@ impl Iterator for MediaDecoder {
116
119
let Self {
117
120
format,
118
121
decoder,
119
- track_id ,
122
+ track_index ,
120
123
packet_count,
121
124
} = self ;
122
125
123
- // Get the default track.
124
- let track = format. default_track ( ) ?;
126
+ // Get the track.
127
+ let track = format. tracks ( ) . get ( * track_index) ?;
128
+ let track_id = track. id ;
125
129
let number_of_channels = track. codec_params . channels ?. count ( ) ;
126
130
let input_sample_rate = track. codec_params . sample_rate ? as f32 ;
127
131
@@ -153,7 +157,7 @@ impl Iterator for MediaDecoder {
153
157
154
158
// If the packet does not belong to the selected track, skip it.
155
159
let packet_track_id = packet. track_id ( ) ;
156
- if packet_track_id != * track_id {
160
+ if packet_track_id != track_id {
157
161
log:: debug!(
158
162
"Skipping packet from other track {packet_track_id} while decoding track {track_id}"
159
163
) ;
0 commit comments