Skip to content

Commit

Permalink
REGRESSION(271921@main): [GStreamer] ASSERTION FAILED: !HashTranslato…
Browse files Browse the repository at this point in the history
…r::equal(KeyTraits::emptyValue(), key)

https://bugs.webkit.org/show_bug.cgi?id=266333

Reviewed by Xabier Rodriguez-Calvar.

HashMap doesn't like to store key that evaluate to false, so a TrackID with value 0 would trigger an
ASSERT. So switch back to unordered_map for tracks storage, and avoid std::views for access, which
is not available in clang-14.

* LayoutTests/platform/glib/TestExpectations:
* Source/WebCore/platform/graphics/gstreamer/mse/MediaSourcePrivateGStreamer.cpp:
(WebCore::MediaSourcePrivateGStreamer::startPlaybackIfHasAllTracks):
* Source/WebCore/platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp:
(WebCore::SourceBufferPrivateGStreamer::removedFromMediaSource):
(WebCore::SourceBufferPrivateGStreamer::flush):
(WebCore::SourceBufferPrivateGStreamer::enqueueSample):
(WebCore::SourceBufferPrivateGStreamer::isReadyForMoreSamples):
(WebCore::SourceBufferPrivateGStreamer::notifyClientWhenReadyForMoreSamples):
(WebCore::SourceBufferPrivateGStreamer::allSamplesInTrackEnqueued):
(WebCore::SourceBufferPrivateGStreamer::precheckInitializationSegment):
* Source/WebCore/platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.h:

Canonical link: https://commits.webkit.org/272028@main
  • Loading branch information
