OLD | NEW |
| (Empty) |
1 // Copyright (c) 2011 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 | |
5 #ifndef MEDIA_BASE_H264_BITSTREAM_CONVERTER_H_ | |
6 #define MEDIA_BASE_H264_BITSTREAM_CONVERTER_H_ | |
7 | |
8 #include "base/basictypes.h" | |
9 #include "media/base/media_export.h" | |
10 | |
11 namespace media { | |
12 | |
13 // H264BitstreamConverter is a class to convert H.264 bitstream from | |
14 // MP4 format (as specified in ISO/IEC 14496-15) into H.264 bytestream | |
15 // (as specified in ISO/IEC 14496-10 Annex B). | |
16 class MEDIA_EXPORT H264BitstreamConverter { | |
17 public: | |
18 H264BitstreamConverter(); | |
19 ~H264BitstreamConverter(); | |
20 | |
21 // Parses the global AVCDecoderConfigurationRecord from the file format's | |
22 // headers. Converter will remember the field length from the configuration | |
23 // headers after this. | |
24 // | |
25 // Parameters | |
26 // configuration_record | |
27 // Pointer to buffer containing AVCDecoderConfigurationRecord. | |
28 // configuration_record_size | |
29 // Size of the buffer in bytes. | |
30 // | |
31 // Returns | |
32 // Required buffer size for AVCDecoderConfigurationRecord when converted | |
33 // to bytestream format, or 0 if could not determine the configuration | |
34 // from the input buffer. | |
35 uint32 ParseConfigurationAndCalculateSize(const uint8* configuration_record, | |
36 uint32 configuration_record_size); | |
37 | |
38 // Calculates needed buffer size for the bitstream converted into bytestream. | |
39 // Lightweight implementation that does not do the actual conversion. | |
40 // | |
41 // Parameters | |
42 // configuration_record | |
43 // Pointer to buffer containing AVCDecoderConfigurationRecord. | |
44 // configuration_record_size | |
45 // Size of the buffer in bytes. | |
46 // | |
47 // Returns | |
48 // Required buffer size for the input NAL unit buffer when converted | |
49 // to bytestream format, or 0 if could not determine the configuration | |
50 // from the input buffer. | |
51 uint32 CalculateNeededOutputBufferSize(const uint8* input, | |
52 uint32 input_size) const; | |
53 | |
54 // ConvertParameterSetsToByteStream converts the | |
55 // AVCDecoderConfigurationRecord from the MP4 headers to bytestream format. | |
56 // Client is responsible for making sure the output buffer is large enough | |
57 // to hold the output data. Client can precalculate the needed output buffer | |
58 // size by using ParseConfigurationAndCalculateSize. | |
59 // | |
60 // In case of failed conversion object H264BitstreamConverter may have written | |
61 // some bytes to buffer pointed by pinput but user should ignore those bytes. | |
62 // None of the outputs should be considered valid. | |
63 // | |
64 // Parameters | |
65 // pinput | |
66 // Pointer to buffer containing AVCDecoderConfigurationRecord. | |
67 // input_size | |
68 // Size of the buffer in bytes. | |
69 // poutput | |
70 // Pointer to buffer where the output should be written to. | |
71 // poutput_size (i/o) | |
72 // Pointer to the size of the output buffer. Will contain the number of | |
73 // bytes written to output after successful call. | |
74 // | |
75 // Returns | |
76 // true if successful conversion | |
77 // false if conversion not successful (poutput_size will hold the amount | |
78 // of converted data) | |
79 bool ConvertAVCDecoderConfigurationRecordToByteStream(const uint8* input, | |
80 uint32 input_size, | |
81 uint8* output, | |
82 uint32* output_size); | |
83 | |
84 // ConvertNalUnitStreamToByteStream converts the NAL unit from MP4 format | |
85 // to bytestream format. Client is responsible for making sure the output | |
86 // buffer is large enough to hold the output data. Client can precalculate the | |
87 // needed output buffer size by using CalculateNeededOutputBufferSize. | |
88 // | |
89 // In case of failed conversion object H264BitstreamConverter may have written | |
90 // some bytes to buffer pointed by pinput but user should ignore those bytes. | |
91 // None of the outputs should be considered valid. | |
92 // | |
93 // Parameters | |
94 // pinput | |
95 // Pointer to buffer containing AVCDecoderConfigurationRecord. | |
96 // input_size | |
97 // Size of the buffer in bytes. | |
98 // poutput | |
99 // Pointer to buffer where the output should be written to. | |
100 // poutput_size (i/o) | |
101 // Pointer to the size of the output buffer. Will contain the number of | |
102 // bytes written to output after successful call. | |
103 // | |
104 // Returns | |
105 // true if successful conversion | |
106 // false if conversion not successful (poutput_size will hold the amount | |
107 // of converted data) | |
108 bool ConvertNalUnitStreamToByteStream(const uint8* input, uint32 input_size, | |
109 uint8* output, uint32* output_size); | |
110 | |
111 private: | |
112 // Flag for indicating whether global parameter sets have been processed. | |
113 bool configuration_processed_; | |
114 // Flag for indicating whether next NAL unit starts new access unit. | |
115 bool first_nal_unit_in_access_unit_; | |
116 // Variable to hold interleaving field's length in bytes. | |
117 uint8 nal_unit_length_field_width_; | |
118 | |
119 DISALLOW_COPY_AND_ASSIGN(H264BitstreamConverter); | |
120 }; | |
121 | |
122 } // namespace media | |
123 | |
124 #endif // MEDIA_BASE_H264_BITSTREAM_CONVERTER_H_ | |
125 | |
OLD | NEW |