OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "media/mp4/avc.h" | 5 #include "media/mp4/avc.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "media/mp4/box_definitions.h" | 10 #include "media/mp4/box_definitions.h" |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 buffer->insert(buffer->end(), kAnnexBStartCode, | 52 buffer->insert(buffer->end(), kAnnexBStartCode, |
53 kAnnexBStartCode + kAnnexBStartCodeSize); | 53 kAnnexBStartCode + kAnnexBStartCodeSize); |
54 buffer->insert(buffer->end(), temp.begin() + pos, | 54 buffer->insert(buffer->end(), temp.begin() + pos, |
55 temp.begin() + pos + nal_size); | 55 temp.begin() + pos + nal_size); |
56 pos += nal_size; | 56 pos += nal_size; |
57 } | 57 } |
58 return pos == temp.size(); | 58 return pos == temp.size(); |
59 } | 59 } |
60 | 60 |
61 // static | 61 // static |
62 bool AVC::InsertParameterSets(const AVCDecoderConfigurationRecord& avc_config, | 62 bool AVC::ConvertParameterSets(const AVCDecoderConfigurationRecord& avc_config, |
63 std::vector<uint8>* buffer) { | 63 std::vector<uint8>* buffer) { |
| 64 DCHECK(buffer->empty()); |
| 65 buffer->clear(); |
64 int total_size = 0; | 66 int total_size = 0; |
65 for (size_t i = 0; i < avc_config.sps_list.size(); i++) | 67 for (size_t i = 0; i < avc_config.sps_list.size(); i++) |
66 total_size += avc_config.sps_list[i].size() + kAnnexBStartCodeSize; | 68 total_size += avc_config.sps_list[i].size() + kAnnexBStartCodeSize; |
67 for (size_t i = 0; i < avc_config.pps_list.size(); i++) | 69 for (size_t i = 0; i < avc_config.pps_list.size(); i++) |
68 total_size += avc_config.pps_list[i].size() + kAnnexBStartCodeSize; | 70 total_size += avc_config.pps_list[i].size() + kAnnexBStartCodeSize; |
69 | 71 buffer->reserve(total_size); |
70 std::vector<uint8> temp; | |
71 temp.reserve(total_size); | |
72 | 72 |
73 for (size_t i = 0; i < avc_config.sps_list.size(); i++) { | 73 for (size_t i = 0; i < avc_config.sps_list.size(); i++) { |
74 temp.insert(temp.end(), kAnnexBStartCode, | 74 buffer->insert(buffer->end(), kAnnexBStartCode, |
75 kAnnexBStartCode + kAnnexBStartCodeSize); | 75 kAnnexBStartCode + kAnnexBStartCodeSize); |
76 temp.insert(temp.end(), avc_config.sps_list[i].begin(), | 76 buffer->insert(buffer->end(), avc_config.sps_list[i].begin(), |
77 avc_config.sps_list[i].end()); | 77 avc_config.sps_list[i].end()); |
78 } | 78 } |
79 | 79 |
80 for (size_t i = 0; i < avc_config.pps_list.size(); i++) { | 80 for (size_t i = 0; i < avc_config.pps_list.size(); i++) { |
81 temp.insert(temp.end(), kAnnexBStartCode, | 81 buffer->insert(buffer->end(), kAnnexBStartCode, |
82 kAnnexBStartCode + kAnnexBStartCodeSize); | 82 kAnnexBStartCode + kAnnexBStartCodeSize); |
83 temp.insert(temp.end(), avc_config.pps_list[i].begin(), | 83 buffer->insert(buffer->end(), avc_config.pps_list[i].begin(), |
84 avc_config.pps_list[i].end()); | 84 avc_config.pps_list[i].end()); |
85 } | 85 } |
86 | |
87 buffer->insert(buffer->begin(), temp.begin(), temp.end()); | |
88 return true; | 86 return true; |
89 } | 87 } |
90 | 88 |
91 // static | 89 // static |
92 ChannelLayout AVC::ConvertAACChannelCountToChannelLayout(int count) { | 90 ChannelLayout AVC::ConvertAACChannelCountToChannelLayout(int count) { |
93 switch (count) { | 91 switch (count) { |
94 case 1: | 92 case 1: |
95 return CHANNEL_LAYOUT_MONO; | 93 return CHANNEL_LAYOUT_MONO; |
96 case 2: | 94 case 2: |
97 return CHANNEL_LAYOUT_STEREO; | 95 return CHANNEL_LAYOUT_STEREO; |
98 case 3: | 96 case 3: |
99 return CHANNEL_LAYOUT_SURROUND; | 97 return CHANNEL_LAYOUT_SURROUND; |
100 case 4: | 98 case 4: |
101 return CHANNEL_LAYOUT_4_0; | 99 return CHANNEL_LAYOUT_4_0; |
102 case 5: | 100 case 5: |
103 return CHANNEL_LAYOUT_5_0; | 101 return CHANNEL_LAYOUT_5_0; |
104 case 6: | 102 case 6: |
105 return CHANNEL_LAYOUT_5_1; | 103 return CHANNEL_LAYOUT_5_1; |
106 case 8: | 104 case 8: |
107 return CHANNEL_LAYOUT_7_1; | 105 return CHANNEL_LAYOUT_7_1; |
108 default: | 106 default: |
109 return CHANNEL_LAYOUT_UNSUPPORTED; | 107 return CHANNEL_LAYOUT_UNSUPPORTED; |
110 } | 108 } |
111 } | 109 } |
112 | 110 |
113 } // namespace mp4 | 111 } // namespace mp4 |
114 } // namespace media | 112 } // namespace media |
OLD | NEW |