// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef MEDIA_FILTERS_FFMPEG_H265_TO_ANNEX_B_BITSTREAM_CONVERTER_H_ #define MEDIA_FILTERS_FFMPEG_H265_TO_ANNEX_B_BITSTREAM_CONVERTER_H_ #include "base/basictypes.h" #include "base/memory/scoped_ptr.h" #include "media/base/media_export.h" #include "media/filters/ffmpeg_bitstream_converter.h" #include "media/formats/mp4/hevc.h" // Forward declarations for FFmpeg datatypes used. struct AVCodecContext; struct AVPacket; namespace media { // Bitstream converter that converts H.265 bitstream based FFmpeg packets into // H.265 Annex B bytestream format. class MEDIA_EXPORT FFmpegH265ToAnnexBBitstreamConverter : public FFmpegBitstreamConverter { public: // The |stream_codec_context| will be used during conversion and should be the // AVCodecContext for the stream sourcing these packets. A reference to // |stream_codec_context| is retained, so it must outlive this class. explicit FFmpegH265ToAnnexBBitstreamConverter( AVCodecContext* stream_codec_context); ~FFmpegH265ToAnnexBBitstreamConverter() override; // FFmpegBitstreamConverter implementation. bool ConvertPacket(AVPacket* packet) override; private: scoped_ptr hevc_config_; // Variable to hold a pointer to memory where we can access the global // data from the FFmpeg file format's global headers. AVCodecContext* stream_codec_context_; DISALLOW_COPY_AND_ASSIGN(FFmpegH265ToAnnexBBitstreamConverter); }; } // namespace media #endif // MEDIA_FILTERS_FFMPEG_H265_TO_ANNEX_B_BITSTREAM_CONVERTER_H_