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

Side by Side Diff: webrtc/common_video/h264/sps_parser.cc

Issue 2728093002: Optimize ParseRbsp method in H264 bitstream parser. (Closed)
Patch Set: Remove unused includes Created 3 years, 9 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
« no previous file with comments | « webrtc/common_video/h264/pps_parser.cc ('k') | webrtc/common_video/h264/sps_vui_rewriter.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include "webrtc/common_video/h264/sps_parser.h" 11 #include "webrtc/common_video/h264/sps_parser.h"
12 12
13 #include <memory> 13 #include <memory>
14 #include <vector>
14 15
15 #include "webrtc/common_video/h264/h264_common.h" 16 #include "webrtc/common_video/h264/h264_common.h"
16 #include "webrtc/base/bitbuffer.h" 17 #include "webrtc/base/bitbuffer.h"
17 #include "webrtc/base/bytebuffer.h"
18 #include "webrtc/base/logging.h" 18 #include "webrtc/base/logging.h"
19 19
20 typedef rtc::Optional<webrtc::SpsParser::SpsState> OptionalSps; 20 typedef rtc::Optional<webrtc::SpsParser::SpsState> OptionalSps;
21 21
22 #define RETURN_EMPTY_ON_FAIL(x) \ 22 #define RETURN_EMPTY_ON_FAIL(x) \
23 if (!(x)) { \ 23 if (!(x)) { \
24 return OptionalSps(); \ 24 return OptionalSps(); \
25 } 25 }
26 26
27 namespace webrtc { 27 namespace webrtc {
28 28
29 // General note: this is based off the 02/2014 version of the H.264 standard. 29 // General note: this is based off the 02/2014 version of the H.264 standard.
30 // You can find it on this page: 30 // You can find it on this page:
31 // http://www.itu.int/rec/T-REC-H.264 31 // http://www.itu.int/rec/T-REC-H.264
32 32
33 // Unpack RBSP and parse SPS state from the supplied buffer. 33 // Unpack RBSP and parse SPS state from the supplied buffer.
34 rtc::Optional<SpsParser::SpsState> SpsParser::ParseSps(const uint8_t* data, 34 rtc::Optional<SpsParser::SpsState> SpsParser::ParseSps(const uint8_t* data,
35 size_t length) { 35 size_t length) {
36 std::unique_ptr<rtc::Buffer> unpacked_buffer = H264::ParseRbsp(data, length); 36 std::vector<uint8_t> unpacked_buffer = H264::ParseRbsp(data, length);
37 rtc::BitBuffer bit_buffer(unpacked_buffer->data(), unpacked_buffer->size()); 37 rtc::BitBuffer bit_buffer(unpacked_buffer.data(), unpacked_buffer.size());
38 return ParseSpsUpToVui(&bit_buffer); 38 return ParseSpsUpToVui(&bit_buffer);
39 } 39 }
40 40
41 rtc::Optional<SpsParser::SpsState> SpsParser::ParseSpsUpToVui( 41 rtc::Optional<SpsParser::SpsState> SpsParser::ParseSpsUpToVui(
42 rtc::BitBuffer* buffer) { 42 rtc::BitBuffer* buffer) {
43 // Now, we need to use a bit buffer to parse through the actual AVC SPS 43 // Now, we need to use a bit buffer to parse through the actual AVC SPS
44 // format. See Section 7.3.2.1.1 ("Sequence parameter set data syntax") of the 44 // format. See Section 7.3.2.1.1 ("Sequence parameter set data syntax") of the
45 // H.264 standard for a complete description. 45 // H.264 standard for a complete description.
46 // Since we only care about resolution, we ignore the majority of fields, but 46 // Since we only care about resolution, we ignore the majority of fields, but
47 // we still have to actively parse through a lot of the data, since many of 47 // we still have to actively parse through a lot of the data, since many of
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 } 212 }
213 } 213 }
214 // Subtract the crop for each dimension. 214 // Subtract the crop for each dimension.
215 sps.width -= (frame_crop_left_offset + frame_crop_right_offset); 215 sps.width -= (frame_crop_left_offset + frame_crop_right_offset);
216 sps.height -= (frame_crop_top_offset + frame_crop_bottom_offset); 216 sps.height -= (frame_crop_top_offset + frame_crop_bottom_offset);
217 217
218 return OptionalSps(sps); 218 return OptionalSps(sps);
219 } 219 }
220 220
221 } // namespace webrtc 221 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/common_video/h264/pps_parser.cc ('k') | webrtc/common_video/h264/sps_vui_rewriter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698