35 const uint8_t *sps_pps, uint32_t sps_pps_size,
38 uint32_t offset = *poutbuf_size;
39 uint8_t nal_header_size = offset ? 3 : 4;
42 *poutbuf_size += sps_pps_size + in_size + nal_header_size;
49 memcpy(*poutbuf + offset, sps_pps, sps_pps_size);
50 memcpy(*poutbuf + sps_pps_size + nal_header_size + offset, in, in_size);
52 AV_WB32(*poutbuf + sps_pps_size, 1);
54 (*poutbuf + offset + sps_pps_size)[0] =
55 (*poutbuf + offset + sps_pps_size)[1] = 0;
56 (*poutbuf + offset + sps_pps_size)[2] = 1;
65 uint64_t total_size = 0;
67 sps_seen = 0, pps_seen = 0;
69 static const uint8_t nalu_header[4] = { 0, 0, 0, 1 };
70 int length_size = (*extradata++ & 0x3) + 1;
76 unit_nb = *extradata++ & 0x1f;
78 unit_nb = *extradata++;
91 total_size += unit_size + 4;
92 if (total_size > INT_MAX - padding ||
93 extradata + 2 + unit_size > avctx->
extradata +
98 if ((err =
av_reallocp(&out, total_size + padding)) < 0)
100 memcpy(out + total_size - unit_size - 4, nalu_header, 4);
101 memcpy(out + total_size - unit_size, extradata + 2, unit_size);
102 extradata += 2 + unit_size;
104 if (!unit_nb && !sps_done++) {
105 unit_nb = *extradata++;
116 "Warning: SPS NALU missing or invalid. "
117 "The resulting stream may not play.\n");
121 "Warning: PPS NALU missing or invalid. "
122 "The resulting stream may not play.\n");
133 uint8_t **poutbuf,
int *poutbuf_size,
134 const uint8_t *buf,
int buf_size,
140 uint32_t cumul_size = 0;
141 const uint8_t *buf_end = buf + buf_size;
147 *poutbuf_size = buf_size;
175 unit_type = *buf & 0x1f;
177 if (buf + nal_size > buf_end || nal_size < 0)
189 NULL, 0, buf, nal_size) < 0)
197 }
while (cumul_size < buf_size);