1 // Copyright 2014 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef MEDIA_FILTERS_FFMPEG_AAC_BITSTREAM_CONVERTER_H_
6 #define MEDIA_FILTERS_FFMPEG_AAC_BITSTREAM_CONVERTER_H_
10 #include "base/memory/raw_ptr.h"
11 #include "media/base/media_export.h"
12 #include "media/filters/ffmpeg_bitstream_converter.h"
14 // Forward declarations for FFmpeg datatypes used.
15 struct AVCodecParameters;
20 // Bitstream converter that adds ADTS headers to AAC frames.
21 class MEDIA_EXPORT FFmpegAACBitstreamConverter
22 : public FFmpegBitstreamConverter {
24 enum { kAdtsHeaderSize = 7 };
26 // The |stream_codec_parameters| will be used during conversion and should be
27 // the AVCodecParameters for the stream sourcing these packets. A reference to
28 // |stream_codec_parameters| is retained, so it must outlive this class.
29 explicit FFmpegAACBitstreamConverter(
30 AVCodecParameters* stream_codec_parameters);
32 FFmpegAACBitstreamConverter(const FFmpegAACBitstreamConverter&) = delete;
33 FFmpegAACBitstreamConverter& operator=(const FFmpegAACBitstreamConverter&) =
36 ~FFmpegAACBitstreamConverter() override;
38 // FFmpegBitstreamConverter implementation.
39 // Uses FFmpeg allocation methods for buffer allocation to ensure
40 // compatibility with FFmpeg's memory management.
41 bool ConvertPacket(AVPacket* packet) override;
44 // Variable to hold a pointer to memory where we can access the global
45 // data from the FFmpeg file format's global headers.
46 raw_ptr<AVCodecParameters> stream_codec_parameters_;
48 bool header_generated_;
49 uint8_t hdr_[kAdtsHeaderSize];
52 int sample_rate_index_;
53 int channel_configuration_;
59 #endif // MEDIA_FILTERS_FFMPEG_AAC_BITSTREAM_CONVERTER_H_