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

Side by Side Diff: media/base/h264_bitstream_converter.h

Issue 10690140: Reorganize bitstream converter classes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase again Created 8 years, 5 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | media/base/h264_bitstream_converter.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(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
OLDNEW
« no previous file with comments | « no previous file | media/base/h264_bitstream_converter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698