content/media/webm/WebMWriter.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 /* This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
     4  * You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 #ifndef WebMWriter_h_
     7 #define WebMWriter_h_
     9 #include "ContainerWriter.h"
    11 namespace mozilla {
    13 class EbmlComposer;
    15 // Vorbis meta data structure
    16 class VorbisMetadata : public TrackMetadataBase
    17 {
    18 public:
    19   nsTArray<uint8_t> mData;
    20   int32_t mChannels;
    21   int32_t mBitDepth;
    22   float mSamplingFrequency;
    23   MetadataKind GetKind() const MOZ_OVERRIDE { return METADATA_VORBIS; }
    24 };
    26 // VP8 meta data structure
    27 class VP8Metadata : public TrackMetadataBase
    28 {
    29 public:
    30   int32_t mWidth;
    31   int32_t mHeight;
    32   int32_t mDisplayWidth;
    33   int32_t mDisplayHeight;
    34   int32_t mEncodedFrameRate;
    35   MetadataKind GetKind() const MOZ_OVERRIDE { return METADATA_VP8; }
    36 };
    38 /**
    39  * WebM writer helper
    40  * This class accepts encoder to set audio or video meta data or
    41  * encoded data to ebml Composer, and get muxing data through GetContainerData.
    42  * The ctor/dtor run in the MediaRecorder thread, others run in MediaEncoder thread.
    43  */
    44 class WebMWriter : public ContainerWriter
    45 {
    46 public:
    47   // aTrackTypes indicate this muxer should multiplex into Video only or A/V foramt.
    48   // Run in MediaRecorder thread
    49   WebMWriter(uint32_t aTrackTypes);
    50   // WriteEncodedTrack inserts raw packets into WebM stream.
    51   nsresult WriteEncodedTrack(const EncodedFrameContainer &aData,
    52                              uint32_t aFlags = 0) MOZ_OVERRIDE;
    54   // GetContainerData outputs multiplexing data.
    55   // aFlags indicates the muxer should enter into finished stage and flush out
    56   // queue data.
    57   nsresult GetContainerData(nsTArray<nsTArray<uint8_t> >* aOutputBufs,
    58                             uint32_t aFlags = 0) MOZ_OVERRIDE;
    60   // Assign metadata into muxer
    61   nsresult SetMetadata(TrackMetadataBase* aMetadata) MOZ_OVERRIDE;
    63 private:
    64   nsAutoPtr<EbmlComposer> mEbmlComposer;
    66   // Indicate what kind of meta data needed in the writer.
    67   // If this value become 0, it means writer can start to generate header.
    68   uint8_t mMetadataRequiredFlag;
    69 };
    71 }
    72 #endif

mercurial