Skip to content

Commit 0febd94

Browse files
committed
[GStreamer] Trim leading zeroes from track IDs
https://bugs.webkit.org/show_bug.cgi?id=268549 Reviewed by Xabier Rodriguez-Calvar and Philippe Normand. Qtdemux inserts leading zeroes when generating stream-ids, this patch trims them in TrackPrivateBaseGStreamer for a better representation of their underlying integers. * Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp: (WebCore::trimStreamId): (WebCore::TrackPrivateBaseGStreamer::TrackPrivateBaseGStreamer): (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfStreamChanged): (WebCore::TrackPrivateBaseGStreamer::trackIdFromPadStreamStartOrUniqueID): Canonical link: https://commits.webkit.org/274469@main
1 parent fc1703e commit 0febd94

1 file changed

Lines changed: 14 additions & 3 deletions

File tree

Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,17 @@ static GRefPtr<GstPad> findBestUpstreamPad(GRefPtr<GstPad> pad)
7171
return sinkPad;
7272
}
7373

74+
static AtomString trimStreamId(StringView streamId)
75+
{
76+
size_t index = streamId.find([](auto c) {
77+
return c != '0';
78+
});
79+
80+
if (index == notFound)
81+
return AtomString::fromLatin1("0");
82+
return AtomString(streamId.substring(index).toString());
83+
}
84+
7485
TrackPrivateBaseGStreamer::TrackPrivateBaseGStreamer(TrackType type, TrackPrivateBase* owner, unsigned index, GRefPtr<GstPad>&& pad, bool shouldHandleStreamStartEvent)
7586
: m_notifier(MainThreadNotifier<MainThreadNotification>::create())
7687
, m_index(index)
@@ -95,7 +106,7 @@ TrackPrivateBaseGStreamer::TrackPrivateBaseGStreamer(TrackType type, TrackPrivat
95106
, m_owner(owner)
96107
{
97108
ASSERT(m_stream);
98-
m_id = AtomString::fromLatin1(gst_stream_get_stream_id(m_stream.get()));
109+
m_id = trimStreamId(StringView::fromLatin1(gst_stream_get_stream_id(m_stream.get())));
99110

100111
g_signal_connect_swapped(m_stream.get(), "notify::tags", G_CALLBACK(+[](TrackPrivateBaseGStreamer* track) {
101112
track->tagsChanged();
@@ -261,7 +272,7 @@ void TrackPrivateBaseGStreamer::notifyTrackOfStreamChanged()
261272
return;
262273

263274
GST_INFO("Track %d got stream start for stream %s.", m_index, streamId.get());
264-
m_id = AtomString::fromLatin1(streamId.get());
275+
m_id = trimStreamId(StringView::fromLatin1(streamId.get()));
265276
}
266277

267278
void TrackPrivateBaseGStreamer::streamChanged()
@@ -329,7 +340,7 @@ String TrackPrivateBaseGStreamer::trackIdFromPadStreamStartOrUniqueID(TrackType
329340
if (position == notFound || position + 1 == streamIdView.length())
330341
return generateUniquePlaybin2StreamID(type, index);
331342

332-
return streamIdView.substring(position + 1).toString();
343+
return trimStreamId(streamIdView.substring(position + 1));
333344
}
334345

335346
GRefPtr<GstTagList> TrackPrivateBaseGStreamer::getAllTags(const GRefPtr<GstPad>& pad)

0 commit comments

Comments
 (0)