content/media/MediaDecoderOwner.h

Fri, 16 Jan 2015 04:50:19 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Fri, 16 Jan 2015 04:50:19 +0100
branch
TOR_BUG_9701
changeset 13
44a2da4a2ab2
permissions
-rw-r--r--

Replace accessor implementation with direct member state manipulation, by
request https://trac.torproject.org/projects/tor/ticket/9701#comment:32

     1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* vim:set ts=2 sw=2 sts=2 et cindent: */
     3 /* This Source Code Form is subject to the terms of the Mozilla Public
     4  * License, v. 2.0. If a copy of the MPL was not distributed with this
     5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 #ifndef MediaDecoderOwner_h_
     7 #define MediaDecoderOwner_h_
     8 #include "AbstractMediaDecoder.h"
    10 namespace mozilla {
    12 class VideoFrameContainer;
    14 namespace dom {
    15 class HTMLMediaElement;
    16 }
    18 class MediaDecoderOwner
    19 {
    20 public:
    21   // Called by the media decoder to indicate that the download has stalled
    22   // (no data has arrived for a while).
    23   virtual void DownloadStalled() = 0;
    25   // Dispatch a synchronous event to the decoder owner
    26   virtual nsresult DispatchEvent(const nsAString& aName) = 0;
    28   // Dispatch an asynchronous event to the decoder owner
    29   virtual nsresult DispatchAsyncEvent(const nsAString& aName) = 0;
    31   /**
    32    * Fires a timeupdate event. If aPeriodic is true, the event will only
    33    * be fired if we've not fired a timeupdate event (for any reason) in the
    34    * last 250ms, as required by the spec when the current time is periodically
    35    * increasing during playback.
    36    */
    37   virtual void FireTimeUpdate(bool aPeriodic) = 0;
    39   // Get the HTMLMediaElement object if the decoder is being used from an
    40   // HTML media element, and null otherwise.
    41   virtual dom::HTMLMediaElement* GetMediaElement()
    42   {
    43     return nullptr;
    44   }
    46   // Return true if decoding should be paused
    47   virtual bool GetPaused() = 0;
    49   // Called by the video decoder object, on the main thread,
    50   // when it has read the metadata containing video dimensions,
    51   // etc.
    52   virtual void MetadataLoaded(int aChannels,
    53                               int aRate,
    54                               bool aHasAudio,
    55                               bool aHasVideo,
    56                               const MetadataTags* aTags) = 0;
    58   // Called by the video decoder object, on the main thread,
    59   // when it has read the first frame of the video
    60   // aResourceFullyLoaded should be true if the resource has been
    61   // fully loaded and the caller will call ResourceLoaded next.
    62   virtual void FirstFrameLoaded(bool aResourceFullyLoaded) = 0;
    64   // Called by the video decoder object, on the main thread,
    65   // when the resource has completed downloading.
    66   virtual void ResourceLoaded() = 0;
    68   // Called by the video decoder object, on the main thread,
    69   // when the resource has a network error during loading.
    70   virtual void NetworkError() = 0;
    72   // Called by the video decoder object, on the main thread, when the
    73   // resource has a decode error during metadata loading or decoding.
    74   virtual void DecodeError() = 0;
    76   // Called by the video decoder object, on the main thread, when the
    77   // resource load has been cancelled.
    78   virtual void LoadAborted() = 0;
    80   // Called by the video decoder object, on the main thread,
    81   // when the video playback has ended.
    82   virtual void PlaybackEnded() = 0;
    84   // Called by the video decoder object, on the main thread,
    85   // when the resource has started seeking.
    86   virtual void SeekStarted() = 0;
    88   // Called by the video decoder object, on the main thread,
    89   // when the resource has completed seeking.
    90   virtual void SeekCompleted() = 0;
    92   // Called by the media stream, on the main thread, when the download
    93   // has been suspended by the cache or because the element itself
    94   // asked the decoder to suspend the download.
    95   virtual void DownloadSuspended() = 0;
    97   // Called by the media stream, on the main thread, when the download
    98   // has been resumed by the cache or because the element itself
    99   // asked the decoder to resumed the download.
   100   // If aForceNetworkLoading is True, ignore the fact that the download has
   101   // previously finished. We are downloading the middle of the media after
   102   // having downloaded the end, we need to notify the element a download in
   103   // ongoing.
   104   virtual void DownloadResumed(bool aForceNetworkLoading = false) = 0;
   106   // Called by the media decoder to indicate whether the media cache has
   107   // suspended the channel.
   108   virtual void NotifySuspendedByCache(bool aIsSuspended) = 0;
   110   // called to notify that the principal of the decoder's media resource has changed.
   111   virtual void NotifyDecoderPrincipalChanged() = 0;
   113   // The status of the next frame which might be available from the decoder
   114   enum NextFrameStatus {
   115     // The next frame of audio/video is available
   116     NEXT_FRAME_AVAILABLE,
   117     // The next frame of audio/video is unavailable because the decoder
   118     // is paused while it buffers up data
   119     NEXT_FRAME_UNAVAILABLE_BUFFERING,
   120     // The next frame of audio/video is unavailable for some other reasons
   121     NEXT_FRAME_UNAVAILABLE,
   122     // Sentinel value
   123     NEXT_FRAME_UNINITIALIZED
   124   };
   126   // Called by the decoder when some data has been downloaded or
   127   // buffering/seeking has ended. aNextFrameAvailable is true when
   128   // the data for the next frame is available. This method will
   129   // decide whether to set the ready state to HAVE_CURRENT_DATA,
   130   // HAVE_FUTURE_DATA or HAVE_ENOUGH_DATA.
   131   virtual void UpdateReadyStateForData(NextFrameStatus aNextFrame) = 0;
   133   // Called by the media decoder and the video frame to get the
   134   // ImageContainer containing the video data.
   135   virtual VideoFrameContainer* GetVideoFrameContainer() = 0;
   137   // Called by the media decoder object, on the main thread,
   138   // when the connection between Rtsp server and client gets lost.
   139   virtual void ResetConnectionState() = 0;
   140 };
   142 }
   144 #endif

mercurial