Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  TimedPacketizer.h   Sprache: C

 
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-*/
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */


#ifndef DOM_MEDIA_TIMEPACKETIZER_H_
#define DOM_MEDIA_TIMEPACKETIZER_H_

#include "AudioPacketizer.h"
#include "TimeUnits.h"

namespace mozilla {
/**
 * This class wraps an AudioPacketizer and provides packets of audio with
 * timestamps.
 */

template <typename InputType, typename OutputType>
class TimedPacketizer {
 public:
  TimedPacketizer(uint32_t aPacketSize, uint32_t aChannels,
                  int64_t aInitialTick, int64_t aBase)
      : mPacketizer(aPacketSize, aChannels),
        mTimeStamp(media::TimeUnit(aInitialTick, aBase)),
        mBase(aBase) {}

  void Input(const InputType* aFrames, uint32_t aFrameCount) {
    mPacketizer.Input(aFrames, aFrameCount);
  }

  media::TimeUnit Output(OutputType* aOutputBuffer) {
    MOZ_ASSERT(mPacketizer.PacketsAvailable());
    media::TimeUnit pts = mTimeStamp;
    mPacketizer.Output(aOutputBuffer);
    mTimeStamp += media::TimeUnit(mPacketizer.mPacketSize, mBase);
    return pts;
  }

  media::TimeUnit Drain(OutputType* aOutputBuffer, uint32_t& aWritten) {
    MOZ_ASSERT(!mPacketizer.PacketsAvailable(),
               "Consume all packets before calling drain");
    media::TimeUnit pts = mTimeStamp;
    aWritten = mPacketizer.Output(aOutputBuffer);
    mTimeStamp += media::TimeUnit(mPacketizer.mPacketSize, mBase);
    return pts;
  }

  // Call this when a discontinuity in input has been detected, e.g. based on
  // the pts of input packets.
  void Discontinuity(int64_t aNewTick) {
    MOZ_ASSERT(!mPacketizer.FramesAvailable(),
               "Drain before enqueueing discontinuous audio");
    mTimeStamp = media::TimeUnit(aNewTick, mBase);
  }

  void Clear() { mPacketizer.Clear(); }

  uint32_t PacketSize() const { return mPacketizer.mPacketSize; }

  uint32_t ChannelCount() const { return mPacketizer.mChannels; }

  uint32_t PacketsAvailable() const { return mPacketizer.PacketsAvailable(); }

  uint32_t FramesAvailable() const { return mPacketizer.FramesAvailable(); }

 private:
  AudioPacketizer<InputType, OutputType> mPacketizer;
  media::TimeUnit mTimeStamp;
  uint64_t mBase;
};

}  // namespace mozilla

#endif  // DOM_MEDIA_TIMEPACKETIZER_H_

Messung V0.5
C=92 H=98 G=94

¤ Dauer der Verarbeitung: 0.1 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

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.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge