Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(454)

Unified Diff: media/filters/h264_to_annex_b_bitstream_converter.h

Issue 264743016: Change H264AnnexBBitstreamConverter to use AVCDecoderConfigurationRecord. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Address CR comments. Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/filters/h264_to_annex_b_bitstream_converter.h
diff --git a/media/filters/h264_to_annex_b_bitstream_converter.h b/media/filters/h264_to_annex_b_bitstream_converter.h
index afb204af98d5581dbcc7f9d7a6bbba18c10c9557..b20200620416f74a82201e901065668c566bbc15 100644
--- a/media/filters/h264_to_annex_b_bitstream_converter.h
+++ b/media/filters/h264_to_annex_b_bitstream_converter.h
@@ -5,11 +5,17 @@
#ifndef MEDIA_FILTERS_H264_TO_ANNEX_B_BITSTREAM_CONVERTER_H_
#define MEDIA_FILTERS_H264_TO_ANNEX_B_BITSTREAM_CONVERTER_H_
+#include <vector>
+
#include "base/basictypes.h"
#include "media/base/media_export.h"
namespace media {
+namespace mp4 {
+struct AVCDecoderConfigurationRecord;
+}
+
// H264ToAnnexBBitstreamConverter is a class to convert H.264 bitstream from
// MP4 format (as specified in ISO/IEC 14496-15) into H.264 bytestream
// (as specified in ISO/IEC 14496-10 Annex B).
@@ -27,13 +33,23 @@ class MEDIA_EXPORT H264ToAnnexBBitstreamConverter {
// Pointer to buffer containing AVCDecoderConfigurationRecord.
// configuration_record_size
// Size of the buffer in bytes.
+ // avc_config
+ // Pointer to place the parsed AVCDecoderConfigurationRecord data into.
//
// Returns
// Required buffer size for AVCDecoderConfigurationRecord when converted
// to bytestream format, or 0 if could not determine the configuration
- // from the input buffer.
- uint32 ParseConfigurationAndCalculateSize(const uint8* configuration_record,
- uint32 configuration_record_size);
+ // from the input buffer. |avc_config| only contains valid data when
+ // a value > 0 is returned from this function.
+ uint32 ParseConfigurationAndCalculateSize(
+ const uint8* configuration_record,
+ int configuration_record_size,
+ mp4::AVCDecoderConfigurationRecord* avc_config);
+
+ // Returns the buffer size needed to store the parameter sets in |avc_config|
+ // in Annex B form.
+ uint32 GetConfigSize(
+ const mp4::AVCDecoderConfigurationRecord& avc_config) const;
// Calculates needed buffer size for the bitstream converted into bytestream.
// Lightweight implementation that does not do the actual conversion.
@@ -55,31 +71,26 @@ class MEDIA_EXPORT H264ToAnnexBBitstreamConverter {
// AVCDecoderConfigurationRecord from the MP4 headers to bytestream format.
// Client is responsible for making sure the output buffer is large enough
// to hold the output data. Client can precalculate the needed output buffer
- // size by using ParseConfigurationAndCalculateSize.
- //
- // In case of failed conversion object H264BitstreamConverter may have written
- // some bytes to buffer pointed by pinput but user should ignore those bytes.
- // None of the outputs should be considered valid.
+ // size by using GetConfigSize().
//
// Parameters
- // pinput
- // Pointer to buffer containing AVCDecoderConfigurationRecord.
- // input_size
- // Size of the buffer in bytes.
- // poutput
+ // avc_config
+ // The AVCDecoderConfigurationRecord that contains the parameter sets that
+ // will be written to |output|.
+ // output
// Pointer to buffer where the output should be written to.
- // poutput_size (i/o)
+ // output_size (i/o)
// Pointer to the size of the output buffer. Will contain the number of
// bytes written to output after successful call.
//
// Returns
- // true if successful conversion
- // false if conversion not successful (poutput_size will hold the amount
+ // true if successful conversion|
+ // false if conversion not successful (|output_size| will hold the amount
// of converted data)
- bool ConvertAVCDecoderConfigToByteStream(const uint8* input,
- uint32 input_size,
- uint8* output,
- uint32* output_size);
+ bool ConvertAVCDecoderConfigToByteStream(
+ const mp4::AVCDecoderConfigurationRecord& avc_config,
+ uint8* output,
+ uint32* output_size);
// ConvertNalUnitStreamToByteStream converts the NAL unit from MP4 format
// to bytestream format. Client is responsible for making sure the output
@@ -91,24 +102,35 @@ class MEDIA_EXPORT H264ToAnnexBBitstreamConverter {
// None of the outputs should be considered valid.
//
// Parameters
- // pinput
+ // input
// Pointer to buffer containing AVCDecoderConfigurationRecord.
// input_size
// Size of the buffer in bytes.
- // poutput
+ // output
// Pointer to buffer where the output should be written to.
- // poutput_size (i/o)
+ // output_size (i/o)
// Pointer to the size of the output buffer. Will contain the number of
// bytes written to output after successful call.
//
// Returns
// true if successful conversion
- // false if conversion not successful (poutput_size will hold the amount
+ // false if conversion not successful (output_size will hold the amount
// of converted data)
bool ConvertNalUnitStreamToByteStream(const uint8* input, uint32 input_size,
uint8* output, uint32* output_size);
private:
+ // Writes Annex B start code and |param_set| to |*out|.
+ // |*out| - Is the memory location to write the parameter set.
+ // |*out_size| - Number of bytes available for the parameter set.
+ // Returns true if the start code and param set were successfully
+ // written. On a successful write, |*out| is updated to point to the first
+ // byte after the data that was written. |*out_size| is updated to reflect
+ // the new number of bytes left in |*out|.
+ bool WriteParamSet(const std::vector<uint8>& param_set,
+ uint8** out,
+ uint32* out_size) const;
+
// Flag for indicating whether global parameter sets have been processed.
bool configuration_processed_;
// Flag for indicating whether next NAL unit starts new access unit.
@@ -122,4 +144,3 @@ class MEDIA_EXPORT H264ToAnnexBBitstreamConverter {
} // namespace media
#endif // MEDIA_FILTERS_H264_TO_ANNEX_B_BITSTREAM_CONVERTER_H_
-
« no previous file with comments | « media/filters/ffmpeg_h264_to_annex_b_bitstream_converter.cc ('k') | media/filters/h264_to_annex_b_bitstream_converter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698