mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 18:18:12 +00:00

With these changes, the seek bar can be used, but only to seek to the start of the file. Seeking to anywhere else in the file will cause an error in the demuxer. The timestamp label that was previously invisible now has its text set according to either the playback or seek slider's position.
39 lines
1,013 B
C++
39 lines
1,013 B
C++
/*
|
|
* Copyright (c) 2022, Gregory Bertilson <zaggy1024@gmail.com>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/NonnullOwnPtr.h>
|
|
#include <LibCore/Object.h>
|
|
#include <LibVideo/DecoderError.h>
|
|
#include <LibVideo/Sample.h>
|
|
#include <LibVideo/Track.h>
|
|
|
|
namespace Video {
|
|
|
|
class Demuxer {
|
|
public:
|
|
virtual ~Demuxer() = default;
|
|
|
|
virtual DecoderErrorOr<Vector<Track>> get_tracks_for_type(TrackType type) = 0;
|
|
|
|
DecoderErrorOr<NonnullOwnPtr<VideoSample>> get_next_video_sample_for_track(Track track)
|
|
{
|
|
VERIFY(track.type() == TrackType::Video);
|
|
auto sample = TRY(get_next_sample_for_track(track));
|
|
VERIFY(sample->is_video_sample());
|
|
return sample.release_nonnull<VideoSample>();
|
|
}
|
|
|
|
virtual DecoderErrorOr<void> seek_to_most_recent_keyframe(Track track, Time timestamp) = 0;
|
|
|
|
virtual DecoderErrorOr<Time> duration() = 0;
|
|
|
|
protected:
|
|
virtual DecoderErrorOr<NonnullOwnPtr<Sample>> get_next_sample_for_track(Track track) = 0;
|
|
};
|
|
|
|
}
|