size_t TsPayloadPES::ByteSize()

in src/brpc/ts.cpp [628:679]


size_t TsPayloadPES::ByteSize() const {
    size_t sz = 0;
    
    _PES_header_data_length = 0;
    const TsPESStreamId sid = stream_id;

    if (sid != TS_PES_STREAM_ID_PROGRAM_STREAM_MAP
        && sid != TS_PES_STREAM_ID_PADDING_STREAM
        && sid != TS_PES_STREAM_ID_PRIVATE_STREAM2
        && sid != TS_PES_STREAM_ID_ECM_STREAM
        && sid != TS_PES_STREAM_ID_EMM_STREAM
        && sid != TS_PES_STREAM_ID_PROGRAM_STREAM_DIRECTORY
        && sid != TS_PES_STREAM_ID_DSMC_STREAM
        && sid != TS_PES_STREAM_ID_H2221TYPE_E) {
        sz += 6;
        sz += 3;
        const size_t old_sz = sz;

        if (PTS_DTS_flags == 0x2) { sz += 5; }
        else if (PTS_DTS_flags == 0x3) { sz += 10; }
        
        if (ESCR_flag) { sz += 6; }
        if (ES_rate_flag) { sz += 3; }
        if (DSM_trick_mode_flag) { sz += 1; }
        if (additional_copy_info_flag) { sz += 1; }
        if (PES_CRC_flag) { sz += 2; }
        if (PES_extension_flag) {
            sz += 1;
            if (PES_private_data_flag) { sz += 16; }
            if (pack_header_field_flag) { sz += 1 + pack_field_length; }
            if (program_packet_sequence_counter_flag) { sz += 2; }
            if (P_STD_buffer_flag) { sz += 2; }
            if (PES_extension_flag_2) { sz += 1 + PES_extension_field_length; }
        }
        _PES_header_data_length = sz - old_sz;

        sz += nb_stuffings;
        // packet bytes
    } else if (sid == TS_PES_STREAM_ID_PROGRAM_STREAM_MAP
               || sid == TS_PES_STREAM_ID_PRIVATE_STREAM2
               || sid == TS_PES_STREAM_ID_ECM_STREAM
               || sid == TS_PES_STREAM_ID_EMM_STREAM
               || sid == TS_PES_STREAM_ID_PROGRAM_STREAM_DIRECTORY
               || sid == TS_PES_STREAM_ID_DSMC_STREAM
               || sid == TS_PES_STREAM_ID_H2221TYPE_E
        ) {
        // packet bytes
    } else {
        // nb_drop
    }
    return sz;
}