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.

1623 lines
48KB

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