ffmpeg_aac_bitstream_converter.h 1.9 KB

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