in S3_HLS_Buffer_Mgr.c [135:170]
int32_t S3_HLS_Clear_Buffer(S3_HLS_BUFFER_CTX* buffer_ctx, S3_HLS_BUFFER_PART_CTX* part_ctx) {
BUFFER_FLUSH_DEBUG("Clear Buffer!\n");
if(NULL == buffer_ctx || NULL == part_ctx)
return S3_HLS_INVALID_PARAMETER;
if(NULL == part_ctx->second_part_start && 0 < part_ctx->second_part_length)
return S3_HLS_INVALID_PARAMETER;
// Only support clear buffer in sequence, not support clear buffer in middle of used buffer
printf("Clear Buffer %p, %d, %p, %d\n", part_ctx->first_part_start, part_ctx->first_part_length, part_ctx->second_part_start, part_ctx->second_part_length);
if(buffer_ctx->used_start != part_ctx->first_part_start) {
printf("Clear buffer not match start! %p, %p\n", buffer_ctx->used_start, part_ctx->first_part_start);
}
uint8_t* next_start = (NULL == part_ctx->second_part_start) ? (part_ctx->first_part_start + part_ctx->first_part_length) : (part_ctx->second_part_start + part_ctx->second_part_length);
if(next_start > buffer_ctx->used_start) {
buffer_ctx->used_length -= (next_start - buffer_ctx->used_start);
} else if(next_start < buffer_ctx->used_start) {
buffer_ctx->used_length -= buffer_ctx->total_length - (buffer_ctx->used_start - next_start);
}
buffer_ctx->used_start = next_start;
/*
uint32_t release_length = (part_ctx->first_part_length + part_ctx->second_part_length);
buffer_ctx->used_length -= release_length;
buffer_ctx->used_start += release_length;
*/
printf("Buffer Info: %p, %u, %p, %d\n", buffer_ctx->used_start, buffer_ctx->used_length, buffer_ctx->buffer_start, buffer_ctx->total_length);
if(buffer_ctx->used_start >= buffer_ctx->buffer_start + buffer_ctx->total_length) {
buffer_ctx->used_start -= buffer_ctx->total_length;
}
printf("New Buffer Start: %p\n", buffer_ctx->used_start);
return S3_HLS_OK;
}