13
13
#include < utility>
14
14
15
15
#include " common_video/h264/h264_common.h"
16
+ #ifndef DISABLE_H265
17
+ #include " common_video/h265/h265_common.h"
18
+ #endif
16
19
#include " modules/video_coding/include/video_codec_interface.h"
17
20
#include " modules/video_coding/include/video_error_codes.h"
18
21
#include " modules/video_coding/utility/vp8_header_parser.h"
@@ -322,19 +325,8 @@ int32_t VideoEncoderWrapper::HandleReturnCode(JNIEnv* jni,
322
325
RTPFragmentationHeader VideoEncoderWrapper::ParseFragmentationHeader (
323
326
rtc::ArrayView<const uint8_t > buffer) {
324
327
RTPFragmentationHeader header;
325
- #ifndef DISABLE_H265
326
- if (codec_settings_.codecType == kVideoCodecH264
327
- || codec_settings_.codecType == kVideoCodecH265 ) {
328
- if (codec_settings_.codecType == kVideoCodecH264 ) {
329
- h264_bitstream_parser_.ParseBitstream (buffer.data (), buffer.size ());
330
- } else if (codec_settings_.codecType == kVideoCodecH265 ) {
331
- h265_bitstream_parser_.ParseBitstream (buffer.data (), buffer.size ());
332
- }
333
- #else
334
328
if (codec_settings_.codecType == kVideoCodecH264 ) {
335
- h264_bitstream_parser_.ParseBitstream (buffer.data (), buffer.size ());
336
- #endif
337
-
329
+ h264_bitstream_parser_.ParseBitstream (buffer.data (), buffer.size ());
338
330
// For H.264 search for start codes.
339
331
const std::vector<H264::NaluIndex> nalu_idxs =
340
332
H264::FindNaluIndices (buffer.data (), buffer.size ());
@@ -349,7 +341,27 @@ RTPFragmentationHeader VideoEncoderWrapper::ParseFragmentationHeader(
349
341
header.fragmentationOffset [i] = nalu_idxs[i].payload_start_offset ;
350
342
header.fragmentationLength [i] = nalu_idxs[i].payload_size ;
351
343
}
352
- } else {
344
+ }
345
+ #ifndef DISABLE_H265
346
+ else if (codec_settings_.codecType == kVideoCodecH265 ) {
347
+ h265_bitstream_parser_.ParseBitstream (buffer.data (), buffer.size ());
348
+ // For H.265 search for start codes.
349
+ const std::vector<H265::NaluIndex> nalu_idxs =
350
+ H265::FindNaluIndices (buffer.data (), buffer.size ());
351
+ if (nalu_idxs.empty ()) {
352
+ RTC_LOG (LS_ERROR) << " Start code is not found!" ;
353
+ RTC_LOG (LS_ERROR) << " Data:" << buffer[0 ] << " " << buffer[1 ] << " "
354
+ << buffer[2 ] << " " << buffer[3 ] << " " << buffer[4 ]
355
+ << " " << buffer[5 ];
356
+ }
357
+ header.VerifyAndAllocateFragmentationHeader (nalu_idxs.size ());
358
+ for (size_t i = 0 ; i < nalu_idxs.size (); i++) {
359
+ header.fragmentationOffset [i] = nalu_idxs[i].payload_start_offset ;
360
+ header.fragmentationLength [i] = nalu_idxs[i].payload_size ;
361
+ }
362
+ }
363
+ #endif
364
+ else {
353
365
// Generate a header describing a single fragment.
354
366
header.VerifyAndAllocateFragmentationHeader (1 );
355
367
header.fragmentationOffset [0 ] = 0 ;
0 commit comments