philn committed Dec 14, 2023
1 parent b780dce commit ad15255
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 74 deletions.
77 changes: 17 additions & 60 deletions LayoutTests/platform/glib/TestExpectations
Original file line number Diff line number Diff line change
Expand Up @@ -1089,9 +1089,8 @@ webkit.org/b/228820 media/media-source/media-mp4-h264-partial-abort.html [ Failu
webkit.org/b/224767 imported/w3c/web-platform-tests/media-source/mediasource-changetype-play-implicit.html [ Crash Pass ]

# See also bug #175578.
# Uncomment when webkit.org/b/266333 is fixed
#webkit.org/b/167108 imported/w3c/web-platform-tests/media-source/mediasource-avtracks.html [ Failure ]
#webkit.org/b/167108 imported/w3c/web-platform-tests/media-source/mediasource-buffered.html [ Failure ]
webkit.org/b/167108 imported/w3c/web-platform-tests/media-source/mediasource-avtracks.html [ Failure ]
webkit.org/b/167108 imported/w3c/web-platform-tests/media-source/mediasource-buffered.html [ Failure ]
webkit.org/b/167108 imported/w3c/web-platform-tests/media-source/mediasource-changetype.html [ Failure Crash ]

# Crash is webkit.org/b/176020.
Expand All @@ -1101,8 +1100,7 @@ webkit.org/b/167108 imported/w3c/web-platform-tests/media-source/mediasource-dur
webkit.org/b/167108 imported/w3c/web-platform-tests/media-source/mediasource-endofstream.html [ Failure ]
webkit.org/b/210486 imported/w3c/web-platform-tests/media-source/mediasource-correct-frames-after-reappend.html [ Failure ]

# Uncomment when webkit.org/b/266333 is fixed
#webkit.org/b/226804 imported/w3c/web-platform-tests/media-source/mediasource-changetype-play.html [ Failure ]
webkit.org/b/226804 imported/w3c/web-platform-tests/media-source/mediasource-changetype-play.html [ Failure ]

webkit.org/b/167108 imported/w3c/web-platform-tests/media-source/mediasource-trackdefaultlist.html [ Failure ]
webkit.org/b/210341 media/media-source/media-mp4-h264-sequence-mode.html [ Failure ]
Expand Down Expand Up @@ -2389,9 +2387,8 @@ webkit.org/b/190991 imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4
webkit.org/b/190991 imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-persistent-usage-record.https.html [ Skip ]
webkit.org/b/190991 imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-retrieve-destroy-persistent-license.https.html [ Skip ]
webkit.org/b/190991 imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-retrieve-persistent-usage-record.https.html [ Skip ]
# Uncomment when webkit.org/b/266333 is fixed
#webkit.org/b/211840 imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-retrieve-persistent-license.https.html [ Failure ]
#webkit.org/b/211840 imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-destroy-persistent-license.https.html [ Failure ]
webkit.org/b/211840 imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-retrieve-persistent-license.https.html [ Failure ]
webkit.org/b/211840 imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-destroy-persistent-license.https.html [ Failure ]
webkit.org/b/211375 imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted-segmented.https.html [ Skip ]
webkit.org/b/210113 imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-reset-src-after-setmediakeys.https.html [ Failure ]
webkit.org/b/178707 imported/w3c/web-platform-tests/encrypted-media/encrypted-media-default-feature-policy.https.sub.html [ Skip ]
Expand All @@ -2404,34 +2401,29 @@ imported/w3c/web-platform-tests/encrypted-media/clearkey-events-session-closed-e
imported/w3c/web-platform-tests/encrypted-media/clearkey-invalid-license.https.html [ Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-keystatuses.https.html [ Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-keystatuses-multiple-sessions.https.html [ Pass ]
# Uncomment when webkit.org/b/266333 is fixed
#imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted.https.html [ Pass ]
#imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-encrypted-clear.https.html [ Pass ]
#imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-encrypted-clear-sources.https.html [ Pass ]
#imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-events.https.html [ Pass ]
#imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-multikey.https.html [ Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted.https.html [ Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-encrypted-clear.https.html [ Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-encrypted-clear-sources.https.html [ Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-events.https.html [ Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-multikey.https.html [ Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-multikey-sequential.https.html [ Crash Failure Pass ]
# Uncomment when webkit.org/b/266333 is fixed
#imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-multisession.https.html [ Pass ]
#imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-after-src.https.html [ Pass ]
#imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-after-update.https.html [ Pass ]
#imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-onencrypted.https.html [ Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-multisession.https.html [ Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-after-src.https.html [ Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-after-update.https.html [ Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-onencrypted.https.html [ Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-two-videos.https.html [ Crash Failure Pass ]
# Uncomment when webkit.org/b/266333 is fixed
#imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-waitingforkey.https.html [ Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-waitingforkey.https.html [ Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-requestmediakeysystemaccess.https.html [ Crash Failure Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-at-same-time.https.html [ Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys.https.html [ Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-multiple-times-with-different-mediakeys.https.html [ Pass ]
# Uncomment when webkit.org/b/266333 is fixed
#imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-multiple-times-with-the-same-mediakeys.https.html [ Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-multiple-times-with-the-same-mediakeys.https.html [ Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-syntax-mediakeysession.https.html [ Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-syntax-mediakeys.https.html [ Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-syntax-mediakeysystemaccess.https.html [ Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-unique-origin.https.html [ Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-update-disallowed-input.https.html [ Pass ]
# Uncomment when webkit.org/b/266333 is fixed
#imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-waiting-for-a-key.https.html [ Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-waiting-for-a-key.https.html [ Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-not-callable-after-createsession.https.html [ Pass ]
imported/w3c/web-platform-tests/encrypted-media/clearkey-update-non-ascii-input.https.html [ Pass ]

Expand Down Expand Up @@ -3741,41 +3733,6 @@ webkit.org/b/264680 webgl/webgl-visible-after-context-restore.html [ ImageOnlyFa

webkit.org/b/265942 imported/w3c/web-platform-tests/editing/run [ Slow ]

webkit.org/b/266333 fast/canvas/webgl/texImage2D-mse-flipY-false.html [ Failure Crash ]
webkit.org/b/266333 fast/canvas/webgl/texImage2D-mse-flipY-true.html [ Failure Crash ]
webkit.org/b/266333 fast/canvas/webgl/texImage2D-mse-in-dom-flipY-false.html [ Failure Crash ]
webkit.org/b/266333 fast/canvas/webgl/texImage2D-mse-in-dom-flipY-true.html [ Failure Crash ]
webkit.org/b/266333 http/tests/media/media-source/media-source-video-fit-fill.html [ Failure Crash ]
webkit.org/b/266333 http/tests/media/media-source/mediasource-play-then-seek-back-with-remote-control.html [ Failure Crash ]
webkit.org/b/266333 http/tests/media/media-source/mediasource-rvfc.html [ Failure Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-destroy-persistent-license.https.html [ Failure Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-retrieve-persistent-license.https.html [ Failure Timeout Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-clear-encrypted.https.html [ Failure Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-encrypted-clear-sources.https.html [ Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-encrypted-clear.https.html [ Failure Timeout Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-events.https.html [ Failure Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-multikey.https.html [ Failure Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-multisession.https.html [ Failure Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-after-src.https.html [ Pass Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-after-update.https.html [ Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-onencrypted.https.html [ Failure Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-waitingforkey.https.html [ Failure Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-multiple-times-with-the-same-mediakeys.https.html [ Pass Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-waiting-for-a-key.https.html [ Failure Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/media-source/mediasource-activesourcebuffers.html [ Pass Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/media-source/mediasource-append-buffer.html [ Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/media-source/mediasource-appendbuffer-quota-exceeded.html [ Pass Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/media-source/mediasource-appendwindow.html [ Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/media-source/mediasource-avtracks.html [ Failure Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/media-source/mediasource-buffered-seek.html [ Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/media-source/mediasource-buffered.html [ Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/media-source/mediasource-changetype-play-without-codecs-parameter.html [ Pass Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/media-source/mediasource-changetype-play.html [ Failure Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/media-source/mediasource-config-change-mp4-a-bitrate.html [ Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/media-source/mediasource-config-change-mp4-av-audio-bitrate.html [ Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/media-source/mediasource-config-change-mp4-av-framesize.html [ Crash ]
webkit.org/b/266333 imported/w3c/web-platform-tests/media-source/mediasource-config-change-mp4-av-video-bitrate.html [ Crash ]

# End: Common failures between GTK and WPE.

#////////////////////////////////////////////////////////////////////////////////////////
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,8 @@ void MediaSourcePrivateGStreamer::startPlaybackIfHasAllTracks()
Vector<RefPtr<MediaSourceTrackGStreamer>> tracks;
for (auto& privateSourceBuffer : m_sourceBuffers) {
auto sourceBuffer = downcast<SourceBufferPrivateGStreamer>(privateSourceBuffer);
tracks.appendRange(sourceBuffer->tracks().begin(), sourceBuffer->tracks().end());
for (auto& [_, track] : sourceBuffer->tracks())
tracks.append(track);
}
m_playerPrivate.startSource(tracks);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ void SourceBufferPrivateGStreamer::removedFromMediaSource()
{
ASSERT(isMainThread());

for (auto& track : tracks())
for (auto& [_, track] : tracks())
track->remove();
m_hasBeenRemovedFromMediaSource = true;

Expand All @@ -141,7 +141,7 @@ void SourceBufferPrivateGStreamer::flush(TrackID trackId)
return;

ASSERT(m_tracks.contains(trackId));
MediaSourceTrackGStreamer* track = m_tracks.get(trackId);
auto track = m_tracks[trackId];
if (!downcast<MediaSourcePrivateGStreamer>(mediaSource)->hasAllTracks()) {
GST_DEBUG_OBJECT(m_playerPrivate.pipeline(), "Source element has not emitted tracks yet, so we only need to clear the queue. trackId = '%s'", track->stringId().string().utf8().data());
track->clearQueue();
Expand All @@ -166,15 +166,15 @@ void SourceBufferPrivateGStreamer::enqueueSample(Ref<MediaSample>&& sample, Trac
GST_TIME_ARGS(WebCore::toGstClockTime(sample->duration())));

ASSERT(m_tracks.contains(trackId));
MediaSourceTrackGStreamer* track = m_tracks.get(trackId);
auto track = m_tracks[trackId];
track->enqueueObject(adoptGRef(GST_MINI_OBJECT(gstSample.leakRef())));
}

bool SourceBufferPrivateGStreamer::isReadyForMoreSamples(TrackID trackId)
{
ASSERT(isMainThread());
ASSERT(m_tracks.contains(trackId));
MediaSourceTrackGStreamer* track = m_tracks.get(trackId);
auto track = m_tracks[trackId];
bool ret = track->isReadyForMoreSamples();
GST_TRACE_OBJECT(m_playerPrivate.pipeline(), "isReadyForMoreSamples: %s", boolForPrinting(ret));
return ret;
Expand All @@ -184,7 +184,7 @@ void SourceBufferPrivateGStreamer::notifyClientWhenReadyForMoreSamples(TrackID t
{
ASSERT(isMainThread());
ASSERT(m_tracks.contains(trackId));
MediaSourceTrackGStreamer* track = m_tracks.get(trackId);
auto track = m_tracks[trackId];
track->notifyWhenReadyForMoreSamples([protectedThis = Ref { *this }, this, trackId]() mutable {
RunLoop::main().dispatch([protectedThis = WTFMove(protectedThis), this, trackId]() {
if (!m_hasBeenRemovedFromMediaSource)
Expand All @@ -197,7 +197,7 @@ void SourceBufferPrivateGStreamer::allSamplesInTrackEnqueued(TrackID trackId)
{
ASSERT(isMainThread());
ASSERT(m_tracks.contains(trackId));
MediaSourceTrackGStreamer* track = m_tracks.get(trackId);
auto track = m_tracks[trackId];
GST_DEBUG_OBJECT(m_playerPrivate.pipeline(), "Enqueueing EOS for track '%s'", track->stringId().string().utf8().data());
track->enqueueObject(adoptGRef(GST_MINI_OBJECT(gst_event_new_eos())));
}
Expand All @@ -209,21 +209,21 @@ bool SourceBufferPrivateGStreamer::precheckInitializationSegment(const Initializ
GRefPtr<GstCaps> initialCaps = videoTrackInfo->initialCaps();
ASSERT(initialCaps);
if (!m_tracks.contains(trackInfo.track->id()))
m_tracks.add(trackInfo.track->id(), MediaSourceTrackGStreamer::create(TrackPrivateBaseGStreamer::TrackType::Video, trackInfo.track->id(), videoTrackInfo->stringId(), WTFMove(initialCaps)));
m_tracks.try_emplace(trackInfo.track->id(), MediaSourceTrackGStreamer::create(TrackPrivateBaseGStreamer::TrackType::Video, trackInfo.track->id(), videoTrackInfo->stringId(), WTFMove(initialCaps)));
}
for (auto& trackInfo : segment.audioTracks) {
auto* audioTrackInfo = static_cast<AudioTrackPrivateGStreamer*>(trackInfo.track.get());
GRefPtr<GstCaps> initialCaps = audioTrackInfo->initialCaps();
ASSERT(initialCaps);
if (!m_tracks.contains(trackInfo.track->id()))
m_tracks.add(trackInfo.track->id(), MediaSourceTrackGStreamer::create(TrackPrivateBaseGStreamer::TrackType::Audio, trackInfo.track->id(), audioTrackInfo->stringId(), WTFMove(initialCaps)));
m_tracks.try_emplace(trackInfo.track->id(), MediaSourceTrackGStreamer::create(TrackPrivateBaseGStreamer::TrackType::Audio, trackInfo.track->id(), audioTrackInfo->stringId(), WTFMove(initialCaps)));
}
for (auto& trackInfo : segment.textTracks) {
auto* textTrackInfo = static_cast<InbandTextTrackPrivateGStreamer*>(trackInfo.track.get());
GRefPtr<GstCaps> initialCaps = textTrackInfo->initialCaps();
ASSERT(initialCaps);
if (!m_tracks.contains(trackInfo.track->id()))
m_tracks.add(trackInfo.track->id(), MediaSourceTrackGStreamer::create(TrackPrivateBaseGStreamer::TrackType::Text, trackInfo.track->id(), textTrackInfo->stringId(), WTFMove(initialCaps)));
m_tracks.try_emplace(trackInfo.track->id(), MediaSourceTrackGStreamer::create(TrackPrivateBaseGStreamer::TrackType::Text, trackInfo.track->id(), textTrackInfo->stringId(), WTFMove(initialCaps)));
}

return true;
Expand Down Expand Up @@ -313,7 +313,7 @@ size_t SourceBufferPrivateGStreamer::platformMaximumBufferSize() const
bool hasText = false;
size_t bufferSize = 0;

for (auto track : m_tracks.values()) {
for (auto& [_, track] : m_tracks) {
switch (track->type()) {
case TrackPrivateBaseGStreamer::Video:
hasVideo = true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,20 +38,21 @@

#include "ContentType.h"
#include "MediaPlayerPrivateGStreamerMSE.h"
#include "MediaSourceTrackGStreamer.h"
#include "SourceBufferPrivate.h"
#include "SourceBufferPrivateClient.h"
#include "TrackPrivateBaseGStreamer.h"
#include "WebKitMediaSourceGStreamer.h"
#include <optional>
#include <wtf/LoggerHelper.h>
#include <wtf/StdUnorderedMap.h>

namespace WebCore {

using TrackID = uint64_t;

class AppendPipeline;
class MediaSourcePrivateGStreamer;
class MediaSourceTrackGStreamer;

class SourceBufferPrivateGStreamer final : public SourceBufferPrivate {
public:
Expand All @@ -76,7 +77,7 @@ class SourceBufferPrivateGStreamer final : public SourceBufferPrivate {
void didReceiveAllPendingSamples();
void appendParsingFailed();

HashMap<TrackID, RefPtr<MediaSourceTrackGStreamer>>::ValuesIteratorRange tracks() { return m_tracks.values(); }
auto& tracks() const { return m_tracks; }

ContentType type() const { return m_type; }

Expand All @@ -103,7 +104,7 @@ class SourceBufferPrivateGStreamer final : public SourceBufferPrivate {
ContentType m_type;
MediaPlayerPrivateGStreamerMSE& m_playerPrivate;
UniqueRef<AppendPipeline> m_appendPipeline;
HashMap<TrackID, RefPtr<MediaSourceTrackGStreamer>> m_tracks;
StdUnorderedMap<TrackID, RefPtr<MediaSourceTrackGStreamer>> m_tracks;
std::optional<MediaPromise::Producer> m_appendPromise;

#if !RELEASE_LOG_DISABLED
Expand Down

0 comments on commit ad15255

Please sign in to comment.