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.

1545 lines
50KB

  1. /*
  2. * HEVC CABAC decoding
  3. *
  4. * Copyright (C) 2012 - 2013 Guillaume Martres
  5. * Copyright (C) 2012 - 2013 Gildas Cocherel
  6. *
  7. * This file is part of FFmpeg.
  8. *
  9. * FFmpeg is free software; you can redistribute it and/or
  10. * modify it under the terms of the GNU Lesser General Public
  11. * License as published by the Free Software Foundation; either
  12. * version 2.1 of the License, or (at your option) any later version.
  13. *
  14. * FFmpeg is distributed in the hope that it will be useful,
  15. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  17. * Lesser General Public License for more details.
  18. *
  19. * You should have received a copy of the GNU Lesser General Public
  20. * License along with FFmpeg; if not, write to the Free Software
  21. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  22. */
  23. #include "libavutil/attributes.h"
  24. #include "libavutil/common.h"
  25. #include "cabac_functions.h"
  26. #include "hevc.h"
  27. #define CABAC_MAX_BIN 31
  28. /**
  29. * number of bin by SyntaxElement.
  30. */
  31. av_unused static const int8_t num_bins_in_se[] = {
  32. 1, // sao_merge_flag
  33. 1, // sao_type_idx
  34. 0, // sao_eo_class
  35. 0, // sao_band_position
  36. 0, // sao_offset_abs
  37. 0, // sao_offset_sign
  38. 0, // end_of_slice_flag
  39. 3, // split_coding_unit_flag
  40. 1, // cu_transquant_bypass_flag
  41. 3, // skip_flag
  42. 3, // cu_qp_delta
  43. 1, // pred_mode
  44. 4, // part_mode
  45. 0, // pcm_flag
  46. 1, // prev_intra_luma_pred_mode
  47. 0, // mpm_idx
  48. 0, // rem_intra_luma_pred_mode
  49. 2, // intra_chroma_pred_mode
  50. 1, // merge_flag
  51. 1, // merge_idx
  52. 5, // inter_pred_idc
  53. 2, // ref_idx_l0
  54. 2, // ref_idx_l1
  55. 2, // abs_mvd_greater0_flag
  56. 2, // abs_mvd_greater1_flag
  57. 0, // abs_mvd_minus2
  58. 0, // mvd_sign_flag
  59. 1, // mvp_lx_flag
  60. 1, // no_residual_data_flag
  61. 3, // split_transform_flag
  62. 2, // cbf_luma
  63. 4, // cbf_cb, cbf_cr
  64. 2, // transform_skip_flag[][]
  65. 2, // explicit_rdpcm_flag[][]
  66. 2, // explicit_rdpcm_dir_flag[][]
  67. 18, // last_significant_coeff_x_prefix
  68. 18, // last_significant_coeff_y_prefix
  69. 0, // last_significant_coeff_x_suffix
  70. 0, // last_significant_coeff_y_suffix
  71. 4, // significant_coeff_group_flag
  72. 44, // significant_coeff_flag
  73. 24, // coeff_abs_level_greater1_flag
  74. 6, // coeff_abs_level_greater2_flag
  75. 0, // coeff_abs_level_remaining
  76. 0, // coeff_sign_flag
  77. 8, // log2_res_scale_abs
  78. 2, // res_scale_sign_flag
  79. 1, // cu_chroma_qp_offset_flag
  80. 1, // cu_chroma_qp_offset_idx
  81. };
  82. /**
  83. * Offset to ctxIdx 0 in init_values and states, indexed by SyntaxElement.
  84. */
  85. static const int elem_offset[sizeof(num_bins_in_se)] = {
  86. 0, // sao_merge_flag
  87. 1, // sao_type_idx
  88. 2, // sao_eo_class
  89. 2, // sao_band_position
  90. 2, // sao_offset_abs
  91. 2, // sao_offset_sign
  92. 2, // end_of_slice_flag
  93. 2, // split_coding_unit_flag
  94. 5, // cu_transquant_bypass_flag
  95. 6, // skip_flag
  96. 9, // cu_qp_delta
  97. 12, // pred_mode
  98. 13, // part_mode
  99. 17, // pcm_flag
  100. 17, // prev_intra_luma_pred_mode
  101. 18, // mpm_idx
  102. 18, // rem_intra_luma_pred_mode
  103. 18, // intra_chroma_pred_mode
  104. 20, // merge_flag
  105. 21, // merge_idx
  106. 22, // inter_pred_idc
  107. 27, // ref_idx_l0
  108. 29, // ref_idx_l1
  109. 31, // abs_mvd_greater0_flag
  110. 33, // abs_mvd_greater1_flag
  111. 35, // abs_mvd_minus2
  112. 35, // mvd_sign_flag
  113. 35, // mvp_lx_flag
  114. 36, // no_residual_data_flag
  115. 37, // split_transform_flag
  116. 40, // cbf_luma
  117. 42, // cbf_cb, cbf_cr
  118. 46, // transform_skip_flag[][]
  119. 48, // explicit_rdpcm_flag[][]
  120. 50, // explicit_rdpcm_dir_flag[][]
  121. 52, // last_significant_coeff_x_prefix
  122. 70, // last_significant_coeff_y_prefix
  123. 88, // last_significant_coeff_x_suffix
  124. 88, // last_significant_coeff_y_suffix
  125. 88, // significant_coeff_group_flag
  126. 92, // significant_coeff_flag
  127. 136, // coeff_abs_level_greater1_flag
  128. 160, // coeff_abs_level_greater2_flag
  129. 166, // coeff_abs_level_remaining
  130. 166, // coeff_sign_flag
  131. 166, // log2_res_scale_abs
  132. 174, // res_scale_sign_flag
  133. 176, // cu_chroma_qp_offset_flag
  134. 177, // cu_chroma_qp_offset_idx
  135. };
  136. #define CNU 154
  137. /**
  138. * Indexed by init_type
  139. */
  140. static const uint8_t init_values[3][HEVC_CONTEXTS] = {
  141. { // sao_merge_flag
  142. 153,
  143. // sao_type_idx
  144. 200,
  145. // split_coding_unit_flag
  146. 139, 141, 157,
  147. // cu_transquant_bypass_flag
  148. 154,
  149. // skip_flag
  150. CNU, CNU, CNU,
  151. // cu_qp_delta
  152. 154, 154, 154,
  153. // pred_mode
  154. CNU,
  155. // part_mode
  156. 184, CNU, CNU, CNU,
  157. // prev_intra_luma_pred_mode
  158. 184,
  159. // intra_chroma_pred_mode
  160. 63, 139,
  161. // merge_flag
  162. CNU,
  163. // merge_idx
  164. CNU,
  165. // inter_pred_idc
  166. CNU, CNU, CNU, CNU, CNU,
  167. // ref_idx_l0
  168. CNU, CNU,
  169. // ref_idx_l1
  170. CNU, CNU,
  171. // abs_mvd_greater1_flag
  172. CNU, CNU,
  173. // abs_mvd_greater1_flag
  174. CNU, CNU,
  175. // mvp_lx_flag
  176. CNU,
  177. // no_residual_data_flag
  178. CNU,
  179. // split_transform_flag
  180. 153, 138, 138,
  181. // cbf_luma
  182. 111, 141,
  183. // cbf_cb, cbf_cr
  184. 94, 138, 182, 154,
  185. // transform_skip_flag
  186. 139, 139,
  187. // explicit_rdpcm_flag
  188. 139, 139,
  189. // explicit_rdpcm_dir_flag
  190. 139, 139,
  191. // last_significant_coeff_x_prefix
  192. 110, 110, 124, 125, 140, 153, 125, 127, 140, 109, 111, 143, 127, 111,
  193. 79, 108, 123, 63,
  194. // last_significant_coeff_y_prefix
  195. 110, 110, 124, 125, 140, 153, 125, 127, 140, 109, 111, 143, 127, 111,
  196. 79, 108, 123, 63,
  197. // significant_coeff_group_flag
  198. 91, 171, 134, 141,
  199. // significant_coeff_flag
  200. 111, 111, 125, 110, 110, 94, 124, 108, 124, 107, 125, 141, 179, 153,
  201. 125, 107, 125, 141, 179, 153, 125, 107, 125, 141, 179, 153, 125, 140,
  202. 139, 182, 182, 152, 136, 152, 136, 153, 136, 139, 111, 136, 139, 111,
  203. 141, 111,
  204. // coeff_abs_level_greater1_flag
  205. 140, 92, 137, 138, 140, 152, 138, 139, 153, 74, 149, 92, 139, 107,
  206. 122, 152, 140, 179, 166, 182, 140, 227, 122, 197,
  207. // coeff_abs_level_greater2_flag
  208. 138, 153, 136, 167, 152, 152,
  209. // log2_res_scale_abs
  210. 154, 154, 154, 154, 154, 154, 154, 154,
  211. // res_scale_sign_flag
  212. 154, 154,
  213. // cu_chroma_qp_offset_flag
  214. 154,
  215. // cu_chroma_qp_offset_idx
  216. 154,
  217. },
  218. { // sao_merge_flag
  219. 153,
  220. // sao_type_idx
  221. 185,
  222. // split_coding_unit_flag
  223. 107, 139, 126,
  224. // cu_transquant_bypass_flag
  225. 154,
  226. // skip_flag
  227. 197, 185, 201,
  228. // cu_qp_delta
  229. 154, 154, 154,
  230. // pred_mode
  231. 149,
  232. // part_mode
  233. 154, 139, 154, 154,
  234. // prev_intra_luma_pred_mode
  235. 154,
  236. // intra_chroma_pred_mode
  237. 152, 139,
  238. // merge_flag
  239. 110,
  240. // merge_idx
  241. 122,
  242. // inter_pred_idc
  243. 95, 79, 63, 31, 31,
  244. // ref_idx_l0
  245. 153, 153,
  246. // ref_idx_l1
  247. 153, 153,
  248. // abs_mvd_greater1_flag
  249. 140, 198,
  250. // abs_mvd_greater1_flag
  251. 140, 198,
  252. // mvp_lx_flag
  253. 168,
  254. // no_residual_data_flag
  255. 79,
  256. // split_transform_flag
  257. 124, 138, 94,
  258. // cbf_luma
  259. 153, 111,
  260. // cbf_cb, cbf_cr
  261. 149, 107, 167, 154,
  262. // transform_skip_flag
  263. 139, 139,
  264. // explicit_rdpcm_flag
  265. 139, 139,
  266. // explicit_rdpcm_dir_flag
  267. 139, 139,
  268. // last_significant_coeff_x_prefix
  269. 125, 110, 94, 110, 95, 79, 125, 111, 110, 78, 110, 111, 111, 95,
  270. 94, 108, 123, 108,
  271. // last_significant_coeff_y_prefix
  272. 125, 110, 94, 110, 95, 79, 125, 111, 110, 78, 110, 111, 111, 95,
  273. 94, 108, 123, 108,
  274. // significant_coeff_group_flag
  275. 121, 140, 61, 154,
  276. // significant_coeff_flag
  277. 155, 154, 139, 153, 139, 123, 123, 63, 153, 166, 183, 140, 136, 153,
  278. 154, 166, 183, 140, 136, 153, 154, 166, 183, 140, 136, 153, 154, 170,
  279. 153, 123, 123, 107, 121, 107, 121, 167, 151, 183, 140, 151, 183, 140,
  280. 140, 140,
  281. // coeff_abs_level_greater1_flag
  282. 154, 196, 196, 167, 154, 152, 167, 182, 182, 134, 149, 136, 153, 121,
  283. 136, 137, 169, 194, 166, 167, 154, 167, 137, 182,
  284. // coeff_abs_level_greater2_flag
  285. 107, 167, 91, 122, 107, 167,
  286. // log2_res_scale_abs
  287. 154, 154, 154, 154, 154, 154, 154, 154,
  288. // res_scale_sign_flag
  289. 154, 154,
  290. // cu_chroma_qp_offset_flag
  291. 154,
  292. // cu_chroma_qp_offset_idx
  293. 154,
  294. },
  295. { // sao_merge_flag
  296. 153,
  297. // sao_type_idx
  298. 160,
  299. // split_coding_unit_flag
  300. 107, 139, 126,
  301. // cu_transquant_bypass_flag
  302. 154,
  303. // skip_flag
  304. 197, 185, 201,
  305. // cu_qp_delta
  306. 154, 154, 154,
  307. // pred_mode
  308. 134,
  309. // part_mode
  310. 154, 139, 154, 154,
  311. // prev_intra_luma_pred_mode
  312. 183,
  313. // intra_chroma_pred_mode
  314. 152, 139,
  315. // merge_flag
  316. 154,
  317. // merge_idx
  318. 137,
  319. // inter_pred_idc
  320. 95, 79, 63, 31, 31,
  321. // ref_idx_l0
  322. 153, 153,
  323. // ref_idx_l1
  324. 153, 153,
  325. // abs_mvd_greater1_flag
  326. 169, 198,
  327. // abs_mvd_greater1_flag
  328. 169, 198,
  329. // mvp_lx_flag
  330. 168,
  331. // no_residual_data_flag
  332. 79,
  333. // split_transform_flag
  334. 224, 167, 122,
  335. // cbf_luma
  336. 153, 111,
  337. // cbf_cb, cbf_cr
  338. 149, 92, 167, 154,
  339. // transform_skip_flag
  340. 139, 139,
  341. // explicit_rdpcm_flag
  342. 139, 139,
  343. // explicit_rdpcm_dir_flag
  344. 139, 139,
  345. // last_significant_coeff_x_prefix
  346. 125, 110, 124, 110, 95, 94, 125, 111, 111, 79, 125, 126, 111, 111,
  347. 79, 108, 123, 93,
  348. // last_significant_coeff_y_prefix
  349. 125, 110, 124, 110, 95, 94, 125, 111, 111, 79, 125, 126, 111, 111,
  350. 79, 108, 123, 93,
  351. // significant_coeff_group_flag
  352. 121, 140, 61, 154,
  353. // significant_coeff_flag
  354. 170, 154, 139, 153, 139, 123, 123, 63, 124, 166, 183, 140, 136, 153,
  355. 154, 166, 183, 140, 136, 153, 154, 166, 183, 140, 136, 153, 154, 170,
  356. 153, 138, 138, 122, 121, 122, 121, 167, 151, 183, 140, 151, 183, 140,
  357. 140, 140,
  358. // coeff_abs_level_greater1_flag
  359. 154, 196, 167, 167, 154, 152, 167, 182, 182, 134, 149, 136, 153, 121,
  360. 136, 122, 169, 208, 166, 167, 154, 152, 167, 182,
  361. // coeff_abs_level_greater2_flag
  362. 107, 167, 91, 107, 107, 167,
  363. // log2_res_scale_abs
  364. 154, 154, 154, 154, 154, 154, 154, 154,
  365. // res_scale_sign_flag
  366. 154, 154,
  367. // cu_chroma_qp_offset_flag
  368. 154,
  369. // cu_chroma_qp_offset_idx
  370. 154,
  371. },
  372. };
  373. static const uint8_t scan_1x1[1] = {
  374. 0,
  375. };
  376. static const uint8_t horiz_scan2x2_x[4] = {
  377. 0, 1, 0, 1,
  378. };
  379. static const uint8_t horiz_scan2x2_y[4] = {
  380. 0, 0, 1, 1
  381. };
  382. static const uint8_t horiz_scan4x4_x[16] = {
  383. 0, 1, 2, 3,
  384. 0, 1, 2, 3,
  385. 0, 1, 2, 3,
  386. 0, 1, 2, 3,
  387. };
  388. static const uint8_t horiz_scan4x4_y[16] = {
  389. 0, 0, 0, 0,
  390. 1, 1, 1, 1,
  391. 2, 2, 2, 2,
  392. 3, 3, 3, 3,
  393. };
  394. static const uint8_t horiz_scan8x8_inv[8][8] = {
  395. { 0, 1, 2, 3, 16, 17, 18, 19, },
  396. { 4, 5, 6, 7, 20, 21, 22, 23, },
  397. { 8, 9, 10, 11, 24, 25, 26, 27, },
  398. { 12, 13, 14, 15, 28, 29, 30, 31, },
  399. { 32, 33, 34, 35, 48, 49, 50, 51, },
  400. { 36, 37, 38, 39, 52, 53, 54, 55, },
  401. { 40, 41, 42, 43, 56, 57, 58, 59, },
  402. { 44, 45, 46, 47, 60, 61, 62, 63, },
  403. };
  404. static const uint8_t diag_scan2x2_x[4] = {
  405. 0, 0, 1, 1,
  406. };
  407. static const uint8_t diag_scan2x2_y[4] = {
  408. 0, 1, 0, 1,
  409. };
  410. static const uint8_t diag_scan2x2_inv[2][2] = {
  411. { 0, 2, },
  412. { 1, 3, },
  413. };
  414. static const uint8_t diag_scan4x4_inv[4][4] = {
  415. { 0, 2, 5, 9, },
  416. { 1, 4, 8, 12, },
  417. { 3, 7, 11, 14, },
  418. { 6, 10, 13, 15, },
  419. };
  420. static const uint8_t diag_scan8x8_inv[8][8] = {
  421. { 0, 2, 5, 9, 14, 20, 27, 35, },
  422. { 1, 4, 8, 13, 19, 26, 34, 42, },
  423. { 3, 7, 12, 18, 25, 33, 41, 48, },
  424. { 6, 11, 17, 24, 32, 40, 47, 53, },
  425. { 10, 16, 23, 31, 39, 46, 52, 57, },
  426. { 15, 22, 30, 38, 45, 51, 56, 60, },
  427. { 21, 29, 37, 44, 50, 55, 59, 62, },
  428. { 28, 36, 43, 49, 54, 58, 61, 63, },
  429. };
  430. void ff_hevc_save_states(HEVCContext *s, int ctb_addr_ts)
  431. {
  432. if (s->ps.pps->entropy_coding_sync_enabled_flag &&
  433. (ctb_addr_ts % s->ps.sps->ctb_width == 2 ||
  434. (s->ps.sps->ctb_width == 2 &&
  435. ctb_addr_ts % s->ps.sps->ctb_width == 0))) {
  436. memcpy(s->cabac_state, s->HEVClc->cabac_state, HEVC_CONTEXTS);
  437. }
  438. }
  439. static void load_states(HEVCContext *s)
  440. {
  441. memcpy(s->HEVClc->cabac_state, s->cabac_state, HEVC_CONTEXTS);
  442. }
  443. static void cabac_reinit(HEVCLocalContext *lc)
  444. {
  445. skip_bytes(&lc->cc, 0);
  446. }
  447. static void cabac_init_decoder(HEVCContext *s)
  448. {
  449. GetBitContext *gb = &s->HEVClc->gb;
  450. skip_bits(gb, 1);
  451. align_get_bits(gb);
  452. ff_init_cabac_decoder(&s->HEVClc->cc,
  453. gb->buffer + get_bits_count(gb) / 8,
  454. (get_bits_left(gb) + 7) / 8);
  455. }
  456. static void cabac_init_state(HEVCContext *s)
  457. {
  458. int init_type = 2 - s->sh.slice_type;
  459. int i;
  460. if (s->sh.cabac_init_flag && s->sh.slice_type != I_SLICE)
  461. init_type ^= 3;
  462. for (i = 0; i < HEVC_CONTEXTS; i++) {
  463. int init_value = init_values[init_type][i];
  464. int m = (init_value >> 4) * 5 - 45;
  465. int n = ((init_value & 15) << 3) - 16;
  466. int pre = 2 * (((m * av_clip(s->sh.slice_qp, 0, 51)) >> 4) + n) - 127;
  467. pre ^= pre >> 31;
  468. if (pre > 124)
  469. pre = 124 + (pre & 1);
  470. s->HEVClc->cabac_state[i] = pre;
  471. }
  472. for (i = 0; i < 4; i++)
  473. s->HEVClc->stat_coeff[i] = 0;
  474. }
  475. void ff_hevc_cabac_init(HEVCContext *s, int ctb_addr_ts)
  476. {
  477. if (ctb_addr_ts == s->ps.pps->ctb_addr_rs_to_ts[s->sh.slice_ctb_addr_rs]) {
  478. cabac_init_decoder(s);
  479. if (s->sh.dependent_slice_segment_flag == 0 ||
  480. (s->ps.pps->tiles_enabled_flag &&
  481. s->ps.pps->tile_id[ctb_addr_ts] != s->ps.pps->tile_id[ctb_addr_ts - 1]))
  482. cabac_init_state(s);
  483. if (!s->sh.first_slice_in_pic_flag &&
  484. s->ps.pps->entropy_coding_sync_enabled_flag) {
  485. if (ctb_addr_ts % s->ps.sps->ctb_width == 0) {
  486. if (s->ps.sps->ctb_width == 1)
  487. cabac_init_state(s);
  488. else if (s->sh.dependent_slice_segment_flag == 1)
  489. load_states(s);
  490. }
  491. }
  492. } else {
  493. if (s->ps.pps->tiles_enabled_flag &&
  494. s->ps.pps->tile_id[ctb_addr_ts] != s->ps.pps->tile_id[ctb_addr_ts - 1]) {
  495. if (s->threads_number == 1)
  496. cabac_reinit(s->HEVClc);
  497. else
  498. cabac_init_decoder(s);
  499. cabac_init_state(s);
  500. }
  501. if (s->ps.pps->entropy_coding_sync_enabled_flag) {
  502. if (ctb_addr_ts % s->ps.sps->ctb_width == 0) {
  503. get_cabac_terminate(&s->HEVClc->cc);
  504. if (s->threads_number == 1)
  505. cabac_reinit(s->HEVClc);
  506. else
  507. cabac_init_decoder(s);
  508. if (s->ps.sps->ctb_width == 1)
  509. cabac_init_state(s);
  510. else
  511. load_states(s);
  512. }
  513. }
  514. }
  515. }
  516. #define GET_CABAC(ctx) get_cabac(&s->HEVClc->cc, &s->HEVClc->cabac_state[ctx])
  517. int ff_hevc_sao_merge_flag_decode(HEVCContext *s)
  518. {
  519. return GET_CABAC(elem_offset[SAO_MERGE_FLAG]);
  520. }
  521. int ff_hevc_sao_type_idx_decode(HEVCContext *s)
  522. {
  523. if (!GET_CABAC(elem_offset[SAO_TYPE_IDX]))
  524. return 0;
  525. if (!get_cabac_bypass(&s->HEVClc->cc))
  526. return SAO_BAND;
  527. return SAO_EDGE;
  528. }
  529. int ff_hevc_sao_band_position_decode(HEVCContext *s)
  530. {
  531. int i;
  532. int value = get_cabac_bypass(&s->HEVClc->cc);
  533. for (i = 0; i < 4; i++)
  534. value = (value << 1) | get_cabac_bypass(&s->HEVClc->cc);
  535. return value;
  536. }
  537. int ff_hevc_sao_offset_abs_decode(HEVCContext *s)
  538. {
  539. int i = 0;
  540. int length = (1 << (FFMIN(s->ps.sps->bit_depth, 10) - 5)) - 1;
  541. while (i < length && get_cabac_bypass(&s->HEVClc->cc))
  542. i++;
  543. return i;
  544. }
  545. int ff_hevc_sao_offset_sign_decode(HEVCContext *s)
  546. {
  547. return get_cabac_bypass(&s->HEVClc->cc);
  548. }
  549. int ff_hevc_sao_eo_class_decode(HEVCContext *s)
  550. {
  551. int ret = get_cabac_bypass(&s->HEVClc->cc) << 1;
  552. ret |= get_cabac_bypass(&s->HEVClc->cc);
  553. return ret;
  554. }
  555. int ff_hevc_end_of_slice_flag_decode(HEVCContext *s)
  556. {
  557. return get_cabac_terminate(&s->HEVClc->cc);
  558. }
  559. int ff_hevc_cu_transquant_bypass_flag_decode(HEVCContext *s)
  560. {
  561. return GET_CABAC(elem_offset[CU_TRANSQUANT_BYPASS_FLAG]);
  562. }
  563. int ff_hevc_skip_flag_decode(HEVCContext *s, int x0, int y0, int x_cb, int y_cb)
  564. {
  565. int min_cb_width = s->ps.sps->min_cb_width;
  566. int inc = 0;
  567. int x0b = av_mod_uintp2(x0, s->ps.sps->log2_ctb_size);
  568. int y0b = av_mod_uintp2(y0, s->ps.sps->log2_ctb_size);
  569. if (s->HEVClc->ctb_left_flag || x0b)
  570. inc = !!SAMPLE_CTB(s->skip_flag, x_cb - 1, y_cb);
  571. if (s->HEVClc->ctb_up_flag || y0b)
  572. inc += !!SAMPLE_CTB(s->skip_flag, x_cb, y_cb - 1);
  573. return GET_CABAC(elem_offset[SKIP_FLAG] + inc);
  574. }
  575. int ff_hevc_cu_qp_delta_abs(HEVCContext *s)
  576. {
  577. int prefix_val = 0;
  578. int suffix_val = 0;
  579. int inc = 0;
  580. while (prefix_val < 5 && GET_CABAC(elem_offset[CU_QP_DELTA] + inc)) {
  581. prefix_val++;
  582. inc = 1;
  583. }
  584. if (prefix_val >= 5) {
  585. int k = 0;
  586. while (k < CABAC_MAX_BIN && get_cabac_bypass(&s->HEVClc->cc)) {
  587. suffix_val += 1 << k;
  588. k++;
  589. }
  590. if (k == CABAC_MAX_BIN) {
  591. av_log(s->avctx, AV_LOG_ERROR, "CABAC_MAX_BIN : %d\n", k);
  592. return AVERROR_INVALIDDATA;
  593. }
  594. while (k--)
  595. suffix_val += get_cabac_bypass(&s->HEVClc->cc) << k;
  596. }
  597. return prefix_val + suffix_val;
  598. }
  599. int ff_hevc_cu_qp_delta_sign_flag(HEVCContext *s)
  600. {
  601. return get_cabac_bypass(&s->HEVClc->cc);
  602. }
  603. int ff_hevc_cu_chroma_qp_offset_flag(HEVCContext *s)
  604. {
  605. return GET_CABAC(elem_offset[CU_CHROMA_QP_OFFSET_FLAG]);
  606. }
  607. int ff_hevc_cu_chroma_qp_offset_idx(HEVCContext *s)
  608. {
  609. int c_max= FFMAX(5, s->ps.pps->chroma_qp_offset_list_len_minus1);
  610. int i = 0;
  611. while (i < c_max && GET_CABAC(elem_offset[CU_CHROMA_QP_OFFSET_IDX]))
  612. i++;
  613. return i;
  614. }
  615. int ff_hevc_pred_mode_decode(HEVCContext *s)
  616. {
  617. return GET_CABAC(elem_offset[PRED_MODE_FLAG]);
  618. }
  619. int ff_hevc_split_coding_unit_flag_decode(HEVCContext *s, int ct_depth, int x0, int y0)
  620. {
  621. int inc = 0, depth_left = 0, depth_top = 0;
  622. int x0b = av_mod_uintp2(x0, s->ps.sps->log2_ctb_size);
  623. int y0b = av_mod_uintp2(y0, s->ps.sps->log2_ctb_size);
  624. int x_cb = x0 >> s->ps.sps->log2_min_cb_size;
  625. int y_cb = y0 >> s->ps.sps->log2_min_cb_size;
  626. if (s->HEVClc->ctb_left_flag || x0b)
  627. depth_left = s->tab_ct_depth[(y_cb) * s->ps.sps->min_cb_width + x_cb - 1];
  628. if (s->HEVClc->ctb_up_flag || y0b)
  629. depth_top = s->tab_ct_depth[(y_cb - 1) * s->ps.sps->min_cb_width + x_cb];
  630. inc += (depth_left > ct_depth);
  631. inc += (depth_top > ct_depth);
  632. return GET_CABAC(elem_offset[SPLIT_CODING_UNIT_FLAG] + inc);
  633. }
  634. int ff_hevc_part_mode_decode(HEVCContext *s, int log2_cb_size)
  635. {
  636. if (GET_CABAC(elem_offset[PART_MODE])) // 1
  637. return PART_2Nx2N;
  638. if (log2_cb_size == s->ps.sps->log2_min_cb_size) {
  639. if (s->HEVClc->cu.pred_mode == MODE_INTRA) // 0
  640. return PART_NxN;
  641. if (GET_CABAC(elem_offset[PART_MODE] + 1)) // 01
  642. return PART_2NxN;
  643. if (log2_cb_size == 3) // 00
  644. return PART_Nx2N;
  645. if (GET_CABAC(elem_offset[PART_MODE] + 2)) // 001
  646. return PART_Nx2N;
  647. return PART_NxN; // 000
  648. }
  649. if (!s->ps.sps->amp_enabled_flag) {
  650. if (GET_CABAC(elem_offset[PART_MODE] + 1)) // 01
  651. return PART_2NxN;
  652. return PART_Nx2N;
  653. }
  654. if (GET_CABAC(elem_offset[PART_MODE] + 1)) { // 01X, 01XX
  655. if (GET_CABAC(elem_offset[PART_MODE] + 3)) // 011
  656. return PART_2NxN;
  657. if (get_cabac_bypass(&s->HEVClc->cc)) // 0101
  658. return PART_2NxnD;
  659. return PART_2NxnU; // 0100
  660. }
  661. if (GET_CABAC(elem_offset[PART_MODE] + 3)) // 001
  662. return PART_Nx2N;
  663. if (get_cabac_bypass(&s->HEVClc->cc)) // 0001
  664. return PART_nRx2N;
  665. return PART_nLx2N; // 0000
  666. }
  667. int ff_hevc_pcm_flag_decode(HEVCContext *s)
  668. {
  669. return get_cabac_terminate(&s->HEVClc->cc);
  670. }
  671. int ff_hevc_prev_intra_luma_pred_flag_decode(HEVCContext *s)
  672. {
  673. return GET_CABAC(elem_offset[PREV_INTRA_LUMA_PRED_FLAG]);
  674. }
  675. int ff_hevc_mpm_idx_decode(HEVCContext *s)
  676. {
  677. int i = 0;
  678. while (i < 2 && get_cabac_bypass(&s->HEVClc->cc))
  679. i++;
  680. return i;
  681. }
  682. int ff_hevc_rem_intra_luma_pred_mode_decode(HEVCContext *s)
  683. {
  684. int i;
  685. int value = get_cabac_bypass(&s->HEVClc->cc);
  686. for (i = 0; i < 4; i++)
  687. value = (value << 1) | get_cabac_bypass(&s->HEVClc->cc);
  688. return value;
  689. }
  690. int ff_hevc_intra_chroma_pred_mode_decode(HEVCContext *s)
  691. {
  692. int ret;
  693. if (!GET_CABAC(elem_offset[INTRA_CHROMA_PRED_MODE]))
  694. return 4;
  695. ret = get_cabac_bypass(&s->HEVClc->cc) << 1;
  696. ret |= get_cabac_bypass(&s->HEVClc->cc);
  697. return ret;
  698. }
  699. int ff_hevc_merge_idx_decode(HEVCContext *s)
  700. {
  701. int i = GET_CABAC(elem_offset[MERGE_IDX]);
  702. if (i != 0) {
  703. while (i < s->sh.max_num_merge_cand-1 && get_cabac_bypass(&s->HEVClc->cc))
  704. i++;
  705. }
  706. return i;
  707. }
  708. int ff_hevc_merge_flag_decode(HEVCContext *s)
  709. {
  710. return GET_CABAC(elem_offset[MERGE_FLAG]);
  711. }
  712. int ff_hevc_inter_pred_idc_decode(HEVCContext *s, int nPbW, int nPbH)
  713. {
  714. if (nPbW + nPbH == 12)
  715. return GET_CABAC(elem_offset[INTER_PRED_IDC] + 4);
  716. if (GET_CABAC(elem_offset[INTER_PRED_IDC] + s->HEVClc->ct_depth))
  717. return PRED_BI;
  718. return GET_CABAC(elem_offset[INTER_PRED_IDC] + 4);
  719. }
  720. int ff_hevc_ref_idx_lx_decode(HEVCContext *s, int num_ref_idx_lx)
  721. {
  722. int i = 0;
  723. int max = num_ref_idx_lx - 1;
  724. int max_ctx = FFMIN(max, 2);
  725. while (i < max_ctx && GET_CABAC(elem_offset[REF_IDX_L0] + i))
  726. i++;
  727. if (i == 2) {
  728. while (i < max && get_cabac_bypass(&s->HEVClc->cc))
  729. i++;
  730. }
  731. return i;
  732. }
  733. int ff_hevc_mvp_lx_flag_decode(HEVCContext *s)
  734. {
  735. return GET_CABAC(elem_offset[MVP_LX_FLAG]);
  736. }
  737. int ff_hevc_no_residual_syntax_flag_decode(HEVCContext *s)
  738. {
  739. return GET_CABAC(elem_offset[NO_RESIDUAL_DATA_FLAG]);
  740. }
  741. static av_always_inline int abs_mvd_greater0_flag_decode(HEVCContext *s)
  742. {
  743. return GET_CABAC(elem_offset[ABS_MVD_GREATER0_FLAG]);
  744. }
  745. static av_always_inline int abs_mvd_greater1_flag_decode(HEVCContext *s)
  746. {
  747. return GET_CABAC(elem_offset[ABS_MVD_GREATER1_FLAG] + 1);
  748. }
  749. static av_always_inline int mvd_decode(HEVCContext *s)
  750. {
  751. int ret = 2;
  752. int k = 1;
  753. while (k < CABAC_MAX_BIN && get_cabac_bypass(&s->HEVClc->cc)) {
  754. ret += 1U << k;
  755. k++;
  756. }
  757. if (k == CABAC_MAX_BIN) {
  758. av_log(s->avctx, AV_LOG_ERROR, "CABAC_MAX_BIN : %d\n", k);
  759. return 0;
  760. }
  761. while (k--)
  762. ret += get_cabac_bypass(&s->HEVClc->cc) << k;
  763. return get_cabac_bypass_sign(&s->HEVClc->cc, -ret);
  764. }
  765. static av_always_inline int mvd_sign_flag_decode(HEVCContext *s)
  766. {
  767. return get_cabac_bypass_sign(&s->HEVClc->cc, -1);
  768. }
  769. int ff_hevc_split_transform_flag_decode(HEVCContext *s, int log2_trafo_size)
  770. {
  771. return GET_CABAC(elem_offset[SPLIT_TRANSFORM_FLAG] + 5 - log2_trafo_size);
  772. }
  773. int ff_hevc_cbf_cb_cr_decode(HEVCContext *s, int trafo_depth)
  774. {
  775. return GET_CABAC(elem_offset[CBF_CB_CR] + trafo_depth);
  776. }
  777. int ff_hevc_cbf_luma_decode(HEVCContext *s, int trafo_depth)
  778. {
  779. return GET_CABAC(elem_offset[CBF_LUMA] + !trafo_depth);
  780. }
  781. static int hevc_transform_skip_flag_decode(HEVCContext *s, int c_idx)
  782. {
  783. return GET_CABAC(elem_offset[TRANSFORM_SKIP_FLAG] + !!c_idx);
  784. }
  785. static int explicit_rdpcm_flag_decode(HEVCContext *s, int c_idx)
  786. {
  787. return GET_CABAC(elem_offset[EXPLICIT_RDPCM_FLAG] + !!c_idx);
  788. }
  789. static int explicit_rdpcm_dir_flag_decode(HEVCContext *s, int c_idx)
  790. {
  791. return GET_CABAC(elem_offset[EXPLICIT_RDPCM_DIR_FLAG] + !!c_idx);
  792. }
  793. int ff_hevc_log2_res_scale_abs(HEVCContext *s, int idx) {
  794. int i =0;
  795. while (i < 4 && GET_CABAC(elem_offset[LOG2_RES_SCALE_ABS] + 4 * idx + i))
  796. i++;
  797. return i;
  798. }
  799. int ff_hevc_res_scale_sign_flag(HEVCContext *s, int idx) {
  800. return GET_CABAC(elem_offset[RES_SCALE_SIGN_FLAG] + idx);
  801. }
  802. static av_always_inline void last_significant_coeff_xy_prefix_decode(HEVCContext *s, int c_idx,
  803. int log2_size, int *last_scx_prefix, int *last_scy_prefix)
  804. {
  805. int i = 0;
  806. int max = (log2_size << 1) - 1;
  807. int ctx_offset, ctx_shift;
  808. if (!c_idx) {
  809. ctx_offset = 3 * (log2_size - 2) + ((log2_size - 1) >> 2);
  810. ctx_shift = (log2_size + 1) >> 2;
  811. } else {
  812. ctx_offset = 15;
  813. ctx_shift = log2_size - 2;
  814. }
  815. while (i < max &&
  816. GET_CABAC(elem_offset[LAST_SIGNIFICANT_COEFF_X_PREFIX] + (i >> ctx_shift) + ctx_offset))
  817. i++;
  818. *last_scx_prefix = i;
  819. i = 0;
  820. while (i < max &&
  821. GET_CABAC(elem_offset[LAST_SIGNIFICANT_COEFF_Y_PREFIX] + (i >> ctx_shift) + ctx_offset))
  822. i++;
  823. *last_scy_prefix = i;
  824. }
  825. static av_always_inline int last_significant_coeff_suffix_decode(HEVCContext *s,
  826. int last_significant_coeff_prefix)
  827. {
  828. int i;
  829. int length = (last_significant_coeff_prefix >> 1) - 1;
  830. int value = get_cabac_bypass(&s->HEVClc->cc);
  831. for (i = 1; i < length; i++)
  832. value = (value << 1) | get_cabac_bypass(&s->HEVClc->cc);
  833. return value;
  834. }
  835. static av_always_inline int significant_coeff_group_flag_decode(HEVCContext *s, int c_idx, int ctx_cg)
  836. {
  837. int inc;
  838. inc = FFMIN(ctx_cg, 1) + (c_idx>0 ? 2 : 0);
  839. return GET_CABAC(elem_offset[SIGNIFICANT_COEFF_GROUP_FLAG] + inc);
  840. }
  841. static av_always_inline int significant_coeff_flag_decode(HEVCContext *s, int x_c, int y_c,
  842. int offset, const uint8_t *ctx_idx_map)
  843. {
  844. int inc = ctx_idx_map[(y_c << 2) + x_c] + offset;
  845. return GET_CABAC(elem_offset[SIGNIFICANT_COEFF_FLAG] + inc);
  846. }
  847. static av_always_inline int significant_coeff_flag_decode_0(HEVCContext *s, int c_idx, int offset)
  848. {
  849. return GET_CABAC(elem_offset[SIGNIFICANT_COEFF_FLAG] + offset);
  850. }
  851. static av_always_inline int coeff_abs_level_greater1_flag_decode(HEVCContext *s, int c_idx, int inc)
  852. {
  853. if (c_idx > 0)
  854. inc += 16;
  855. return GET_CABAC(elem_offset[COEFF_ABS_LEVEL_GREATER1_FLAG] + inc);
  856. }
  857. static av_always_inline int coeff_abs_level_greater2_flag_decode(HEVCContext *s, int c_idx, int inc)
  858. {
  859. if (c_idx > 0)
  860. inc += 4;
  861. return GET_CABAC(elem_offset[COEFF_ABS_LEVEL_GREATER2_FLAG] + inc);
  862. }
  863. static av_always_inline int coeff_abs_level_remaining_decode(HEVCContext *s, int rc_rice_param)
  864. {
  865. int prefix = 0;
  866. int suffix = 0;
  867. int last_coeff_abs_level_remaining;
  868. int i;
  869. while (prefix < CABAC_MAX_BIN && get_cabac_bypass(&s->HEVClc->cc))
  870. prefix++;
  871. if (prefix < 3) {
  872. for (i = 0; i < rc_rice_param; i++)
  873. suffix = (suffix << 1) | get_cabac_bypass(&s->HEVClc->cc);
  874. last_coeff_abs_level_remaining = (prefix << rc_rice_param) + suffix;
  875. } else {
  876. int prefix_minus3 = prefix - 3;
  877. if (prefix == CABAC_MAX_BIN || prefix_minus3 + rc_rice_param >= 31) {
  878. av_log(s->avctx, AV_LOG_ERROR, "CABAC_MAX_BIN : %d\n", prefix);
  879. return 0;
  880. }
  881. for (i = 0; i < prefix_minus3 + rc_rice_param; i++)
  882. suffix = (suffix << 1) | get_cabac_bypass(&s->HEVClc->cc);
  883. last_coeff_abs_level_remaining = (((1 << prefix_minus3) + 3 - 1)
  884. << rc_rice_param) + suffix;
  885. }
  886. return last_coeff_abs_level_remaining;
  887. }
  888. static av_always_inline int coeff_sign_flag_decode(HEVCContext *s, uint8_t nb)
  889. {
  890. int i;
  891. int ret = 0;
  892. for (i = 0; i < nb; i++)
  893. ret = (ret << 1) | get_cabac_bypass(&s->HEVClc->cc);
  894. return ret;
  895. }
  896. void ff_hevc_hls_residual_coding(HEVCContext *s, int x0, int y0,
  897. int log2_trafo_size, enum ScanType scan_idx,
  898. int c_idx)
  899. {
  900. #define GET_COORD(offset, n) \
  901. do { \
  902. x_c = (x_cg << 2) + scan_x_off[n]; \
  903. y_c = (y_cg << 2) + scan_y_off[n]; \
  904. } while (0)
  905. HEVCLocalContext *lc = s->HEVClc;
  906. int transform_skip_flag = 0;
  907. int last_significant_coeff_x, last_significant_coeff_y;
  908. int last_scan_pos;
  909. int n_end;
  910. int num_coeff = 0;
  911. int greater1_ctx = 1;
  912. int num_last_subset;
  913. int x_cg_last_sig, y_cg_last_sig;
  914. const uint8_t *scan_x_cg, *scan_y_cg, *scan_x_off, *scan_y_off;
  915. ptrdiff_t stride = s->frame->linesize[c_idx];
  916. int hshift = s->ps.sps->hshift[c_idx];
  917. int vshift = s->ps.sps->vshift[c_idx];
  918. uint8_t *dst = &s->frame->data[c_idx][(y0 >> vshift) * stride +
  919. ((x0 >> hshift) << s->ps.sps->pixel_shift)];
  920. int16_t *coeffs = (int16_t*)(c_idx ? lc->edge_emu_buffer2 : lc->edge_emu_buffer);
  921. uint8_t significant_coeff_group_flag[8][8] = {{0}};
  922. int explicit_rdpcm_flag = 0;
  923. int explicit_rdpcm_dir_flag;
  924. int trafo_size = 1 << log2_trafo_size;
  925. int i;
  926. int qp,shift,add,scale,scale_m;
  927. const uint8_t level_scale[] = { 40, 45, 51, 57, 64, 72 };
  928. const uint8_t *scale_matrix = NULL;
  929. uint8_t dc_scale;
  930. int pred_mode_intra = (c_idx == 0) ? lc->tu.intra_pred_mode :
  931. lc->tu.intra_pred_mode_c;
  932. memset(coeffs, 0, trafo_size * trafo_size * sizeof(int16_t));
  933. // Derive QP for dequant
  934. if (!lc->cu.cu_transquant_bypass_flag) {
  935. static const int qp_c[] = { 29, 30, 31, 32, 33, 33, 34, 34, 35, 35, 36, 36, 37, 37 };
  936. static const uint8_t rem6[51 + 4 * 6 + 1] = {
  937. 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2,
  938. 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,
  939. 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,
  940. 4, 5, 0, 1, 2, 3, 4, 5, 0, 1
  941. };
  942. static const uint8_t div6[51 + 4 * 6 + 1] = {
  943. 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3,
  944. 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6,
  945. 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10,
  946. 10, 10, 11, 11, 11, 11, 11, 11, 12, 12
  947. };
  948. int qp_y = lc->qp_y;
  949. if (s->ps.pps->transform_skip_enabled_flag &&
  950. log2_trafo_size <= s->ps.pps->log2_max_transform_skip_block_size) {
  951. transform_skip_flag = hevc_transform_skip_flag_decode(s, c_idx);
  952. }
  953. if (c_idx == 0) {
  954. qp = qp_y + s->ps.sps->qp_bd_offset;
  955. } else {
  956. int qp_i, offset;
  957. if (c_idx == 1)
  958. offset = s->ps.pps->cb_qp_offset + s->sh.slice_cb_qp_offset +
  959. lc->tu.cu_qp_offset_cb;
  960. else
  961. offset = s->ps.pps->cr_qp_offset + s->sh.slice_cr_qp_offset +
  962. lc->tu.cu_qp_offset_cr;
  963. qp_i = av_clip(qp_y + offset, - s->ps.sps->qp_bd_offset, 57);
  964. if (s->ps.sps->chroma_format_idc == 1) {
  965. if (qp_i < 30)
  966. qp = qp_i;
  967. else if (qp_i > 43)
  968. qp = qp_i - 6;
  969. else
  970. qp = qp_c[qp_i - 30];
  971. } else {
  972. if (qp_i > 51)
  973. qp = 51;
  974. else
  975. qp = qp_i;
  976. }
  977. qp += s->ps.sps->qp_bd_offset;
  978. }
  979. shift = s->ps.sps->bit_depth + log2_trafo_size - 5;
  980. add = 1 << (shift-1);
  981. scale = level_scale[rem6[qp]] << (div6[qp]);
  982. scale_m = 16; // default when no custom scaling lists.
  983. dc_scale = 16;
  984. if (s->ps.sps->scaling_list_enable_flag && !(transform_skip_flag && log2_trafo_size > 2)) {
  985. const ScalingList *sl = s->ps.pps->scaling_list_data_present_flag ?
  986. &s->ps.pps->scaling_list : &s->ps.sps->scaling_list;
  987. int matrix_id = lc->cu.pred_mode != MODE_INTRA;
  988. matrix_id = 3 * matrix_id + c_idx;
  989. scale_matrix = sl->sl[log2_trafo_size - 2][matrix_id];
  990. if (log2_trafo_size >= 4)
  991. dc_scale = sl->sl_dc[log2_trafo_size - 4][matrix_id];
  992. }
  993. } else {
  994. shift = 0;
  995. add = 0;
  996. scale = 0;
  997. dc_scale = 0;
  998. }
  999. if (lc->cu.pred_mode == MODE_INTER && s->ps.sps->explicit_rdpcm_enabled_flag &&
  1000. (transform_skip_flag || lc->cu.cu_transquant_bypass_flag)) {
  1001. explicit_rdpcm_flag = explicit_rdpcm_flag_decode(s, c_idx);
  1002. if (explicit_rdpcm_flag) {
  1003. explicit_rdpcm_dir_flag = explicit_rdpcm_dir_flag_decode(s, c_idx);
  1004. }
  1005. }
  1006. last_significant_coeff_xy_prefix_decode(s, c_idx, log2_trafo_size,
  1007. &last_significant_coeff_x, &last_significant_coeff_y);
  1008. if (last_significant_coeff_x > 3) {
  1009. int suffix = last_significant_coeff_suffix_decode(s, last_significant_coeff_x);
  1010. last_significant_coeff_x = (1 << ((last_significant_coeff_x >> 1) - 1)) *
  1011. (2 + (last_significant_coeff_x & 1)) +
  1012. suffix;
  1013. }
  1014. if (last_significant_coeff_y > 3) {
  1015. int suffix = last_significant_coeff_suffix_decode(s, last_significant_coeff_y);
  1016. last_significant_coeff_y = (1 << ((last_significant_coeff_y >> 1) - 1)) *
  1017. (2 + (last_significant_coeff_y & 1)) +
  1018. suffix;
  1019. }
  1020. if (scan_idx == SCAN_VERT)
  1021. FFSWAP(int, last_significant_coeff_x, last_significant_coeff_y);
  1022. x_cg_last_sig = last_significant_coeff_x >> 2;
  1023. y_cg_last_sig = last_significant_coeff_y >> 2;
  1024. switch (scan_idx) {
  1025. case SCAN_DIAG: {
  1026. int last_x_c = last_significant_coeff_x & 3;
  1027. int last_y_c = last_significant_coeff_y & 3;
  1028. scan_x_off = ff_hevc_diag_scan4x4_x;
  1029. scan_y_off = ff_hevc_diag_scan4x4_y;
  1030. num_coeff = diag_scan4x4_inv[last_y_c][last_x_c];
  1031. if (trafo_size == 4) {
  1032. scan_x_cg = scan_1x1;
  1033. scan_y_cg = scan_1x1;
  1034. } else if (trafo_size == 8) {
  1035. num_coeff += diag_scan2x2_inv[y_cg_last_sig][x_cg_last_sig] << 4;
  1036. scan_x_cg = diag_scan2x2_x;
  1037. scan_y_cg = diag_scan2x2_y;
  1038. } else if (trafo_size == 16) {
  1039. num_coeff += diag_scan4x4_inv[y_cg_last_sig][x_cg_last_sig] << 4;
  1040. scan_x_cg = ff_hevc_diag_scan4x4_x;
  1041. scan_y_cg = ff_hevc_diag_scan4x4_y;
  1042. } else { // trafo_size == 32
  1043. num_coeff += diag_scan8x8_inv[y_cg_last_sig][x_cg_last_sig] << 4;
  1044. scan_x_cg = ff_hevc_diag_scan8x8_x;
  1045. scan_y_cg = ff_hevc_diag_scan8x8_y;
  1046. }
  1047. break;
  1048. }
  1049. case SCAN_HORIZ:
  1050. scan_x_cg = horiz_scan2x2_x;
  1051. scan_y_cg = horiz_scan2x2_y;
  1052. scan_x_off = horiz_scan4x4_x;
  1053. scan_y_off = horiz_scan4x4_y;
  1054. num_coeff = horiz_scan8x8_inv[last_significant_coeff_y][last_significant_coeff_x];
  1055. break;
  1056. default: //SCAN_VERT
  1057. scan_x_cg = horiz_scan2x2_y;
  1058. scan_y_cg = horiz_scan2x2_x;
  1059. scan_x_off = horiz_scan4x4_y;
  1060. scan_y_off = horiz_scan4x4_x;
  1061. num_coeff = horiz_scan8x8_inv[last_significant_coeff_x][last_significant_coeff_y];
  1062. break;
  1063. }
  1064. num_coeff++;
  1065. num_last_subset = (num_coeff - 1) >> 4;
  1066. for (i = num_last_subset; i >= 0; i--) {
  1067. int n, m;
  1068. int x_cg, y_cg, x_c, y_c, pos;
  1069. int implicit_non_zero_coeff = 0;
  1070. int64_t trans_coeff_level;
  1071. int prev_sig = 0;
  1072. int offset = i << 4;
  1073. int rice_init = 0;
  1074. uint8_t significant_coeff_flag_idx[16];
  1075. uint8_t nb_significant_coeff_flag = 0;
  1076. x_cg = scan_x_cg[i];
  1077. y_cg = scan_y_cg[i];
  1078. if ((i < num_last_subset) && (i > 0)) {
  1079. int ctx_cg = 0;
  1080. if (x_cg < (1 << (log2_trafo_size - 2)) - 1)
  1081. ctx_cg += significant_coeff_group_flag[x_cg + 1][y_cg];
  1082. if (y_cg < (1 << (log2_trafo_size - 2)) - 1)
  1083. ctx_cg += significant_coeff_group_flag[x_cg][y_cg + 1];
  1084. significant_coeff_group_flag[x_cg][y_cg] =
  1085. significant_coeff_group_flag_decode(s, c_idx, ctx_cg);
  1086. implicit_non_zero_coeff = 1;
  1087. } else {
  1088. significant_coeff_group_flag[x_cg][y_cg] =
  1089. ((x_cg == x_cg_last_sig && y_cg == y_cg_last_sig) ||
  1090. (x_cg == 0 && y_cg == 0));
  1091. }
  1092. last_scan_pos = num_coeff - offset - 1;
  1093. if (i == num_last_subset) {
  1094. n_end = last_scan_pos - 1;
  1095. significant_coeff_flag_idx[0] = last_scan_pos;
  1096. nb_significant_coeff_flag = 1;
  1097. } else {
  1098. n_end = 15;
  1099. }
  1100. if (x_cg < ((1 << log2_trafo_size) - 1) >> 2)
  1101. prev_sig = !!significant_coeff_group_flag[x_cg + 1][y_cg];
  1102. if (y_cg < ((1 << log2_trafo_size) - 1) >> 2)
  1103. prev_sig += (!!significant_coeff_group_flag[x_cg][y_cg + 1] << 1);
  1104. if (significant_coeff_group_flag[x_cg][y_cg] && n_end >= 0) {
  1105. static const uint8_t ctx_idx_map[] = {
  1106. 0, 1, 4, 5, 2, 3, 4, 5, 6, 6, 8, 8, 7, 7, 8, 8, // log2_trafo_size == 2
  1107. 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, // prev_sig == 0
  1108. 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, // prev_sig == 1
  1109. 2, 1, 0, 0, 2, 1, 0, 0, 2, 1, 0, 0, 2, 1, 0, 0, // prev_sig == 2
  1110. 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 // default
  1111. };
  1112. const uint8_t *ctx_idx_map_p;
  1113. int scf_offset = 0;
  1114. if (s->ps.sps->transform_skip_context_enabled_flag &&
  1115. (transform_skip_flag || lc->cu.cu_transquant_bypass_flag)) {
  1116. ctx_idx_map_p = (uint8_t*) &ctx_idx_map[4 * 16];
  1117. if (c_idx == 0) {
  1118. scf_offset = 40;
  1119. } else {
  1120. scf_offset = 14 + 27;
  1121. }
  1122. } else {
  1123. if (c_idx != 0)
  1124. scf_offset = 27;
  1125. if (log2_trafo_size == 2) {
  1126. ctx_idx_map_p = (uint8_t*) &ctx_idx_map[0];
  1127. } else {
  1128. ctx_idx_map_p = (uint8_t*) &ctx_idx_map[(prev_sig + 1) << 4];
  1129. if (c_idx == 0) {
  1130. if ((x_cg > 0 || y_cg > 0))
  1131. scf_offset += 3;
  1132. if (log2_trafo_size == 3) {
  1133. scf_offset += (scan_idx == SCAN_DIAG) ? 9 : 15;
  1134. } else {
  1135. scf_offset += 21;
  1136. }
  1137. } else {
  1138. if (log2_trafo_size == 3)
  1139. scf_offset += 9;
  1140. else
  1141. scf_offset += 12;
  1142. }
  1143. }
  1144. }
  1145. for (n = n_end; n > 0; n--) {
  1146. x_c = scan_x_off[n];
  1147. y_c = scan_y_off[n];
  1148. if (significant_coeff_flag_decode(s, x_c, y_c, scf_offset, ctx_idx_map_p)) {
  1149. significant_coeff_flag_idx[nb_significant_coeff_flag] = n;
  1150. nb_significant_coeff_flag++;
  1151. implicit_non_zero_coeff = 0;
  1152. }
  1153. }
  1154. if (implicit_non_zero_coeff == 0) {
  1155. if (s->ps.sps->transform_skip_context_enabled_flag &&
  1156. (transform_skip_flag || lc->cu.cu_transquant_bypass_flag)) {
  1157. if (c_idx == 0) {
  1158. scf_offset = 42;
  1159. } else {
  1160. scf_offset = 16 + 27;
  1161. }
  1162. } else {
  1163. if (i == 0) {
  1164. if (c_idx == 0)
  1165. scf_offset = 0;
  1166. else
  1167. scf_offset = 27;
  1168. } else {
  1169. scf_offset = 2 + scf_offset;
  1170. }
  1171. }
  1172. if (significant_coeff_flag_decode_0(s, c_idx, scf_offset) == 1) {
  1173. significant_coeff_flag_idx[nb_significant_coeff_flag] = 0;
  1174. nb_significant_coeff_flag++;
  1175. }
  1176. } else {
  1177. significant_coeff_flag_idx[nb_significant_coeff_flag] = 0;
  1178. nb_significant_coeff_flag++;
  1179. }
  1180. }
  1181. n_end = nb_significant_coeff_flag;
  1182. if (n_end) {
  1183. int first_nz_pos_in_cg;
  1184. int last_nz_pos_in_cg;
  1185. int c_rice_param = 0;
  1186. int first_greater1_coeff_idx = -1;
  1187. uint8_t coeff_abs_level_greater1_flag[8];
  1188. uint16_t coeff_sign_flag;
  1189. int sum_abs = 0;
  1190. int sign_hidden;
  1191. int sb_type;
  1192. // initialize first elem of coeff_bas_level_greater1_flag
  1193. int ctx_set = (i > 0 && c_idx == 0) ? 2 : 0;
  1194. if (s->ps.sps->persistent_rice_adaptation_enabled_flag) {
  1195. if (!transform_skip_flag && !lc->cu.cu_transquant_bypass_flag)
  1196. sb_type = 2 * (c_idx == 0 ? 1 : 0);
  1197. else
  1198. sb_type = 2 * (c_idx == 0 ? 1 : 0) + 1;
  1199. c_rice_param = lc->stat_coeff[sb_type] / 4;
  1200. }
  1201. if (!(i == num_last_subset) && greater1_ctx == 0)
  1202. ctx_set++;
  1203. greater1_ctx = 1;
  1204. last_nz_pos_in_cg = significant_coeff_flag_idx[0];
  1205. for (m = 0; m < (n_end > 8 ? 8 : n_end); m++) {
  1206. int inc = (ctx_set << 2) + greater1_ctx;
  1207. coeff_abs_level_greater1_flag[m] =
  1208. coeff_abs_level_greater1_flag_decode(s, c_idx, inc);
  1209. if (coeff_abs_level_greater1_flag[m]) {
  1210. greater1_ctx = 0;
  1211. if (first_greater1_coeff_idx == -1)
  1212. first_greater1_coeff_idx = m;
  1213. } else if (greater1_ctx > 0 && greater1_ctx < 3) {
  1214. greater1_ctx++;
  1215. }
  1216. }
  1217. first_nz_pos_in_cg = significant_coeff_flag_idx[n_end - 1];
  1218. if (lc->cu.cu_transquant_bypass_flag ||
  1219. (lc->cu.pred_mode == MODE_INTRA &&
  1220. s->ps.sps->implicit_rdpcm_enabled_flag && transform_skip_flag &&
  1221. (pred_mode_intra == 10 || pred_mode_intra == 26 )) ||
  1222. explicit_rdpcm_flag)
  1223. sign_hidden = 0;
  1224. else
  1225. sign_hidden = (last_nz_pos_in_cg - first_nz_pos_in_cg >= 4);
  1226. if (first_greater1_coeff_idx != -1) {
  1227. coeff_abs_level_greater1_flag[first_greater1_coeff_idx] += coeff_abs_level_greater2_flag_decode(s, c_idx, ctx_set);
  1228. }
  1229. if (!s->ps.pps->sign_data_hiding_flag || !sign_hidden ) {
  1230. coeff_sign_flag = coeff_sign_flag_decode(s, nb_significant_coeff_flag) << (16 - nb_significant_coeff_flag);
  1231. } else {
  1232. coeff_sign_flag = coeff_sign_flag_decode(s, nb_significant_coeff_flag - 1) << (16 - (nb_significant_coeff_flag - 1));
  1233. }
  1234. for (m = 0; m < n_end; m++) {
  1235. n = significant_coeff_flag_idx[m];
  1236. GET_COORD(offset, n);
  1237. if (m < 8) {
  1238. trans_coeff_level = 1 + coeff_abs_level_greater1_flag[m];
  1239. if (trans_coeff_level == ((m == first_greater1_coeff_idx) ? 3 : 2)) {
  1240. int last_coeff_abs_level_remaining = coeff_abs_level_remaining_decode(s, c_rice_param);
  1241. trans_coeff_level += last_coeff_abs_level_remaining;
  1242. if (trans_coeff_level > (3 << c_rice_param))
  1243. c_rice_param = s->ps.sps->persistent_rice_adaptation_enabled_flag ? c_rice_param + 1 : FFMIN(c_rice_param + 1, 4);
  1244. if (s->ps.sps->persistent_rice_adaptation_enabled_flag && !rice_init) {
  1245. int c_rice_p_init = lc->stat_coeff[sb_type] / 4;
  1246. if (last_coeff_abs_level_remaining >= (3 << c_rice_p_init))
  1247. lc->stat_coeff[sb_type]++;
  1248. else if (2 * last_coeff_abs_level_remaining < (1 << c_rice_p_init))
  1249. if (lc->stat_coeff[sb_type] > 0)
  1250. lc->stat_coeff[sb_type]--;
  1251. rice_init = 1;
  1252. }
  1253. }
  1254. } else {
  1255. int last_coeff_abs_level_remaining = coeff_abs_level_remaining_decode(s, c_rice_param);
  1256. trans_coeff_level = 1 + last_coeff_abs_level_remaining;
  1257. if (trans_coeff_level > (3 << c_rice_param))
  1258. c_rice_param = s->ps.sps->persistent_rice_adaptation_enabled_flag ? c_rice_param + 1 : FFMIN(c_rice_param + 1, 4);
  1259. if (s->ps.sps->persistent_rice_adaptation_enabled_flag && !rice_init) {
  1260. int c_rice_p_init = lc->stat_coeff[sb_type] / 4;
  1261. if (last_coeff_abs_level_remaining >= (3 << c_rice_p_init))
  1262. lc->stat_coeff[sb_type]++;
  1263. else if (2 * last_coeff_abs_level_remaining < (1 << c_rice_p_init))
  1264. if (lc->stat_coeff[sb_type] > 0)
  1265. lc->stat_coeff[sb_type]--;
  1266. rice_init = 1;
  1267. }
  1268. }
  1269. if (s->ps.pps->sign_data_hiding_flag && sign_hidden) {
  1270. sum_abs += trans_coeff_level;
  1271. if (n == first_nz_pos_in_cg && (sum_abs&1))
  1272. trans_coeff_level = -trans_coeff_level;
  1273. }
  1274. if (coeff_sign_flag >> 15)
  1275. trans_coeff_level = -trans_coeff_level;
  1276. coeff_sign_flag <<= 1;
  1277. if(!lc->cu.cu_transquant_bypass_flag) {
  1278. if (s->ps.sps->scaling_list_enable_flag && !(transform_skip_flag && log2_trafo_size > 2)) {
  1279. if(y_c || x_c || log2_trafo_size < 4) {
  1280. switch(log2_trafo_size) {
  1281. case 3: pos = (y_c << 3) + x_c; break;
  1282. case 4: pos = ((y_c >> 1) << 3) + (x_c >> 1); break;
  1283. case 5: pos = ((y_c >> 2) << 3) + (x_c >> 2); break;
  1284. default: pos = (y_c << 2) + x_c; break;
  1285. }
  1286. scale_m = scale_matrix[pos];
  1287. } else {
  1288. scale_m = dc_scale;
  1289. }
  1290. }
  1291. trans_coeff_level = (trans_coeff_level * (int64_t)scale * (int64_t)scale_m + add) >> shift;
  1292. if(trans_coeff_level < 0) {
  1293. if((~trans_coeff_level) & 0xFffffffffff8000)
  1294. trans_coeff_level = -32768;
  1295. } else {
  1296. if(trans_coeff_level & 0xffffffffffff8000)
  1297. trans_coeff_level = 32767;
  1298. }
  1299. }
  1300. coeffs[y_c * trafo_size + x_c] = trans_coeff_level;
  1301. }
  1302. }
  1303. }
  1304. if (lc->cu.cu_transquant_bypass_flag) {
  1305. if (explicit_rdpcm_flag || (s->ps.sps->implicit_rdpcm_enabled_flag &&
  1306. (pred_mode_intra == 10 || pred_mode_intra == 26))) {
  1307. int mode = s->ps.sps->implicit_rdpcm_enabled_flag ? (pred_mode_intra == 26) : explicit_rdpcm_dir_flag;
  1308. s->hevcdsp.transform_rdpcm(coeffs, log2_trafo_size, mode);
  1309. }
  1310. } else {
  1311. if (transform_skip_flag) {
  1312. int rot = s->ps.sps->transform_skip_rotation_enabled_flag &&
  1313. log2_trafo_size == 2 &&
  1314. lc->cu.pred_mode == MODE_INTRA;
  1315. if (rot) {
  1316. for (i = 0; i < 8; i++)
  1317. FFSWAP(int16_t, coeffs[i], coeffs[16 - i - 1]);
  1318. }
  1319. s->hevcdsp.transform_skip(coeffs, log2_trafo_size);
  1320. if (explicit_rdpcm_flag || (s->ps.sps->implicit_rdpcm_enabled_flag &&
  1321. lc->cu.pred_mode == MODE_INTRA &&
  1322. (pred_mode_intra == 10 || pred_mode_intra == 26))) {
  1323. int mode = explicit_rdpcm_flag ? explicit_rdpcm_dir_flag : (pred_mode_intra == 26);
  1324. s->hevcdsp.transform_rdpcm(coeffs, log2_trafo_size, mode);
  1325. }
  1326. } else if (lc->cu.pred_mode == MODE_INTRA && c_idx == 0 && log2_trafo_size == 2) {
  1327. s->hevcdsp.idct_4x4_luma(coeffs);
  1328. } else {
  1329. int max_xy = FFMAX(last_significant_coeff_x, last_significant_coeff_y);
  1330. if (max_xy == 0)
  1331. s->hevcdsp.idct_dc[log2_trafo_size-2](coeffs);
  1332. else {
  1333. int col_limit = last_significant_coeff_x + last_significant_coeff_y + 4;
  1334. if (max_xy < 4)
  1335. col_limit = FFMIN(4, col_limit);
  1336. else if (max_xy < 8)
  1337. col_limit = FFMIN(8, col_limit);
  1338. else if (max_xy < 12)
  1339. col_limit = FFMIN(24, col_limit);
  1340. s->hevcdsp.idct[log2_trafo_size-2](coeffs, col_limit);
  1341. }
  1342. }
  1343. }
  1344. if (lc->tu.cross_pf) {
  1345. int16_t *coeffs_y = (int16_t*)lc->edge_emu_buffer;
  1346. for (i = 0; i < (trafo_size * trafo_size); i++) {
  1347. coeffs[i] = coeffs[i] + ((lc->tu.res_scale_val * coeffs_y[i]) >> 3);
  1348. }
  1349. }
  1350. s->hevcdsp.transform_add[log2_trafo_size-2](dst, coeffs, stride);
  1351. }
  1352. void ff_hevc_hls_mvd_coding(HEVCContext *s, int x0, int y0, int log2_cb_size)
  1353. {
  1354. HEVCLocalContext *lc = s->HEVClc;
  1355. int x = abs_mvd_greater0_flag_decode(s);
  1356. int y = abs_mvd_greater0_flag_decode(s);
  1357. if (x)
  1358. x += abs_mvd_greater1_flag_decode(s);
  1359. if (y)
  1360. y += abs_mvd_greater1_flag_decode(s);
  1361. switch (x) {
  1362. case 2: lc->pu.mvd.x = mvd_decode(s); break;
  1363. case 1: lc->pu.mvd.x = mvd_sign_flag_decode(s); break;
  1364. case 0: lc->pu.mvd.x = 0; break;
  1365. }
  1366. switch (y) {
  1367. case 2: lc->pu.mvd.y = mvd_decode(s); break;
  1368. case 1: lc->pu.mvd.y = mvd_sign_flag_decode(s); break;
  1369. case 0: lc->pu.mvd.y = 0; break;
  1370. }
  1371. }