Skip to content

Commit d23fe40

Browse files
committed
Decoding: Consistently pick the selected track
...which might differ from the default track in the future.
1 parent 30e7be1 commit d23fe40

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

src/decoding.rs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ impl<R: Read + Send + Sync> symphonia::core::io::MediaSource for MediaInput<R> {
5353
pub(crate) struct MediaDecoder {
5454
format: Box<dyn FormatReader>,
5555
decoder: Box<dyn Decoder>,
56-
track_id: u32,
56+
track_index: usize,
5757
packet_count: usize,
5858
}
5959

@@ -95,15 +95,18 @@ impl MediaDecoder {
9595
let track = format.default_track().ok_or(SymphoniaError::Unsupported(
9696
"no default media track available",
9797
))?;
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();
100103
// Create a (stateful) decoder for the track.
101104
let decoder = symphonia::default::get_codecs().make(&track.codec_params, &decoder_opts)?;
102105

103106
Ok(Self {
104107
format,
105108
decoder,
106-
track_id,
109+
track_index,
107110
packet_count: 0,
108111
})
109112
}
@@ -116,12 +119,13 @@ impl Iterator for MediaDecoder {
116119
let Self {
117120
format,
118121
decoder,
119-
track_id,
122+
track_index,
120123
packet_count,
121124
} = self;
122125

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;
125129
let number_of_channels = track.codec_params.channels?.count();
126130
let input_sample_rate = track.codec_params.sample_rate? as f32;
127131

@@ -153,7 +157,7 @@ impl Iterator for MediaDecoder {
153157

154158
// If the packet does not belong to the selected track, skip it.
155159
let packet_track_id = packet.track_id();
156-
if packet_track_id != *track_id {
160+
if packet_track_id != track_id {
157161
log::debug!(
158162
"Skipping packet from other track {packet_track_id} while decoding track {track_id}"
159163
);

0 commit comments

Comments
 (0)