mirror of
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
synced 2024-11-25 13:01:07 +00:00
fmp4mux: Avoid error on caps change with incomplete GOP pushed
New fragments may accept inter-frames if an incomplete GOP has been pushed after a caps change and upstream did not handle the force-key-unit event. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1914>
This commit is contained in:
parent
1dcf0943db
commit
b95f39f4bf
1 changed files with 7 additions and 3 deletions
|
@ -1694,7 +1694,7 @@ impl FMP4Mux {
|
||||||
fragment_end_pts: gst::ClockTime,
|
fragment_end_pts: gst::ClockTime,
|
||||||
chunk_start_pts: gst::ClockTime,
|
chunk_start_pts: gst::ClockTime,
|
||||||
chunk_end_pts: Option<gst::ClockTime>,
|
chunk_end_pts: Option<gst::ClockTime>,
|
||||||
fragment_start: bool,
|
check_fragment_start: bool,
|
||||||
fragment_filled: bool,
|
fragment_filled: bool,
|
||||||
) -> Result<Vec<Gop>, gst::FlowError> {
|
) -> Result<Vec<Gop>, gst::FlowError> {
|
||||||
assert!(
|
assert!(
|
||||||
|
@ -1897,7 +1897,7 @@ impl FMP4Mux {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if fragment_start {
|
if check_fragment_start {
|
||||||
if let Some(first_buffer) = gops.first().and_then(|gop| gop.buffers.first()) {
|
if let Some(first_buffer) = gops.first().and_then(|gop| gop.buffers.first()) {
|
||||||
if first_buffer
|
if first_buffer
|
||||||
.buffer
|
.buffer
|
||||||
|
@ -2254,7 +2254,11 @@ impl FMP4Mux {
|
||||||
fragment_end_pts,
|
fragment_end_pts,
|
||||||
chunk_start_pts,
|
chunk_start_pts,
|
||||||
chunk_end_pts,
|
chunk_end_pts,
|
||||||
fragment_start,
|
// Fragment start checks should only happen if there was no caps/tag change with
|
||||||
|
// incomplete GOP pushed before. This will become active only in case there was an
|
||||||
|
// incomplete GOP pushed before because otherwise the new fragment will not accept
|
||||||
|
// inter-frames before an intra-frame anyway.
|
||||||
|
state.sent_headers && fragment_start,
|
||||||
fragment_filled,
|
fragment_filled,
|
||||||
)?;
|
)?;
|
||||||
stream.fragment_filled = false;
|
stream.fragment_filled = false;
|
||||||
|
|
Loading…
Reference in a new issue