fmp4mux: Renamed caps_change_allowed() to header_update_allowed()

Because tag events like orientation and language require a header
update as well.

For proper logging the function now takes a reason parameter and logs
a debug message in case the header update is allowed.

And added some explanation to the function to make sure that it is
used in the right place.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1762>
This commit is contained in:
Jochen Henneberg 2024-09-20 13:54:38 +02:00
parent c0f3eff18e
commit 8313260e09

View file

@ -668,16 +668,28 @@ impl FMP4Mux {
stream.pre_queue.pop_front().unwrap() stream.pre_queue.pop_front().unwrap()
} }
// Caps changes are allowed only in case that the // Caps/tag changes are allowed only in case that the
// header-update-mode is None // header-update-mode is None.
fn caps_change_allowed(&self) -> bool { //
// CAUTION: This function logs a warning if operation is not
// allowed so it should be evaluated only in case the caps/tags
// would change otherwise (e. g. right-most operand in boolean
// expressions).
fn header_update_allowed(&self, reason: &str) -> bool {
if self.settings.lock().unwrap().header_update_mode == super::HeaderUpdateMode::None { if self.settings.lock().unwrap().header_update_mode == super::HeaderUpdateMode::None {
gst::debug!(
CAT,
imp = self,
"Header update because incompatible change of {}",
reason
);
true true
} else { } else {
gst::error!( gst::error!(
CAT, CAT,
imp = self, imp = self,
"Caps change not allowed if header-update-mode is enabled" "Incompatible {} change not allowed if header-update-mode is enabled",
reason
); );
false false
} }
@ -3427,7 +3439,8 @@ impl AggregatorImpl for FMP4Mux {
.iter_mut() .iter_mut()
.find(|s| *aggregator_pad == s.sinkpad) .find(|s| *aggregator_pad == s.sinkpad)
{ {
if self.caps_change_allowed() && !self.caps_compatible(stream, caps.caps()) if !self.caps_compatible(stream, caps.caps())
&& self.header_update_allowed("caps")
{ {
gst::trace!( gst::trace!(
CAT, CAT,
@ -3435,7 +3448,7 @@ impl AggregatorImpl for FMP4Mux {
"Update caps and send new headers {:?}", "Update caps and send new headers {:?}",
caps caps
); );
stream.next_caps = Some(caps.caps().to_owned()); stream.next_caps = Some(caps.caps_owned());
true true
} else { } else {
false false
@ -3471,7 +3484,7 @@ impl AggregatorImpl for FMP4Mux {
// trigger caps change // trigger caps change
if state.language_code != language_code if state.language_code != language_code
&& !state.streams.is_empty() && !state.streams.is_empty()
&& self.caps_change_allowed() && self.header_update_allowed("language code")
{ {
state.language_code = language_code; state.language_code = language_code;
state.need_new_header = true; state.need_new_header = true;
@ -3497,14 +3510,22 @@ impl AggregatorImpl for FMP4Mux {
// "flip-rotate-90" => Some(ImageOrientation::FlipRotate90), // "flip-rotate-90" => Some(ImageOrientation::FlipRotate90),
// "flip-rotate-180" => Some(ImageOrientation::FlipRotate180), // "flip-rotate-180" => Some(ImageOrientation::FlipRotate180),
// "flip-rotate-270" => Some(ImageOrientation::FlipRotate270), // "flip-rotate-270" => Some(ImageOrientation::FlipRotate270),
_ => None, _ => {
gst::info!(
CAT,
imp = self,
"Orientation {:?} not yet supported",
orientation
);
None
}
}; };
// If the orientation changed and we have buffers // If the orientation changed and we have buffers
// trigger caps change // trigger caps change
if state.orientation != orientation if state.orientation != orientation
&& !state.streams.is_empty() && !state.streams.is_empty()
&& self.caps_change_allowed() && self.header_update_allowed("orientation")
{ {
state.orientation = orientation; state.orientation = orientation;
state.need_new_header = true; state.need_new_header = true;