You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1676 lines
50KB

  1. /*
  2. * This file is part of FFmpeg.
  3. *
  4. * FFmpeg is free software; you can redistribute it and/or
  5. * modify it under the terms of the GNU Lesser General Public
  6. * License as published by the Free Software Foundation; either
  7. * version 2.1 of the License, or (at your option) any later version.
  8. *
  9. * FFmpeg is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12. * Lesser General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU Lesser General Public
  15. * License along with FFmpeg; if not, write to the Free Software
  16. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  17. */
  18. #include "libavutil/attributes.h"
  19. #include "libavutil/avassert.h"
  20. #include "bytestream.h"
  21. #include "cbs.h"
  22. #include "cbs_internal.h"
  23. #include "cbs_h264.h"
  24. #include "cbs_h265.h"
  25. #include "golomb.h"
  26. #include "h264.h"
  27. #include "h264_sei.h"
  28. #include "h2645_parse.h"
  29. #include "hevc.h"
  30. #include "hevc_sei.h"
  31. static int cbs_read_ue_golomb(CodedBitstreamContext *ctx, GetBitContext *gbc,
  32. const char *name, const int *subscripts,
  33. uint32_t *write_to,
  34. uint32_t range_min, uint32_t range_max)
  35. {
  36. uint32_t value;
  37. int position, i, j;
  38. unsigned int k;
  39. char bits[65];
  40. position = get_bits_count(gbc);
  41. for (i = 0; i < 32; i++) {
  42. if (get_bits_left(gbc) < i + 1) {
  43. av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid ue-golomb code at "
  44. "%s: bitstream ended.\n", name);
  45. return AVERROR_INVALIDDATA;
  46. }
  47. k = get_bits1(gbc);
  48. bits[i] = k ? '1' : '0';
  49. if (k)
  50. break;
  51. }
  52. if (i >= 32) {
  53. av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid ue-golomb code at "
  54. "%s: more than 31 zeroes.\n", name);
  55. return AVERROR_INVALIDDATA;
  56. }
  57. value = 1;
  58. for (j = 0; j < i; j++) {
  59. k = get_bits1(gbc);
  60. bits[i + j + 1] = k ? '1' : '0';
  61. value = value << 1 | k;
  62. }
  63. bits[i + j + 1] = 0;
  64. --value;
  65. if (ctx->trace_enable)
  66. ff_cbs_trace_syntax_element(ctx, position, name, subscripts,
  67. bits, value);
  68. if (value < range_min || value > range_max) {
  69. av_log(ctx->log_ctx, AV_LOG_ERROR, "%s out of range: "
  70. "%"PRIu32", but must be in [%"PRIu32",%"PRIu32"].\n",
  71. name, value, range_min, range_max);
  72. return AVERROR_INVALIDDATA;
  73. }
  74. *write_to = value;
  75. return 0;
  76. }
  77. static int cbs_read_se_golomb(CodedBitstreamContext *ctx, GetBitContext *gbc,
  78. const char *name, const int *subscripts,
  79. int32_t *write_to,
  80. int32_t range_min, int32_t range_max)
  81. {
  82. int32_t value;
  83. int position, i, j;
  84. unsigned int k;
  85. uint32_t v;
  86. char bits[65];
  87. position = get_bits_count(gbc);
  88. for (i = 0; i < 32; i++) {
  89. if (get_bits_left(gbc) < i + 1) {
  90. av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid se-golomb code at "
  91. "%s: bitstream ended.\n", name);
  92. return AVERROR_INVALIDDATA;
  93. }
  94. k = get_bits1(gbc);
  95. bits[i] = k ? '1' : '0';
  96. if (k)
  97. break;
  98. }
  99. if (i >= 32) {
  100. av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid se-golomb code at "
  101. "%s: more than 31 zeroes.\n", name);
  102. return AVERROR_INVALIDDATA;
  103. }
  104. v = 1;
  105. for (j = 0; j < i; j++) {
  106. k = get_bits1(gbc);
  107. bits[i + j + 1] = k ? '1' : '0';
  108. v = v << 1 | k;
  109. }
  110. bits[i + j + 1] = 0;
  111. if (v & 1)
  112. value = -(int32_t)(v / 2);
  113. else
  114. value = v / 2;
  115. if (ctx->trace_enable)
  116. ff_cbs_trace_syntax_element(ctx, position, name, subscripts,
  117. bits, value);
  118. if (value < range_min || value > range_max) {
  119. av_log(ctx->log_ctx, AV_LOG_ERROR, "%s out of range: "
  120. "%"PRId32", but must be in [%"PRId32",%"PRId32"].\n",
  121. name, value, range_min, range_max);
  122. return AVERROR_INVALIDDATA;
  123. }
  124. *write_to = value;
  125. return 0;
  126. }
  127. static int cbs_write_ue_golomb(CodedBitstreamContext *ctx, PutBitContext *pbc,
  128. const char *name, const int *subscripts,
  129. uint32_t value,
  130. uint32_t range_min, uint32_t range_max)
  131. {
  132. int len;
  133. if (value < range_min || value > range_max) {
  134. av_log(ctx->log_ctx, AV_LOG_ERROR, "%s out of range: "
  135. "%"PRIu32", but must be in [%"PRIu32",%"PRIu32"].\n",
  136. name, value, range_min, range_max);
  137. return AVERROR_INVALIDDATA;
  138. }
  139. av_assert0(value != UINT32_MAX);
  140. len = av_log2(value + 1);
  141. if (put_bits_left(pbc) < 2 * len + 1)
  142. return AVERROR(ENOSPC);
  143. if (ctx->trace_enable) {
  144. char bits[65];
  145. int i;
  146. for (i = 0; i < len; i++)
  147. bits[i] = '0';
  148. bits[len] = '1';
  149. for (i = 0; i < len; i++)
  150. bits[len + i + 1] = (value + 1) >> (len - i - 1) & 1 ? '1' : '0';
  151. bits[len + len + 1] = 0;
  152. ff_cbs_trace_syntax_element(ctx, put_bits_count(pbc),
  153. name, subscripts, bits, value);
  154. }
  155. put_bits(pbc, len, 0);
  156. if (len + 1 < 32)
  157. put_bits(pbc, len + 1, value + 1);
  158. else
  159. put_bits32(pbc, value + 1);
  160. return 0;
  161. }
  162. static int cbs_write_se_golomb(CodedBitstreamContext *ctx, PutBitContext *pbc,
  163. const char *name, const int *subscripts,
  164. int32_t value,
  165. int32_t range_min, int32_t range_max)
  166. {
  167. int len;
  168. uint32_t uvalue;
  169. if (value < range_min || value > range_max) {
  170. av_log(ctx->log_ctx, AV_LOG_ERROR, "%s out of range: "
  171. "%"PRId32", but must be in [%"PRId32",%"PRId32"].\n",
  172. name, value, range_min, range_max);
  173. return AVERROR_INVALIDDATA;
  174. }
  175. av_assert0(value != INT32_MIN);
  176. if (value == 0)
  177. uvalue = 0;
  178. else if (value > 0)
  179. uvalue = 2 * (uint32_t)value - 1;
  180. else
  181. uvalue = 2 * (uint32_t)-value;
  182. len = av_log2(uvalue + 1);
  183. if (put_bits_left(pbc) < 2 * len + 1)
  184. return AVERROR(ENOSPC);
  185. if (ctx->trace_enable) {
  186. char bits[65];
  187. int i;
  188. for (i = 0; i < len; i++)
  189. bits[i] = '0';
  190. bits[len] = '1';
  191. for (i = 0; i < len; i++)
  192. bits[len + i + 1] = (uvalue + 1) >> (len - i - 1) & 1 ? '1' : '0';
  193. bits[len + len + 1] = 0;
  194. ff_cbs_trace_syntax_element(ctx, put_bits_count(pbc),
  195. name, subscripts, bits, value);
  196. }
  197. put_bits(pbc, len, 0);
  198. if (len + 1 < 32)
  199. put_bits(pbc, len + 1, uvalue + 1);
  200. else
  201. put_bits32(pbc, uvalue + 1);
  202. return 0;
  203. }
  204. #define HEADER(name) do { \
  205. ff_cbs_trace_header(ctx, name); \
  206. } while (0)
  207. #define CHECK(call) do { \
  208. err = (call); \
  209. if (err < 0) \
  210. return err; \
  211. } while (0)
  212. #define FUNC_NAME(rw, codec, name) cbs_ ## codec ## _ ## rw ## _ ## name
  213. #define FUNC_H264(rw, name) FUNC_NAME(rw, h264, name)
  214. #define FUNC_H265(rw, name) FUNC_NAME(rw, h265, name)
  215. #define SUBSCRIPTS(subs, ...) (subs > 0 ? ((int[subs + 1]){ subs, __VA_ARGS__ }) : NULL)
  216. #define u(width, name, range_min, range_max) \
  217. xu(width, name, current->name, range_min, range_max, 0)
  218. #define ub(width, name) \
  219. xu(width, name, current->name, 0, MAX_UINT_BITS(width), 0)
  220. #define flag(name) ub(1, name)
  221. #define ue(name, range_min, range_max) \
  222. xue(name, current->name, range_min, range_max, 0)
  223. #define i(width, name, range_min, range_max) \
  224. xi(width, name, current->name, range_min, range_max, 0)
  225. #define ib(width, name) \
  226. xi(width, name, current->name, MIN_INT_BITS(width), MAX_INT_BITS(width), 0)
  227. #define se(name, range_min, range_max) \
  228. xse(name, current->name, range_min, range_max, 0)
  229. #define us(width, name, range_min, range_max, subs, ...) \
  230. xu(width, name, current->name, range_min, range_max, subs, __VA_ARGS__)
  231. #define ubs(width, name, subs, ...) \
  232. xu(width, name, current->name, 0, MAX_UINT_BITS(width), subs, __VA_ARGS__)
  233. #define flags(name, subs, ...) \
  234. xu(1, name, current->name, 0, 1, subs, __VA_ARGS__)
  235. #define ues(name, range_min, range_max, subs, ...) \
  236. xue(name, current->name, range_min, range_max, subs, __VA_ARGS__)
  237. #define is(width, name, range_min, range_max, subs, ...) \
  238. xi(width, name, current->name, range_min, range_max, subs, __VA_ARGS__)
  239. #define ibs(width, name, subs, ...) \
  240. xi(width, name, current->name, MIN_INT_BITS(width), MAX_INT_BITS(width), subs, __VA_ARGS__)
  241. #define ses(name, range_min, range_max, subs, ...) \
  242. xse(name, current->name, range_min, range_max, subs, __VA_ARGS__)
  243. #define fixed(width, name, value) do { \
  244. av_unused uint32_t fixed_value = value; \
  245. xu(width, name, fixed_value, value, value, 0); \
  246. } while (0)
  247. #define READ
  248. #define READWRITE read
  249. #define RWContext GetBitContext
  250. #define xu(width, name, var, range_min, range_max, subs, ...) do { \
  251. uint32_t value = range_min; \
  252. CHECK(ff_cbs_read_unsigned(ctx, rw, width, #name, \
  253. SUBSCRIPTS(subs, __VA_ARGS__), \
  254. &value, range_min, range_max)); \
  255. var = value; \
  256. } while (0)
  257. #define xue(name, var, range_min, range_max, subs, ...) do { \
  258. uint32_t value = range_min; \
  259. CHECK(cbs_read_ue_golomb(ctx, rw, #name, \
  260. SUBSCRIPTS(subs, __VA_ARGS__), \
  261. &value, range_min, range_max)); \
  262. var = value; \
  263. } while (0)
  264. #define xi(width, name, var, range_min, range_max, subs, ...) do { \
  265. int32_t value = range_min; \
  266. CHECK(ff_cbs_read_signed(ctx, rw, width, #name, \
  267. SUBSCRIPTS(subs, __VA_ARGS__), \
  268. &value, range_min, range_max)); \
  269. var = value; \
  270. } while (0)
  271. #define xse(name, var, range_min, range_max, subs, ...) do { \
  272. int32_t value = range_min; \
  273. CHECK(cbs_read_se_golomb(ctx, rw, #name, \
  274. SUBSCRIPTS(subs, __VA_ARGS__), \
  275. &value, range_min, range_max)); \
  276. var = value; \
  277. } while (0)
  278. #define infer(name, value) do { \
  279. current->name = value; \
  280. } while (0)
  281. static int cbs_h2645_read_more_rbsp_data(GetBitContext *gbc)
  282. {
  283. int bits_left = get_bits_left(gbc);
  284. if (bits_left > 8)
  285. return 1;
  286. if (show_bits(gbc, bits_left) == 1 << (bits_left - 1))
  287. return 0;
  288. return 1;
  289. }
  290. #define more_rbsp_data(var) ((var) = cbs_h2645_read_more_rbsp_data(rw))
  291. #define byte_alignment(rw) (get_bits_count(rw) % 8)
  292. #define allocate(name, size) do { \
  293. name ## _ref = av_buffer_allocz(size + \
  294. AV_INPUT_BUFFER_PADDING_SIZE); \
  295. if (!name ## _ref) \
  296. return AVERROR(ENOMEM); \
  297. name = name ## _ref->data; \
  298. } while (0)
  299. #define FUNC(name) FUNC_H264(READWRITE, name)
  300. #include "cbs_h264_syntax_template.c"
  301. #undef FUNC
  302. #define FUNC(name) FUNC_H265(READWRITE, name)
  303. #include "cbs_h265_syntax_template.c"
  304. #undef FUNC
  305. #undef READ
  306. #undef READWRITE
  307. #undef RWContext
  308. #undef xu
  309. #undef xi
  310. #undef xue
  311. #undef xse
  312. #undef infer
  313. #undef more_rbsp_data
  314. #undef byte_alignment
  315. #undef allocate
  316. #define WRITE
  317. #define READWRITE write
  318. #define RWContext PutBitContext
  319. #define xu(width, name, var, range_min, range_max, subs, ...) do { \
  320. uint32_t value = var; \
  321. CHECK(ff_cbs_write_unsigned(ctx, rw, width, #name, \
  322. SUBSCRIPTS(subs, __VA_ARGS__), \
  323. value, range_min, range_max)); \
  324. } while (0)
  325. #define xue(name, var, range_min, range_max, subs, ...) do { \
  326. uint32_t value = var; \
  327. CHECK(cbs_write_ue_golomb(ctx, rw, #name, \
  328. SUBSCRIPTS(subs, __VA_ARGS__), \
  329. value, range_min, range_max)); \
  330. } while (0)
  331. #define xi(width, name, var, range_min, range_max, subs, ...) do { \
  332. int32_t value = var; \
  333. CHECK(ff_cbs_write_signed(ctx, rw, width, #name, \
  334. SUBSCRIPTS(subs, __VA_ARGS__), \
  335. value, range_min, range_max)); \
  336. } while (0)
  337. #define xse(name, var, range_min, range_max, subs, ...) do { \
  338. int32_t value = var; \
  339. CHECK(cbs_write_se_golomb(ctx, rw, #name, \
  340. SUBSCRIPTS(subs, __VA_ARGS__), \
  341. value, range_min, range_max)); \
  342. } while (0)
  343. #define infer(name, value) do { \
  344. if (current->name != (value)) { \
  345. av_log(ctx->log_ctx, AV_LOG_WARNING, "Warning: " \
  346. "%s does not match inferred value: " \
  347. "%"PRId64", but should be %"PRId64".\n", \
  348. #name, (int64_t)current->name, (int64_t)(value)); \
  349. } \
  350. } while (0)
  351. #define more_rbsp_data(var) (var)
  352. #define byte_alignment(rw) (put_bits_count(rw) % 8)
  353. #define allocate(name, size) do { \
  354. if (!name) { \
  355. av_log(ctx->log_ctx, AV_LOG_ERROR, "%s must be set " \
  356. "for writing.\n", #name); \
  357. return AVERROR_INVALIDDATA; \
  358. } \
  359. } while (0)
  360. #define FUNC(name) FUNC_H264(READWRITE, name)
  361. #include "cbs_h264_syntax_template.c"
  362. #undef FUNC
  363. #define FUNC(name) FUNC_H265(READWRITE, name)
  364. #include "cbs_h265_syntax_template.c"
  365. #undef FUNC
  366. #undef WRITE
  367. #undef READWRITE
  368. #undef RWContext
  369. #undef xu
  370. #undef xi
  371. #undef xue
  372. #undef xse
  373. #undef u
  374. #undef i
  375. #undef flag
  376. #undef ue
  377. #undef se
  378. #undef infer
  379. #undef more_rbsp_data
  380. #undef byte_alignment
  381. #undef allocate
  382. static void cbs_h264_free_pps(void *unit, uint8_t *content)
  383. {
  384. H264RawPPS *pps = (H264RawPPS*)content;
  385. av_buffer_unref(&pps->slice_group_id_ref);
  386. av_freep(&content);
  387. }
  388. static void cbs_h264_free_sei_payload(H264RawSEIPayload *payload)
  389. {
  390. switch (payload->payload_type) {
  391. case H264_SEI_TYPE_BUFFERING_PERIOD:
  392. case H264_SEI_TYPE_PIC_TIMING:
  393. case H264_SEI_TYPE_PAN_SCAN_RECT:
  394. case H264_SEI_TYPE_RECOVERY_POINT:
  395. case H264_SEI_TYPE_DISPLAY_ORIENTATION:
  396. case H264_SEI_TYPE_MASTERING_DISPLAY_COLOUR_VOLUME:
  397. case H264_SEI_TYPE_ALTERNATIVE_TRANSFER:
  398. break;
  399. case H264_SEI_TYPE_USER_DATA_REGISTERED:
  400. av_buffer_unref(&payload->payload.user_data_registered.data_ref);
  401. break;
  402. case H264_SEI_TYPE_USER_DATA_UNREGISTERED:
  403. av_buffer_unref(&payload->payload.user_data_unregistered.data_ref);
  404. break;
  405. default:
  406. av_buffer_unref(&payload->payload.other.data_ref);
  407. break;
  408. }
  409. }
  410. static void cbs_h264_free_sei(void *unit, uint8_t *content)
  411. {
  412. H264RawSEI *sei = (H264RawSEI*)content;
  413. int i;
  414. for (i = 0; i < sei->payload_count; i++)
  415. cbs_h264_free_sei_payload(&sei->payload[i]);
  416. av_freep(&content);
  417. }
  418. static void cbs_h264_free_slice(void *unit, uint8_t *content)
  419. {
  420. H264RawSlice *slice = (H264RawSlice*)content;
  421. av_buffer_unref(&slice->data_ref);
  422. av_freep(&content);
  423. }
  424. static void cbs_h265_free_vps(void *unit, uint8_t *content)
  425. {
  426. H265RawVPS *vps = (H265RawVPS*)content;
  427. av_buffer_unref(&vps->extension_data.data_ref);
  428. av_freep(&content);
  429. }
  430. static void cbs_h265_free_sps(void *unit, uint8_t *content)
  431. {
  432. H265RawSPS *sps = (H265RawSPS*)content;
  433. av_buffer_unref(&sps->extension_data.data_ref);
  434. av_freep(&content);
  435. }
  436. static void cbs_h265_free_pps(void *unit, uint8_t *content)
  437. {
  438. H265RawPPS *pps = (H265RawPPS*)content;
  439. av_buffer_unref(&pps->extension_data.data_ref);
  440. av_freep(&content);
  441. }
  442. static void cbs_h265_free_slice(void *unit, uint8_t *content)
  443. {
  444. H265RawSlice *slice = (H265RawSlice*)content;
  445. av_buffer_unref(&slice->data_ref);
  446. av_freep(&content);
  447. }
  448. static void cbs_h265_free_sei_payload(H265RawSEIPayload *payload)
  449. {
  450. switch (payload->payload_type) {
  451. case HEVC_SEI_TYPE_BUFFERING_PERIOD:
  452. case HEVC_SEI_TYPE_PICTURE_TIMING:
  453. case HEVC_SEI_TYPE_PAN_SCAN_RECT:
  454. case HEVC_SEI_TYPE_RECOVERY_POINT:
  455. case HEVC_SEI_TYPE_DISPLAY_ORIENTATION:
  456. case HEVC_SEI_TYPE_ACTIVE_PARAMETER_SETS:
  457. case HEVC_SEI_TYPE_DECODED_PICTURE_HASH:
  458. case HEVC_SEI_TYPE_TIME_CODE:
  459. case HEVC_SEI_TYPE_MASTERING_DISPLAY_INFO:
  460. case HEVC_SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO:
  461. case HEVC_SEI_TYPE_ALTERNATIVE_TRANSFER_CHARACTERISTICS:
  462. break;
  463. case HEVC_SEI_TYPE_USER_DATA_REGISTERED_ITU_T_T35:
  464. av_buffer_unref(&payload->payload.user_data_registered.data_ref);
  465. break;
  466. case HEVC_SEI_TYPE_USER_DATA_UNREGISTERED:
  467. av_buffer_unref(&payload->payload.user_data_unregistered.data_ref);
  468. break;
  469. default:
  470. av_buffer_unref(&payload->payload.other.data_ref);
  471. break;
  472. }
  473. }
  474. static void cbs_h265_free_sei(void *unit, uint8_t *content)
  475. {
  476. H265RawSEI *sei = (H265RawSEI*)content;
  477. int i;
  478. for (i = 0; i < sei->payload_count; i++)
  479. cbs_h265_free_sei_payload(&sei->payload[i]);
  480. av_freep(&content);
  481. }
  482. static int cbs_h2645_fragment_add_nals(CodedBitstreamContext *ctx,
  483. CodedBitstreamFragment *frag,
  484. const H2645Packet *packet)
  485. {
  486. int err, i;
  487. for (i = 0; i < packet->nb_nals; i++) {
  488. const H2645NAL *nal = &packet->nals[i];
  489. AVBufferRef *ref;
  490. size_t size = nal->size;
  491. // Remove trailing zeroes.
  492. while (size > 0 && nal->data[size - 1] == 0)
  493. --size;
  494. av_assert0(size > 0);
  495. ref = (nal->data == nal->raw_data) ? frag->data_ref
  496. : packet->rbsp.rbsp_buffer_ref;
  497. err = ff_cbs_insert_unit_data(ctx, frag, -1, nal->type,
  498. (uint8_t*)nal->data, size, ref);
  499. if (err < 0)
  500. return err;
  501. }
  502. return 0;
  503. }
  504. static int cbs_h2645_split_fragment(CodedBitstreamContext *ctx,
  505. CodedBitstreamFragment *frag,
  506. int header)
  507. {
  508. enum AVCodecID codec_id = ctx->codec->codec_id;
  509. CodedBitstreamH2645Context *priv = ctx->priv_data;
  510. GetByteContext gbc;
  511. int err;
  512. av_assert0(frag->data && frag->nb_units == 0);
  513. if (frag->data_size == 0)
  514. return 0;
  515. if (header && frag->data[0] && codec_id == AV_CODEC_ID_H264) {
  516. // AVCC header.
  517. size_t size, start, end;
  518. int i, count, version;
  519. priv->mp4 = 1;
  520. bytestream2_init(&gbc, frag->data, frag->data_size);
  521. if (bytestream2_get_bytes_left(&gbc) < 6)
  522. return AVERROR_INVALIDDATA;
  523. version = bytestream2_get_byte(&gbc);
  524. if (version != 1) {
  525. av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid AVCC header: "
  526. "first byte %u.", version);
  527. return AVERROR_INVALIDDATA;
  528. }
  529. bytestream2_skip(&gbc, 3);
  530. priv->nal_length_size = (bytestream2_get_byte(&gbc) & 3) + 1;
  531. // SPS array.
  532. count = bytestream2_get_byte(&gbc) & 0x1f;
  533. start = bytestream2_tell(&gbc);
  534. for (i = 0; i < count; i++) {
  535. if (bytestream2_get_bytes_left(&gbc) < 2 * (count - i))
  536. return AVERROR_INVALIDDATA;
  537. size = bytestream2_get_be16(&gbc);
  538. if (bytestream2_get_bytes_left(&gbc) < size)
  539. return AVERROR_INVALIDDATA;
  540. bytestream2_skip(&gbc, size);
  541. }
  542. end = bytestream2_tell(&gbc);
  543. err = ff_h2645_packet_split(&priv->read_packet,
  544. frag->data + start, end - start,
  545. ctx->log_ctx, 1, 2, AV_CODEC_ID_H264, 1, 1);
  546. if (err < 0) {
  547. av_log(ctx->log_ctx, AV_LOG_ERROR, "Failed to split AVCC SPS array.\n");
  548. return err;
  549. }
  550. err = cbs_h2645_fragment_add_nals(ctx, frag, &priv->read_packet);
  551. if (err < 0)
  552. return err;
  553. // PPS array.
  554. count = bytestream2_get_byte(&gbc);
  555. start = bytestream2_tell(&gbc);
  556. for (i = 0; i < count; i++) {
  557. if (bytestream2_get_bytes_left(&gbc) < 2 * (count - i))
  558. return AVERROR_INVALIDDATA;
  559. size = bytestream2_get_be16(&gbc);
  560. if (bytestream2_get_bytes_left(&gbc) < size)
  561. return AVERROR_INVALIDDATA;
  562. bytestream2_skip(&gbc, size);
  563. }
  564. end = bytestream2_tell(&gbc);
  565. err = ff_h2645_packet_split(&priv->read_packet,
  566. frag->data + start, end - start,
  567. ctx->log_ctx, 1, 2, AV_CODEC_ID_H264, 1, 1);
  568. if (err < 0) {
  569. av_log(ctx->log_ctx, AV_LOG_ERROR, "Failed to split AVCC PPS array.\n");
  570. return err;
  571. }
  572. err = cbs_h2645_fragment_add_nals(ctx, frag, &priv->read_packet);
  573. if (err < 0)
  574. return err;
  575. if (bytestream2_get_bytes_left(&gbc) > 0) {
  576. av_log(ctx->log_ctx, AV_LOG_WARNING, "%u bytes left at end of AVCC "
  577. "header.\n", bytestream2_get_bytes_left(&gbc));
  578. }
  579. } else if (header && frag->data[0] && codec_id == AV_CODEC_ID_HEVC) {
  580. // HVCC header.
  581. size_t size, start, end;
  582. int i, j, nb_arrays, nal_unit_type, nb_nals, version;
  583. priv->mp4 = 1;
  584. bytestream2_init(&gbc, frag->data, frag->data_size);
  585. if (bytestream2_get_bytes_left(&gbc) < 23)
  586. return AVERROR_INVALIDDATA;
  587. version = bytestream2_get_byte(&gbc);
  588. if (version != 1) {
  589. av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid HVCC header: "
  590. "first byte %u.", version);
  591. return AVERROR_INVALIDDATA;
  592. }
  593. bytestream2_skip(&gbc, 20);
  594. priv->nal_length_size = (bytestream2_get_byte(&gbc) & 3) + 1;
  595. nb_arrays = bytestream2_get_byte(&gbc);
  596. for (i = 0; i < nb_arrays; i++) {
  597. nal_unit_type = bytestream2_get_byte(&gbc) & 0x3f;
  598. nb_nals = bytestream2_get_be16(&gbc);
  599. start = bytestream2_tell(&gbc);
  600. for (j = 0; j < nb_nals; j++) {
  601. if (bytestream2_get_bytes_left(&gbc) < 2)
  602. return AVERROR_INVALIDDATA;
  603. size = bytestream2_get_be16(&gbc);
  604. if (bytestream2_get_bytes_left(&gbc) < size)
  605. return AVERROR_INVALIDDATA;
  606. bytestream2_skip(&gbc, size);
  607. }
  608. end = bytestream2_tell(&gbc);
  609. err = ff_h2645_packet_split(&priv->read_packet,
  610. frag->data + start, end - start,
  611. ctx->log_ctx, 1, 2, AV_CODEC_ID_HEVC, 1, 1);
  612. if (err < 0) {
  613. av_log(ctx->log_ctx, AV_LOG_ERROR, "Failed to split "
  614. "HVCC array %d (%d NAL units of type %d).\n",
  615. i, nb_nals, nal_unit_type);
  616. return err;
  617. }
  618. err = cbs_h2645_fragment_add_nals(ctx, frag, &priv->read_packet);
  619. if (err < 0)
  620. return err;
  621. }
  622. } else {
  623. // Annex B, or later MP4 with already-known parameters.
  624. err = ff_h2645_packet_split(&priv->read_packet,
  625. frag->data, frag->data_size,
  626. ctx->log_ctx,
  627. priv->mp4, priv->nal_length_size,
  628. codec_id, 1, 1);
  629. if (err < 0)
  630. return err;
  631. err = cbs_h2645_fragment_add_nals(ctx, frag, &priv->read_packet);
  632. if (err < 0)
  633. return err;
  634. }
  635. return 0;
  636. }
  637. #define cbs_h2645_replace_ps(h26n, ps_name, ps_var, id_element) \
  638. static int cbs_h26 ## h26n ## _replace_ ## ps_var(CodedBitstreamContext *ctx, \
  639. CodedBitstreamUnit *unit) \
  640. { \
  641. CodedBitstreamH26 ## h26n ## Context *priv = ctx->priv_data; \
  642. H26 ## h26n ## Raw ## ps_name *ps_var = unit->content; \
  643. unsigned int id = ps_var->id_element; \
  644. if (id > FF_ARRAY_ELEMS(priv->ps_var)) { \
  645. av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid " #ps_name \
  646. " id : %d.\n", id); \
  647. return AVERROR_INVALIDDATA; \
  648. } \
  649. if (priv->ps_var[id] == priv->active_ ## ps_var) \
  650. priv->active_ ## ps_var = NULL ; \
  651. av_buffer_unref(&priv->ps_var ## _ref[id]); \
  652. if (unit->content_ref) \
  653. priv->ps_var ## _ref[id] = av_buffer_ref(unit->content_ref); \
  654. else \
  655. priv->ps_var ## _ref[id] = av_buffer_alloc(sizeof(*ps_var)); \
  656. if (!priv->ps_var ## _ref[id]) \
  657. return AVERROR(ENOMEM); \
  658. priv->ps_var[id] = (H26 ## h26n ## Raw ## ps_name *)priv->ps_var ## _ref[id]->data; \
  659. if (!unit->content_ref) \
  660. memcpy(priv->ps_var[id], ps_var, sizeof(*ps_var)); \
  661. return 0; \
  662. }
  663. cbs_h2645_replace_ps(4, SPS, sps, seq_parameter_set_id)
  664. cbs_h2645_replace_ps(4, PPS, pps, pic_parameter_set_id)
  665. cbs_h2645_replace_ps(5, VPS, vps, vps_video_parameter_set_id)
  666. cbs_h2645_replace_ps(5, SPS, sps, sps_seq_parameter_set_id)
  667. cbs_h2645_replace_ps(5, PPS, pps, pps_pic_parameter_set_id)
  668. static int cbs_h264_read_nal_unit(CodedBitstreamContext *ctx,
  669. CodedBitstreamUnit *unit)
  670. {
  671. GetBitContext gbc;
  672. int err;
  673. err = init_get_bits(&gbc, unit->data, 8 * unit->data_size);
  674. if (err < 0)
  675. return err;
  676. switch (unit->type) {
  677. case H264_NAL_SPS:
  678. {
  679. H264RawSPS *sps;
  680. err = ff_cbs_alloc_unit_content(ctx, unit, sizeof(*sps), NULL);
  681. if (err < 0)
  682. return err;
  683. sps = unit->content;
  684. err = cbs_h264_read_sps(ctx, &gbc, sps);
  685. if (err < 0)
  686. return err;
  687. err = cbs_h264_replace_sps(ctx, unit);
  688. if (err < 0)
  689. return err;
  690. }
  691. break;
  692. case H264_NAL_SPS_EXT:
  693. {
  694. err = ff_cbs_alloc_unit_content(ctx, unit,
  695. sizeof(H264RawSPSExtension),
  696. NULL);
  697. if (err < 0)
  698. return err;
  699. err = cbs_h264_read_sps_extension(ctx, &gbc, unit->content);
  700. if (err < 0)
  701. return err;
  702. }
  703. break;
  704. case H264_NAL_PPS:
  705. {
  706. H264RawPPS *pps;
  707. err = ff_cbs_alloc_unit_content(ctx, unit, sizeof(*pps),
  708. &cbs_h264_free_pps);
  709. if (err < 0)
  710. return err;
  711. pps = unit->content;
  712. err = cbs_h264_read_pps(ctx, &gbc, pps);
  713. if (err < 0)
  714. return err;
  715. err = cbs_h264_replace_pps(ctx, unit);
  716. if (err < 0)
  717. return err;
  718. }
  719. break;
  720. case H264_NAL_SLICE:
  721. case H264_NAL_IDR_SLICE:
  722. case H264_NAL_AUXILIARY_SLICE:
  723. {
  724. H264RawSlice *slice;
  725. int pos, len;
  726. err = ff_cbs_alloc_unit_content(ctx, unit, sizeof(*slice),
  727. &cbs_h264_free_slice);
  728. if (err < 0)
  729. return err;
  730. slice = unit->content;
  731. err = cbs_h264_read_slice_header(ctx, &gbc, &slice->header);
  732. if (err < 0)
  733. return err;
  734. pos = get_bits_count(&gbc);
  735. len = unit->data_size;
  736. if (!unit->data[len - 1]) {
  737. int z;
  738. for (z = 0; z < len && !unit->data[len - z - 1]; z++);
  739. av_log(ctx->log_ctx, AV_LOG_DEBUG, "Deleted %d trailing zeroes "
  740. "from slice data.\n", z);
  741. len -= z;
  742. }
  743. slice->data_size = len - pos / 8;
  744. slice->data_ref = av_buffer_ref(unit->data_ref);
  745. if (!slice->data_ref)
  746. return AVERROR(ENOMEM);
  747. slice->data = unit->data + pos / 8;
  748. slice->data_bit_start = pos % 8;
  749. }
  750. break;
  751. case H264_NAL_AUD:
  752. {
  753. err = ff_cbs_alloc_unit_content(ctx, unit,
  754. sizeof(H264RawAUD), NULL);
  755. if (err < 0)
  756. return err;
  757. err = cbs_h264_read_aud(ctx, &gbc, unit->content);
  758. if (err < 0)
  759. return err;
  760. }
  761. break;
  762. case H264_NAL_SEI:
  763. {
  764. err = ff_cbs_alloc_unit_content(ctx, unit, sizeof(H264RawSEI),
  765. &cbs_h264_free_sei);
  766. if (err < 0)
  767. return err;
  768. err = cbs_h264_read_sei(ctx, &gbc, unit->content);
  769. if (err < 0)
  770. return err;
  771. }
  772. break;
  773. case H264_NAL_FILLER_DATA:
  774. {
  775. err = ff_cbs_alloc_unit_content(ctx, unit,
  776. sizeof(H264RawFiller), NULL);
  777. if (err < 0)
  778. return err;
  779. err = cbs_h264_read_filler(ctx, &gbc, unit->content);
  780. if (err < 0)
  781. return err;
  782. }
  783. break;
  784. case H264_NAL_END_SEQUENCE:
  785. case H264_NAL_END_STREAM:
  786. {
  787. err = ff_cbs_alloc_unit_content(ctx, unit,
  788. sizeof(H264RawNALUnitHeader),
  789. NULL);
  790. if (err < 0)
  791. return err;
  792. err = (unit->type == H264_NAL_END_SEQUENCE ?
  793. cbs_h264_read_end_of_sequence :
  794. cbs_h264_read_end_of_stream)(ctx, &gbc, unit->content);
  795. if (err < 0)
  796. return err;
  797. }
  798. break;
  799. default:
  800. return AVERROR(ENOSYS);
  801. }
  802. return 0;
  803. }
  804. static int cbs_h265_read_nal_unit(CodedBitstreamContext *ctx,
  805. CodedBitstreamUnit *unit)
  806. {
  807. GetBitContext gbc;
  808. int err;
  809. err = init_get_bits(&gbc, unit->data, 8 * unit->data_size);
  810. if (err < 0)
  811. return err;
  812. switch (unit->type) {
  813. case HEVC_NAL_VPS:
  814. {
  815. H265RawVPS *vps;
  816. err = ff_cbs_alloc_unit_content(ctx, unit, sizeof(*vps),
  817. &cbs_h265_free_vps);
  818. if (err < 0)
  819. return err;
  820. vps = unit->content;
  821. err = cbs_h265_read_vps(ctx, &gbc, vps);
  822. if (err < 0)
  823. return err;
  824. err = cbs_h265_replace_vps(ctx, unit);
  825. if (err < 0)
  826. return err;
  827. }
  828. break;
  829. case HEVC_NAL_SPS:
  830. {
  831. H265RawSPS *sps;
  832. err = ff_cbs_alloc_unit_content(ctx, unit, sizeof(*sps),
  833. &cbs_h265_free_sps);
  834. if (err < 0)
  835. return err;
  836. sps = unit->content;
  837. err = cbs_h265_read_sps(ctx, &gbc, sps);
  838. if (err < 0)
  839. return err;
  840. err = cbs_h265_replace_sps(ctx, unit);
  841. if (err < 0)
  842. return err;
  843. }
  844. break;
  845. case HEVC_NAL_PPS:
  846. {
  847. H265RawPPS *pps;
  848. err = ff_cbs_alloc_unit_content(ctx, unit, sizeof(*pps),
  849. &cbs_h265_free_pps);
  850. if (err < 0)
  851. return err;
  852. pps = unit->content;
  853. err = cbs_h265_read_pps(ctx, &gbc, pps);
  854. if (err < 0)
  855. return err;
  856. err = cbs_h265_replace_pps(ctx, unit);
  857. if (err < 0)
  858. return err;
  859. }
  860. break;
  861. case HEVC_NAL_TRAIL_N:
  862. case HEVC_NAL_TRAIL_R:
  863. case HEVC_NAL_TSA_N:
  864. case HEVC_NAL_TSA_R:
  865. case HEVC_NAL_STSA_N:
  866. case HEVC_NAL_STSA_R:
  867. case HEVC_NAL_RADL_N:
  868. case HEVC_NAL_RADL_R:
  869. case HEVC_NAL_RASL_N:
  870. case HEVC_NAL_RASL_R:
  871. case HEVC_NAL_BLA_W_LP:
  872. case HEVC_NAL_BLA_W_RADL:
  873. case HEVC_NAL_BLA_N_LP:
  874. case HEVC_NAL_IDR_W_RADL:
  875. case HEVC_NAL_IDR_N_LP:
  876. case HEVC_NAL_CRA_NUT:
  877. {
  878. H265RawSlice *slice;
  879. int pos, len;
  880. err = ff_cbs_alloc_unit_content(ctx, unit, sizeof(*slice),
  881. &cbs_h265_free_slice);
  882. if (err < 0)
  883. return err;
  884. slice = unit->content;
  885. err = cbs_h265_read_slice_segment_header(ctx, &gbc, &slice->header);
  886. if (err < 0)
  887. return err;
  888. pos = get_bits_count(&gbc);
  889. len = unit->data_size;
  890. if (!unit->data[len - 1]) {
  891. int z;
  892. for (z = 0; z < len && !unit->data[len - z - 1]; z++);
  893. av_log(ctx->log_ctx, AV_LOG_DEBUG, "Deleted %d trailing zeroes "
  894. "from slice data.\n", z);
  895. len -= z;
  896. }
  897. slice->data_size = len - pos / 8;
  898. slice->data_ref = av_buffer_ref(unit->data_ref);
  899. if (!slice->data_ref)
  900. return AVERROR(ENOMEM);
  901. slice->data = unit->data + pos / 8;
  902. slice->data_bit_start = pos % 8;
  903. }
  904. break;
  905. case HEVC_NAL_AUD:
  906. {
  907. err = ff_cbs_alloc_unit_content(ctx, unit,
  908. sizeof(H265RawAUD), NULL);
  909. if (err < 0)
  910. return err;
  911. err = cbs_h265_read_aud(ctx, &gbc, unit->content);
  912. if (err < 0)
  913. return err;
  914. }
  915. break;
  916. case HEVC_NAL_SEI_PREFIX:
  917. case HEVC_NAL_SEI_SUFFIX:
  918. {
  919. err = ff_cbs_alloc_unit_content(ctx, unit, sizeof(H265RawSEI),
  920. &cbs_h265_free_sei);
  921. if (err < 0)
  922. return err;
  923. err = cbs_h265_read_sei(ctx, &gbc, unit->content,
  924. unit->type == HEVC_NAL_SEI_PREFIX);
  925. if (err < 0)
  926. return err;
  927. }
  928. break;
  929. default:
  930. return AVERROR(ENOSYS);
  931. }
  932. return 0;
  933. }
  934. static int cbs_h2645_write_slice_data(CodedBitstreamContext *ctx,
  935. PutBitContext *pbc, const uint8_t *data,
  936. size_t data_size, int data_bit_start)
  937. {
  938. size_t rest = data_size - (data_bit_start + 7) / 8;
  939. const uint8_t *pos = data + data_bit_start / 8;
  940. av_assert0(data_bit_start >= 0 &&
  941. 8 * data_size > data_bit_start);
  942. if (data_size * 8 + 8 > put_bits_left(pbc))
  943. return AVERROR(ENOSPC);
  944. if (!rest)
  945. goto rbsp_stop_one_bit;
  946. // First copy the remaining bits of the first byte
  947. // The above check ensures that we do not accidentally
  948. // copy beyond the rbsp_stop_one_bit.
  949. if (data_bit_start % 8)
  950. put_bits(pbc, 8 - data_bit_start % 8,
  951. *pos++ & MAX_UINT_BITS(8 - data_bit_start % 8));
  952. if (put_bits_count(pbc) % 8 == 0) {
  953. // If the writer is aligned at this point,
  954. // memcpy can be used to improve performance.
  955. // This happens normally for CABAC.
  956. flush_put_bits(pbc);
  957. memcpy(put_bits_ptr(pbc), pos, rest);
  958. skip_put_bytes(pbc, rest);
  959. } else {
  960. // If not, we have to copy manually.
  961. // rbsp_stop_one_bit forces us to special-case
  962. // the last byte.
  963. uint8_t temp;
  964. int i;
  965. for (; rest > 4; rest -= 4, pos += 4)
  966. put_bits32(pbc, AV_RB32(pos));
  967. for (; rest > 1; rest--, pos++)
  968. put_bits(pbc, 8, *pos);
  969. rbsp_stop_one_bit:
  970. temp = rest ? *pos : *pos & MAX_UINT_BITS(8 - data_bit_start % 8);
  971. av_assert0(temp);
  972. i = ff_ctz(*pos);
  973. temp = temp >> i;
  974. i = rest ? (8 - i) : (8 - i - data_bit_start % 8);
  975. put_bits(pbc, i, temp);
  976. if (put_bits_count(pbc) % 8)
  977. put_bits(pbc, 8 - put_bits_count(pbc) % 8, 0);
  978. }
  979. return 0;
  980. }
  981. static int cbs_h264_write_nal_unit(CodedBitstreamContext *ctx,
  982. CodedBitstreamUnit *unit,
  983. PutBitContext *pbc)
  984. {
  985. int err;
  986. switch (unit->type) {
  987. case H264_NAL_SPS:
  988. {
  989. H264RawSPS *sps = unit->content;
  990. err = cbs_h264_write_sps(ctx, pbc, sps);
  991. if (err < 0)
  992. return err;
  993. err = cbs_h264_replace_sps(ctx, unit);
  994. if (err < 0)
  995. return err;
  996. }
  997. break;
  998. case H264_NAL_SPS_EXT:
  999. {
  1000. H264RawSPSExtension *sps_ext = unit->content;
  1001. err = cbs_h264_write_sps_extension(ctx, pbc, sps_ext);
  1002. if (err < 0)
  1003. return err;
  1004. }
  1005. break;
  1006. case H264_NAL_PPS:
  1007. {
  1008. H264RawPPS *pps = unit->content;
  1009. err = cbs_h264_write_pps(ctx, pbc, pps);
  1010. if (err < 0)
  1011. return err;
  1012. err = cbs_h264_replace_pps(ctx, unit);
  1013. if (err < 0)
  1014. return err;
  1015. }
  1016. break;
  1017. case H264_NAL_SLICE:
  1018. case H264_NAL_IDR_SLICE:
  1019. case H264_NAL_AUXILIARY_SLICE:
  1020. {
  1021. H264RawSlice *slice = unit->content;
  1022. err = cbs_h264_write_slice_header(ctx, pbc, &slice->header);
  1023. if (err < 0)
  1024. return err;
  1025. if (slice->data) {
  1026. err = cbs_h2645_write_slice_data(ctx, pbc, slice->data,
  1027. slice->data_size,
  1028. slice->data_bit_start);
  1029. if (err < 0)
  1030. return err;
  1031. } else {
  1032. // No slice data - that was just the header.
  1033. // (Bitstream may be unaligned!)
  1034. }
  1035. }
  1036. break;
  1037. case H264_NAL_AUD:
  1038. {
  1039. err = cbs_h264_write_aud(ctx, pbc, unit->content);
  1040. if (err < 0)
  1041. return err;
  1042. }
  1043. break;
  1044. case H264_NAL_SEI:
  1045. {
  1046. err = cbs_h264_write_sei(ctx, pbc, unit->content);
  1047. if (err < 0)
  1048. return err;
  1049. }
  1050. break;
  1051. case H264_NAL_FILLER_DATA:
  1052. {
  1053. err = cbs_h264_write_filler(ctx, pbc, unit->content);
  1054. if (err < 0)
  1055. return err;
  1056. }
  1057. break;
  1058. case H264_NAL_END_SEQUENCE:
  1059. {
  1060. err = cbs_h264_write_end_of_sequence(ctx, pbc, unit->content);
  1061. if (err < 0)
  1062. return err;
  1063. }
  1064. break;
  1065. case H264_NAL_END_STREAM:
  1066. {
  1067. err = cbs_h264_write_end_of_stream(ctx, pbc, unit->content);
  1068. if (err < 0)
  1069. return err;
  1070. }
  1071. break;
  1072. default:
  1073. av_log(ctx->log_ctx, AV_LOG_ERROR, "Write unimplemented for "
  1074. "NAL unit type %"PRIu32".\n", unit->type);
  1075. return AVERROR_PATCHWELCOME;
  1076. }
  1077. return 0;
  1078. }
  1079. static int cbs_h265_write_nal_unit(CodedBitstreamContext *ctx,
  1080. CodedBitstreamUnit *unit,
  1081. PutBitContext *pbc)
  1082. {
  1083. int err;
  1084. switch (unit->type) {
  1085. case HEVC_NAL_VPS:
  1086. {
  1087. H265RawVPS *vps = unit->content;
  1088. err = cbs_h265_write_vps(ctx, pbc, vps);
  1089. if (err < 0)
  1090. return err;
  1091. err = cbs_h265_replace_vps(ctx, unit);
  1092. if (err < 0)
  1093. return err;
  1094. }
  1095. break;
  1096. case HEVC_NAL_SPS:
  1097. {
  1098. H265RawSPS *sps = unit->content;
  1099. err = cbs_h265_write_sps(ctx, pbc, sps);
  1100. if (err < 0)
  1101. return err;
  1102. err = cbs_h265_replace_sps(ctx, unit);
  1103. if (err < 0)
  1104. return err;
  1105. }
  1106. break;
  1107. case HEVC_NAL_PPS:
  1108. {
  1109. H265RawPPS *pps = unit->content;
  1110. err = cbs_h265_write_pps(ctx, pbc, pps);
  1111. if (err < 0)
  1112. return err;
  1113. err = cbs_h265_replace_pps(ctx, unit);
  1114. if (err < 0)
  1115. return err;
  1116. }
  1117. break;
  1118. case HEVC_NAL_TRAIL_N:
  1119. case HEVC_NAL_TRAIL_R:
  1120. case HEVC_NAL_TSA_N:
  1121. case HEVC_NAL_TSA_R:
  1122. case HEVC_NAL_STSA_N:
  1123. case HEVC_NAL_STSA_R:
  1124. case HEVC_NAL_RADL_N:
  1125. case HEVC_NAL_RADL_R:
  1126. case HEVC_NAL_RASL_N:
  1127. case HEVC_NAL_RASL_R:
  1128. case HEVC_NAL_BLA_W_LP:
  1129. case HEVC_NAL_BLA_W_RADL:
  1130. case HEVC_NAL_BLA_N_LP:
  1131. case HEVC_NAL_IDR_W_RADL:
  1132. case HEVC_NAL_IDR_N_LP:
  1133. case HEVC_NAL_CRA_NUT:
  1134. {
  1135. H265RawSlice *slice = unit->content;
  1136. err = cbs_h265_write_slice_segment_header(ctx, pbc, &slice->header);
  1137. if (err < 0)
  1138. return err;
  1139. if (slice->data) {
  1140. err = cbs_h2645_write_slice_data(ctx, pbc, slice->data,
  1141. slice->data_size,
  1142. slice->data_bit_start);
  1143. if (err < 0)
  1144. return err;
  1145. } else {
  1146. // No slice data - that was just the header.
  1147. }
  1148. }
  1149. break;
  1150. case HEVC_NAL_AUD:
  1151. {
  1152. err = cbs_h265_write_aud(ctx, pbc, unit->content);
  1153. if (err < 0)
  1154. return err;
  1155. }
  1156. break;
  1157. case HEVC_NAL_SEI_PREFIX:
  1158. case HEVC_NAL_SEI_SUFFIX:
  1159. {
  1160. err = cbs_h265_write_sei(ctx, pbc, unit->content,
  1161. unit->type == HEVC_NAL_SEI_PREFIX);
  1162. if (err < 0)
  1163. return err;
  1164. }
  1165. break;
  1166. default:
  1167. av_log(ctx->log_ctx, AV_LOG_ERROR, "Write unimplemented for "
  1168. "NAL unit type %"PRIu32".\n", unit->type);
  1169. return AVERROR_PATCHWELCOME;
  1170. }
  1171. return 0;
  1172. }
  1173. static int cbs_h2645_write_nal_unit(CodedBitstreamContext *ctx,
  1174. CodedBitstreamUnit *unit)
  1175. {
  1176. CodedBitstreamH2645Context *priv = ctx->priv_data;
  1177. enum AVCodecID codec_id = ctx->codec->codec_id;
  1178. PutBitContext pbc;
  1179. int err;
  1180. if (!priv->write_buffer) {
  1181. // Initial write buffer size is 1MB.
  1182. priv->write_buffer_size = 1024 * 1024;
  1183. reallocate_and_try_again:
  1184. err = av_reallocp(&priv->write_buffer, priv->write_buffer_size);
  1185. if (err < 0) {
  1186. av_log(ctx->log_ctx, AV_LOG_ERROR, "Unable to allocate a "
  1187. "sufficiently large write buffer (last attempt "
  1188. "%"SIZE_SPECIFIER" bytes).\n", priv->write_buffer_size);
  1189. return err;
  1190. }
  1191. }
  1192. init_put_bits(&pbc, priv->write_buffer, priv->write_buffer_size);
  1193. if (codec_id == AV_CODEC_ID_H264)
  1194. err = cbs_h264_write_nal_unit(ctx, unit, &pbc);
  1195. else
  1196. err = cbs_h265_write_nal_unit(ctx, unit, &pbc);
  1197. if (err == AVERROR(ENOSPC)) {
  1198. // Overflow.
  1199. priv->write_buffer_size *= 2;
  1200. goto reallocate_and_try_again;
  1201. }
  1202. // Overflow but we didn't notice.
  1203. av_assert0(put_bits_count(&pbc) <= 8 * priv->write_buffer_size);
  1204. if (err < 0) {
  1205. // Write failed for some other reason.
  1206. return err;
  1207. }
  1208. if (put_bits_count(&pbc) % 8)
  1209. unit->data_bit_padding = 8 - put_bits_count(&pbc) % 8;
  1210. else
  1211. unit->data_bit_padding = 0;
  1212. unit->data_size = (put_bits_count(&pbc) + 7) / 8;
  1213. flush_put_bits(&pbc);
  1214. err = ff_cbs_alloc_unit_data(ctx, unit, unit->data_size);
  1215. if (err < 0)
  1216. return err;
  1217. memcpy(unit->data, priv->write_buffer, unit->data_size);
  1218. return 0;
  1219. }
  1220. static int cbs_h2645_assemble_fragment(CodedBitstreamContext *ctx,
  1221. CodedBitstreamFragment *frag)
  1222. {
  1223. uint8_t *data;
  1224. size_t max_size, dp, sp;
  1225. int err, i, zero_run;
  1226. for (i = 0; i < frag->nb_units; i++) {
  1227. // Data should already all have been written when we get here.
  1228. av_assert0(frag->units[i].data);
  1229. }
  1230. max_size = 0;
  1231. for (i = 0; i < frag->nb_units; i++) {
  1232. // Start code + content with worst-case emulation prevention.
  1233. max_size += 3 + frag->units[i].data_size * 3 / 2;
  1234. }
  1235. data = av_malloc(max_size + AV_INPUT_BUFFER_PADDING_SIZE);
  1236. if (!data)
  1237. return AVERROR(ENOMEM);
  1238. dp = 0;
  1239. for (i = 0; i < frag->nb_units; i++) {
  1240. CodedBitstreamUnit *unit = &frag->units[i];
  1241. if (unit->data_bit_padding > 0) {
  1242. if (i < frag->nb_units - 1)
  1243. av_log(ctx->log_ctx, AV_LOG_WARNING, "Probably invalid "
  1244. "unaligned padding on non-final NAL unit.\n");
  1245. else
  1246. frag->data_bit_padding = unit->data_bit_padding;
  1247. }
  1248. if ((ctx->codec->codec_id == AV_CODEC_ID_H264 &&
  1249. (unit->type == H264_NAL_SPS ||
  1250. unit->type == H264_NAL_PPS)) ||
  1251. (ctx->codec->codec_id == AV_CODEC_ID_HEVC &&
  1252. (unit->type == HEVC_NAL_VPS ||
  1253. unit->type == HEVC_NAL_SPS ||
  1254. unit->type == HEVC_NAL_PPS)) ||
  1255. i == 0 /* (Assume this is the start of an access unit.) */) {
  1256. // zero_byte
  1257. data[dp++] = 0;
  1258. }
  1259. // start_code_prefix_one_3bytes
  1260. data[dp++] = 0;
  1261. data[dp++] = 0;
  1262. data[dp++] = 1;
  1263. zero_run = 0;
  1264. for (sp = 0; sp < unit->data_size; sp++) {
  1265. if (zero_run < 2) {
  1266. if (unit->data[sp] == 0)
  1267. ++zero_run;
  1268. else
  1269. zero_run = 0;
  1270. } else {
  1271. if ((unit->data[sp] & ~3) == 0) {
  1272. // emulation_prevention_three_byte
  1273. data[dp++] = 3;
  1274. }
  1275. zero_run = unit->data[sp] == 0;
  1276. }
  1277. data[dp++] = unit->data[sp];
  1278. }
  1279. }
  1280. av_assert0(dp <= max_size);
  1281. err = av_reallocp(&data, dp + AV_INPUT_BUFFER_PADDING_SIZE);
  1282. if (err)
  1283. return err;
  1284. memset(data + dp, 0, AV_INPUT_BUFFER_PADDING_SIZE);
  1285. frag->data_ref = av_buffer_create(data, dp + AV_INPUT_BUFFER_PADDING_SIZE,
  1286. NULL, NULL, 0);
  1287. if (!frag->data_ref) {
  1288. av_freep(&data);
  1289. return AVERROR(ENOMEM);
  1290. }
  1291. frag->data = data;
  1292. frag->data_size = dp;
  1293. return 0;
  1294. }
  1295. static void cbs_h264_close(CodedBitstreamContext *ctx)
  1296. {
  1297. CodedBitstreamH264Context *h264 = ctx->priv_data;
  1298. int i;
  1299. ff_h2645_packet_uninit(&h264->common.read_packet);
  1300. av_freep(&h264->common.write_buffer);
  1301. for (i = 0; i < FF_ARRAY_ELEMS(h264->sps); i++)
  1302. av_buffer_unref(&h264->sps_ref[i]);
  1303. for (i = 0; i < FF_ARRAY_ELEMS(h264->pps); i++)
  1304. av_buffer_unref(&h264->pps_ref[i]);
  1305. }
  1306. static void cbs_h265_close(CodedBitstreamContext *ctx)
  1307. {
  1308. CodedBitstreamH265Context *h265 = ctx->priv_data;
  1309. int i;
  1310. ff_h2645_packet_uninit(&h265->common.read_packet);
  1311. av_freep(&h265->common.write_buffer);
  1312. for (i = 0; i < FF_ARRAY_ELEMS(h265->vps); i++)
  1313. av_buffer_unref(&h265->vps_ref[i]);
  1314. for (i = 0; i < FF_ARRAY_ELEMS(h265->sps); i++)
  1315. av_buffer_unref(&h265->sps_ref[i]);
  1316. for (i = 0; i < FF_ARRAY_ELEMS(h265->pps); i++)
  1317. av_buffer_unref(&h265->pps_ref[i]);
  1318. }
  1319. const CodedBitstreamType ff_cbs_type_h264 = {
  1320. .codec_id = AV_CODEC_ID_H264,
  1321. .priv_data_size = sizeof(CodedBitstreamH264Context),
  1322. .split_fragment = &cbs_h2645_split_fragment,
  1323. .read_unit = &cbs_h264_read_nal_unit,
  1324. .write_unit = &cbs_h2645_write_nal_unit,
  1325. .assemble_fragment = &cbs_h2645_assemble_fragment,
  1326. .close = &cbs_h264_close,
  1327. };
  1328. const CodedBitstreamType ff_cbs_type_h265 = {
  1329. .codec_id = AV_CODEC_ID_HEVC,
  1330. .priv_data_size = sizeof(CodedBitstreamH265Context),
  1331. .split_fragment = &cbs_h2645_split_fragment,
  1332. .read_unit = &cbs_h265_read_nal_unit,
  1333. .write_unit = &cbs_h2645_write_nal_unit,
  1334. .assemble_fragment = &cbs_h2645_assemble_fragment,
  1335. .close = &cbs_h265_close,
  1336. };
  1337. int ff_cbs_h264_add_sei_message(CodedBitstreamContext *ctx,
  1338. CodedBitstreamFragment *au,
  1339. const H264RawSEIPayload *payload)
  1340. {
  1341. H264RawSEI *sei;
  1342. CodedBitstreamUnit *nal = NULL;
  1343. int err, i;
  1344. // Find an existing SEI NAL unit to add to.
  1345. for (i = 0; i < au->nb_units; i++) {
  1346. if (au->units[i].type == H264_NAL_SEI) {
  1347. nal = &au->units[i];
  1348. break;
  1349. }
  1350. }
  1351. if (nal) {
  1352. sei = nal->content;
  1353. } else {
  1354. // Need to make a new SEI NAL unit. Insert it before the first
  1355. // slice data NAL unit; if no slice data, add at the end.
  1356. AVBufferRef *sei_ref;
  1357. sei = av_mallocz(sizeof(*sei));
  1358. if (!sei)
  1359. return AVERROR(ENOMEM);
  1360. sei->nal_unit_header.nal_unit_type = H264_NAL_SEI;
  1361. sei->nal_unit_header.nal_ref_idc = 0;
  1362. sei_ref = av_buffer_create((uint8_t*)sei, sizeof(*sei),
  1363. &cbs_h264_free_sei, ctx, 0);
  1364. if (!sei_ref) {
  1365. av_freep(&sei);
  1366. return AVERROR(ENOMEM);
  1367. }
  1368. for (i = 0; i < au->nb_units; i++) {
  1369. if (au->units[i].type == H264_NAL_SLICE ||
  1370. au->units[i].type == H264_NAL_IDR_SLICE)
  1371. break;
  1372. }
  1373. err = ff_cbs_insert_unit_content(ctx, au, i, H264_NAL_SEI,
  1374. sei, sei_ref);
  1375. av_buffer_unref(&sei_ref);
  1376. if (err < 0)
  1377. return err;
  1378. }
  1379. if (sei->payload_count >= H264_MAX_SEI_PAYLOADS) {
  1380. av_log(ctx->log_ctx, AV_LOG_ERROR, "Too many payloads in "
  1381. "SEI NAL unit.\n");
  1382. return AVERROR(EINVAL);
  1383. }
  1384. memcpy(&sei->payload[sei->payload_count], payload, sizeof(*payload));
  1385. ++sei->payload_count;
  1386. return 0;
  1387. }
  1388. void ff_cbs_h264_delete_sei_message(CodedBitstreamContext *ctx,
  1389. CodedBitstreamFragment *au,
  1390. CodedBitstreamUnit *nal,
  1391. int position)
  1392. {
  1393. H264RawSEI *sei = nal->content;
  1394. av_assert0(nal->type == H264_NAL_SEI);
  1395. av_assert0(position >= 0 && position < sei->payload_count);
  1396. if (position == 0 && sei->payload_count == 1) {
  1397. // Deleting NAL unit entirely.
  1398. int i;
  1399. for (i = 0; i < au->nb_units; i++) {
  1400. if (&au->units[i] == nal)
  1401. break;
  1402. }
  1403. ff_cbs_delete_unit(ctx, au, i);
  1404. } else {
  1405. cbs_h264_free_sei_payload(&sei->payload[position]);
  1406. --sei->payload_count;
  1407. memmove(sei->payload + position,
  1408. sei->payload + position + 1,
  1409. (sei->payload_count - position) * sizeof(*sei->payload));
  1410. }
  1411. }