Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/VLC/modules/demux/adaptive/   (VLC Media Plyer ©)  Datei vom 23.9.2026 mit Größe 5 kB image not shown  

Quelle  Streams.hpp   Sprache: C

 

/*
 * Streams.hpp
 *****************************************************************************
 * Copyright (C) 2014 - VideoLAN and VLC authors
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as published
 * by the Free Software Foundation; either version 2.1 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
 *****************************************************************************/

#ifndef STREAM_HPP
#define STREAM_HPP

#include <vlc_common.h>
#include "StreamFormat.hpp"
#include "BlockStreamInterface.hpp"
#include "SegmentTracker.hpp"

#include "plumbing/CommandsQueue.hpp"
#include "plumbing/Demuxer.hpp"
#include "plumbing/FakeESOut.hpp"

#include "Time.hpp"

#include <string>

namespace adaptive
{
    class SegmentTracker;

    namespace http
    {
        class ChunkInterface;
    }

    namespace playlist
    {
        class SegmentChunk;
    }

    using namespace http;
    using namespace playlist;

    class AbstractStream : public BlockStreamInterface,
                           public ExtraFMTInfoInterface,
                           public SegmentTrackerListenerInterface,
                           public DemuxerFactoryInterface
    {
        PREREQ_VIRTUAL(AbstractStream);

    public:
        AbstractStream(demux_t *);
        virtual ~AbstractStream();

        bool init(const StreamFormat &, SegmentTracker *);

        void setLanguage(const std::string &);
        void setDescription(const std::string &);
        vlc_tick_t getMinAheadTime() const;
        Times getFirstTimes() const;
        int esCount() const;
        bool isSelected() const;
        bool isDisabled() const;
        bool isValid() const;
        void setLivePause(bool);
        enum class Status {
            Eof = 0, /* prioritized */
            Discontinuity,
            Demuxed,
            Buffering,
        };
        enum class BufferingStatus {
            End = 0, /* prioritized */
            Suspended,
            Full,
            Ongoing,
            Lessthanmin,
        };
        BufferingStatus bufferize(Times, vlc_tick_t, vlc_tick_t,
                                  vlc_tick_t, bool = false);
        BufferingStatus getBufferAndStatus(const Times &, vlc_tick_t, vlc_tick_t, vlc_tick_t *);
        vlc_tick_t getDemuxedAmount(Times) const;
        bool isBufferingSufficient(Times, vlc_tick_t) const;
        Status dequeue(Times, Times *);

        class StreamPosition
        {
            public:
                StreamPosition();
                Times times;
                uint64_t number;
                double pos;
        };
        virtual bool reactivate(const StreamPosition &);
        virtual bool setPosition(const StreamPosition &, bool);
        bool getMediaPlaybackTimes(vlc_tick_t *, vlc_tick_t *, vlc_tick_t *) const;
        bool getMediaAdvanceAmount(vlc_tick_t *) const;
        bool runUpdates(bool = false);

        /* Used by demuxers fake streams */
        block_t *readNextBlock() override;

        /**/
        void fillExtraFMTInfo( es_format_t * ) const  override;
        void trackerEvent(const TrackerEvent &)  override;

    protected:
        bool seekAble() const;
        void setDisabled(bool);
        virtual block_t *checkBlock(block_t *, bool);
        AbstractDemuxer * createDemux(const StreamFormat &);
        AbstractDemuxer * newDemux(vlc_object_t *, const StreamFormat &,
                                   es_out_t *, AbstractSourceStream *) const  override;
        virtual bool startDemux();
        virtual bool restartDemux();

        virtual void prepareRestart(bool = true);
        bool resetForNewPosition(vlc_tick_t);

        bool contiguous;
        bool segmentgap;
        bool discontinuity;
        bool needrestart;
        bool inrestart;
        bool demuxfirstchunk;

        bool mightalwaysstartfromzero;

        demux_t *p_realdemux;
        StreamFormat format;

        SegmentTracker *segmentTracker;

        ChunkInterface * getNextChunk() const;
        ChunkInterface *currentChunk;
        bool eof;
        std::string language;
        std::string description;
        struct
        {
            unsigned width;
            unsigned height;
        } currentrep;

        AbstractDemuxer *demuxer;
        AbstractSourceStream *demuxersource;
        FakeESOut::LockedFakeEsOut fakeEsOut();
        FakeESOut::LockedFakeEsOut fakeEsOut() const;
        FakeESOut *fakeesout; /* to intercept/proxy what is sent from demuxstream */
        mutable vlc_mutex_t lock; /* lock for everything accessed by dequeuing */

        SegmentTimes startTimeContext;
        SegmentTimes currentTimeContext;
        SegmentTimes prevEndTimeContext;
        vlc_tick_t currentDuration;
        uint64_t currentSequence;

        SrcID nextSrcID = SrcID::dummy();

    private:
        void declaredCodecs();
        BufferingStatus doBufferize(Times, vlc_tick_t, vlc_tick_t,
                                    vlc_tick_t, bool);
        BufferingStatus last_buffer_status;
        bool valid;
        bool disabled;
        unsigned notfound_sequence;
    };

    class AbstractStreamFactory
    {
        public:
            virtual ~AbstractStreamFactory() {}
            virtual AbstractStream *create(demux_t*, const StreamFormat &,
                                           SegmentTracker *) const = 0;
    };
}
#endif // STREAMS_HPP

Messung
CHZG
8410010094

¤ Dauer der Verarbeitung: 0.4 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover


Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.