40 #define RTPENC_AV1_SEARCH_SEQ_HEADER 1
44 int last_packet_of_frame = 0;
46 const uint8_t *obu_ptr = frame_buf;
47 int start_new_packet = 0;
48 unsigned int num_obus = 0;
50 uint8_t *pkt_ptr =
NULL;
52 const uint8_t *curr_obu_ptr =
NULL;
53 uint32_t curr_elem_size = 0;
54 int curr_obu_hdr = -1;
55 int curr_obu_ext = -1;
56 const uint8_t *last_obu_ptr =
NULL;
57 uint32_t last_elem_size = 0;
58 int last_obu_hdr = -1;
59 int last_obu_ext = -1;
88 #if RTPENC_AV1_SEARCH_SEQ_HEADER
98 const uint8_t *
buf_ptr = frame_buf;
99 while (rem_size > 0) {
119 buf_ptr += num_lebs + obu_size;
120 rem_size -= num_lebs + obu_size;
122 #else // RTPENC_AV1_SEARCH_SEQ_HEADER
125 #endif // RTPENC_AV1_SEARCH_SEQ_HEADER
128 pkt_ptr = rtp_ctx->
buf + 1;
130 #ifdef RTPENC_AV1_VERBOSE_TRACE
141 uint8_t obu_hdr = *obu_ptr++;
155 ext_byte = *obu_ptr++;
178 if (obu_size > 0xfffffffd) {
194 last_packet_of_frame = 1;
195 goto flush_last_packet;
202 if ((last_obu_ext >= 0) && (curr_obu_ext != last_obu_ext)) {
203 start_new_packet = 1;
207 last_obu_ptr = curr_obu_ptr;
208 last_elem_size = curr_elem_size;
209 last_obu_hdr = curr_obu_hdr;
210 last_obu_ext = curr_obu_ext;
212 curr_obu_ptr = obu_ptr;
213 curr_elem_size = obu_size + 1 + ((ext_byte >= 0) ? 1 : 0);
214 curr_obu_hdr = obu_hdr;
215 curr_obu_ext = ext_byte;
220 unsigned int first_elem_with_size = last_elem_size +
calc_leb_size(last_elem_size);
223 if (!last_packet_of_frame && (first_elem_with_size + 10 < rem_pkt_size)) {
224 num_lebs =
write_leb(pkt_ptr, last_elem_size);
226 rem_pkt_size -= num_lebs;
228 if ((num_obus >= 3) && (last_packet_of_frame || (first_elem_with_size <= rem_pkt_size))) {
230 num_lebs =
write_leb(pkt_ptr, last_elem_size);
232 rem_pkt_size -= num_lebs;
235 start_new_packet = 1;
239 if (last_obu_hdr >= 0) {
240 *pkt_ptr++ = last_obu_hdr;
243 if (last_obu_ext >= 0) {
244 *pkt_ptr++ = last_obu_ext;
250 memcpy(pkt_ptr, last_obu_ptr, last_elem_size);
251 pkt_ptr += last_elem_size;
252 rem_pkt_size -= last_elem_size;
256 if (start_new_packet || last_packet_of_frame) {
260 rtp_ctx->
buf[0] = aggr_hdr;
262 #ifdef RTPENC_AV1_VERBOSE_TRACE
274 pkt_ptr = rtp_ctx->
buf + 1;
279 if (last_packet_of_frame) {
285 if ((curr_elem_size > rem_pkt_size) ||
286 ((num_obus >= 3) && (curr_elem_size +
calc_leb_size(curr_elem_size)) > rem_pkt_size)) {
287 uint32_t frag_size = rem_pkt_size;
294 frag_size -= num_lebs;
300 rem_pkt_size -= num_lebs;
304 *pkt_ptr++ = curr_obu_hdr;
307 if (curr_obu_ext >= 0) {
308 *pkt_ptr++ = curr_obu_ext;
320 memcpy(pkt_ptr, curr_obu_ptr, rem_pkt_size);
321 pkt_ptr += rem_pkt_size;
322 curr_obu_ptr += rem_pkt_size;
323 curr_elem_size -= rem_pkt_size;
330 rtp_ctx->
buf[0] = aggr_hdr;
332 #ifdef RTPENC_AV1_VERBOSE_TRACE
343 pkt_ptr = rtp_ctx->
buf + 1;
347 }
while (curr_elem_size > rem_pkt_size);
348 start_new_packet = 0;
353 last_packet_of_frame = 1;
354 goto flush_last_packet;