void S3_HLS_TS_Fill_Remaining_Length()

in S3_HLS_TS.c [283:313]


void S3_HLS_TS_Fill_Remaining_Length(uint32_t data_length) {
    TS_DEBUG("Input Data Length:%d\n", data_length);
    uint8_t length = 4; // base length
    if(ts_header[S3_HLS_TS_ADOPTION_FLAG_POS] & S3_HLS_TS_ADOPTION_FLAG) {
        TS_DEBUG("Has Adoption\n");
        length ++; // do have adoption length field
    }
    
    if(ts_header[S3_HLS_TS_ADOPTION_LENGTH_POS] > 0) {
        TS_DEBUG("Adoption Length: %d\n", ts_header[S3_HLS_TS_ADOPTION_LENGTH_POS]);
        length += ts_header[S3_HLS_TS_ADOPTION_LENGTH_POS]; // do have adoption length
    }
    
    TS_DEBUG("Data + Header Length: %d\n", length + data_length);
    if(S3_HLS_TS_PACKET_SIZE > length + data_length) {
        // need to fill some part
        uint8_t gap = S3_HLS_TS_PACKET_SIZE - length - data_length;
        if(ts_header[S3_HLS_TS_ADOPTION_FLAG_POS] & S3_HLS_TS_ADOPTION_FLAG) {
            // already contains an adoption length field
            ts_header[S3_HLS_TS_ADOPTION_LENGTH_POS] += gap;
        } else {
            // need add an adoption length
            gap--; // due to need add adoption length so minus 1
            ts_header[S3_HLS_TS_ADOPTION_FLAG_POS] |= S3_HLS_TS_ADOPTION_FLAG;
            ts_header[S3_HLS_TS_ADOPTION_LENGTH_POS] = gap;
            if(gap > 0) {
                ts_header[S3_HLS_TS_RANDOM_ACCESS_FLAG_POS] = 0; // mark as no flags
            }
        }
    }
}