in S3_HLS_TS.c [164:227]
int32_t S3_HLS_TS_Write_To_Buffer(S3_HLS_BUFFER_CTX* ctx) {
uint32_t ret = 0;
uint32_t pid = ts_header[S3_HLS_TS_PID_HIGH_POS] & 0x1F;
pid *= 256;
pid += ts_header[S3_HLS_TS_PID_LOW_POS];
ts_header[S3_HLS_TS_COUNTER_INDEX] &= 0xF0;
switch(pid) {
case S3_HLS_Video_PID:
ts_header[S3_HLS_TS_COUNTER_INDEX] |= (m_ts_video_counter & 0x0F);
break;
case S3_HLS_Audio_PID:
ts_header[S3_HLS_TS_COUNTER_INDEX] |= (m_ts_audio_counter & 0x0F);
break;
}
// write to buffer
uint8_t* first_part_start = ts_header;
uint32_t first_part_length = 4;
uint8_t* second_part_start = NULL;
uint32_t second_part_length = 0;
if(ts_header[S3_HLS_TS_ADOPTION_FLAG_POS] & S3_HLS_TS_ADOPTION_FLAG) { // do have adoption field
first_part_length++; // adoption length field
if(ts_header[S3_HLS_TS_ADOPTION_LENGTH_POS] > 0) {
if(ts_header[S3_HLS_TS_PCR_FLAG_POS] & S3_HLS_TS_PCR_FLAG) {
first_part_length += 7; // adoption flags 1 + pcr 6
} else {
first_part_length += 1; // adoption flags 1
}
}
if(ts_header[S3_HLS_TS_ADOPTION_LENGTH_POS] > first_part_length - 5) {
// need to fill remaining fields
second_part_start = const_fill_word;
second_part_length = ts_header[S3_HLS_TS_ADOPTION_LENGTH_POS] - (first_part_length - 5);
}
}
ret = S3_HLS_Put_To_Buffer(ctx, first_part_start, first_part_length);
if(0 > ret)
return ret;
int32_t length = ret;
ret = S3_HLS_Put_To_Buffer(ctx, second_part_start, second_part_length);
if(0 > ret)
return ret;
length += ret;
S3_HLS_TS_Reset_Header_Info();
switch(pid) {
case S3_HLS_Video_PID:
m_ts_video_counter++;
break;
case S3_HLS_Audio_PID:
m_ts_audio_counter++;
break;
}
return length;
}