michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-*/ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this file, michael@0: * You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #ifndef OmxTrackEncoder_h_ michael@0: #define OmxTrackEncoder_h_ michael@0: michael@0: #include "TrackEncoder.h" michael@0: michael@0: namespace android { michael@0: class OMXVideoEncoder; michael@0: class OMXAudioEncoder; michael@0: } michael@0: michael@0: /** michael@0: * There are two major classes defined in file OmxTrackEncoder; michael@0: * OmxVideoTrackEncoder and OmxAudioTrackEncoder, the video and audio track michael@0: * encoder for media type AVC/H.264 and AAC. OMXCodecWrapper wraps and controls michael@0: * an instance of MediaCodec, defined in libstagefright, runs on Android Jelly michael@0: * Bean platform. michael@0: */ michael@0: michael@0: namespace mozilla { michael@0: michael@0: class OmxVideoTrackEncoder: public VideoTrackEncoder michael@0: { michael@0: public: michael@0: OmxVideoTrackEncoder() michael@0: : VideoTrackEncoder() michael@0: {} michael@0: michael@0: already_AddRefed GetMetadata() MOZ_OVERRIDE; michael@0: michael@0: nsresult GetEncodedTrack(EncodedFrameContainer& aData) MOZ_OVERRIDE; michael@0: michael@0: protected: michael@0: nsresult Init(int aWidth, int aHeight, michael@0: int aDisplayWidth, int aDisplayHeight, michael@0: TrackRate aTrackRate) MOZ_OVERRIDE; michael@0: michael@0: private: michael@0: nsAutoPtr mEncoder; michael@0: }; michael@0: michael@0: class OmxAudioTrackEncoder : public AudioTrackEncoder michael@0: { michael@0: public: michael@0: OmxAudioTrackEncoder() michael@0: : AudioTrackEncoder() michael@0: {} michael@0: michael@0: already_AddRefed GetMetadata() = 0; michael@0: michael@0: nsresult GetEncodedTrack(EncodedFrameContainer& aData) MOZ_OVERRIDE; michael@0: michael@0: protected: michael@0: nsresult Init(int aChannels, int aSamplingRate) = 0; michael@0: michael@0: // Append encoded frames to aContainer. michael@0: nsresult AppendEncodedFrames(EncodedFrameContainer& aContainer); michael@0: michael@0: nsAutoPtr mEncoder; michael@0: }; michael@0: michael@0: class OmxAACAudioTrackEncoder MOZ_FINAL : public OmxAudioTrackEncoder michael@0: { michael@0: public: michael@0: OmxAACAudioTrackEncoder() michael@0: : OmxAudioTrackEncoder() michael@0: {} michael@0: michael@0: already_AddRefed GetMetadata() MOZ_OVERRIDE; michael@0: michael@0: protected: michael@0: nsresult Init(int aChannels, int aSamplingRate) MOZ_OVERRIDE; michael@0: }; michael@0: michael@0: class OmxAMRAudioTrackEncoder MOZ_FINAL : public OmxAudioTrackEncoder michael@0: { michael@0: public: michael@0: OmxAMRAudioTrackEncoder() michael@0: : OmxAudioTrackEncoder() michael@0: {} michael@0: michael@0: enum { michael@0: AMR_NB_SAMPLERATE = 8000, michael@0: }; michael@0: already_AddRefed GetMetadata() MOZ_OVERRIDE; michael@0: michael@0: protected: michael@0: nsresult Init(int aChannels, int aSamplingRate) MOZ_OVERRIDE; michael@0: }; michael@0: michael@0: } michael@0: #endif