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.

696 lines
26KB

  1. /*
  2. * H.26L/H.264/AVC/JVT/14496-10/... parameter set decoding
  3. * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
  4. *
  5. * This file is part of FFmpeg.
  6. *
  7. * FFmpeg is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU Lesser General Public
  9. * License as published by the Free Software Foundation; either
  10. * version 2.1 of the License, or (at your option) any later version.
  11. *
  12. * FFmpeg is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * Lesser General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU Lesser General Public
  18. * License along with FFmpeg; if not, write to the Free Software
  19. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  20. */
  21. /**
  22. * @file
  23. * H.264 / AVC / MPEG4 part10 parameter set decoding.
  24. * @author Michael Niedermayer <michaelni@gmx.at>
  25. */
  26. #include "libavutil/imgutils.h"
  27. #include "internal.h"
  28. #include "dsputil.h"
  29. #include "avcodec.h"
  30. #include "h264.h"
  31. #include "h264data.h" //FIXME FIXME FIXME (just for zigzag_scan)
  32. #include "golomb.h"
  33. //#undef NDEBUG
  34. #include <assert.h>
  35. #define MAX_LOG2_MAX_FRAME_NUM (12 + 4)
  36. #define MIN_LOG2_MAX_FRAME_NUM 4
  37. static const AVRational pixel_aspect[17]={
  38. {0, 1},
  39. {1, 1},
  40. {12, 11},
  41. {10, 11},
  42. {16, 11},
  43. {40, 33},
  44. {24, 11},
  45. {20, 11},
  46. {32, 11},
  47. {80, 33},
  48. {18, 11},
  49. {15, 11},
  50. {64, 33},
  51. {160,99},
  52. {4, 3},
  53. {3, 2},
  54. {2, 1},
  55. };
  56. #define QP(qP,depth) ( (qP)+6*((depth)-8) )
  57. #define CHROMA_QP_TABLE_END(d) \
  58. QP(0,d), QP(1,d), QP(2,d), QP(3,d), QP(4,d), QP(5,d),\
  59. QP(6,d), QP(7,d), QP(8,d), QP(9,d), QP(10,d), QP(11,d),\
  60. QP(12,d), QP(13,d), QP(14,d), QP(15,d), QP(16,d), QP(17,d),\
  61. QP(18,d), QP(19,d), QP(20,d), QP(21,d), QP(22,d), QP(23,d),\
  62. QP(24,d), QP(25,d), QP(26,d), QP(27,d), QP(28,d), QP(29,d),\
  63. QP(29,d), QP(30,d), QP(31,d), QP(32,d), QP(32,d), QP(33,d),\
  64. QP(34,d), QP(34,d), QP(35,d), QP(35,d), QP(36,d), QP(36,d),\
  65. QP(37,d), QP(37,d), QP(37,d), QP(38,d), QP(38,d), QP(38,d),\
  66. QP(39,d), QP(39,d), QP(39,d), QP(39,d)
  67. const uint8_t ff_h264_chroma_qp[7][QP_MAX_NUM+1] = {
  68. {
  69. CHROMA_QP_TABLE_END(8)
  70. },
  71. {
  72. 0, 1, 2, 3, 4, 5,
  73. CHROMA_QP_TABLE_END(9)
  74. },
  75. {
  76. 0, 1, 2, 3, 4, 5,
  77. 6, 7, 8, 9, 10, 11,
  78. CHROMA_QP_TABLE_END(10)
  79. },
  80. {
  81. 0, 1, 2, 3, 4, 5,
  82. 6, 7, 8, 9, 10, 11,
  83. 12,13,14,15, 16, 17,
  84. CHROMA_QP_TABLE_END(11)
  85. },
  86. {
  87. 0, 1, 2, 3, 4, 5,
  88. 6, 7, 8, 9, 10, 11,
  89. 12,13,14,15, 16, 17,
  90. 18,19,20,21, 22, 23,
  91. CHROMA_QP_TABLE_END(12)
  92. },
  93. {
  94. 0, 1, 2, 3, 4, 5,
  95. 6, 7, 8, 9, 10, 11,
  96. 12,13,14,15, 16, 17,
  97. 18,19,20,21, 22, 23,
  98. 24,25,26,27, 28, 29,
  99. CHROMA_QP_TABLE_END(13)
  100. },
  101. {
  102. 0, 1, 2, 3, 4, 5,
  103. 6, 7, 8, 9, 10, 11,
  104. 12,13,14,15, 16, 17,
  105. 18,19,20,21, 22, 23,
  106. 24,25,26,27, 28, 29,
  107. 30,31,32,33, 34, 35,
  108. CHROMA_QP_TABLE_END(14)
  109. },
  110. };
  111. static const uint8_t default_scaling4[2][16]={
  112. { 6,13,20,28,
  113. 13,20,28,32,
  114. 20,28,32,37,
  115. 28,32,37,42
  116. },{
  117. 10,14,20,24,
  118. 14,20,24,27,
  119. 20,24,27,30,
  120. 24,27,30,34
  121. }};
  122. static const uint8_t default_scaling8[2][64]={
  123. { 6,10,13,16,18,23,25,27,
  124. 10,11,16,18,23,25,27,29,
  125. 13,16,18,23,25,27,29,31,
  126. 16,18,23,25,27,29,31,33,
  127. 18,23,25,27,29,31,33,36,
  128. 23,25,27,29,31,33,36,38,
  129. 25,27,29,31,33,36,38,40,
  130. 27,29,31,33,36,38,40,42
  131. },{
  132. 9,13,15,17,19,21,22,24,
  133. 13,13,17,19,21,22,24,25,
  134. 15,17,19,21,22,24,25,27,
  135. 17,19,21,22,24,25,27,28,
  136. 19,21,22,24,25,27,28,30,
  137. 21,22,24,25,27,28,30,32,
  138. 22,24,25,27,28,30,32,33,
  139. 24,25,27,28,30,32,33,35
  140. }};
  141. static inline int decode_hrd_parameters(H264Context *h, SPS *sps){
  142. MpegEncContext * const s = &h->s;
  143. int cpb_count, i;
  144. cpb_count = get_ue_golomb_31(&s->gb) + 1;
  145. if(cpb_count > 32U){
  146. av_log(h->s.avctx, AV_LOG_ERROR, "cpb_count %d invalid\n", cpb_count);
  147. return -1;
  148. }
  149. get_bits(&s->gb, 4); /* bit_rate_scale */
  150. get_bits(&s->gb, 4); /* cpb_size_scale */
  151. for(i=0; i<cpb_count; i++){
  152. get_ue_golomb_long(&s->gb); /* bit_rate_value_minus1 */
  153. get_ue_golomb_long(&s->gb); /* cpb_size_value_minus1 */
  154. get_bits1(&s->gb); /* cbr_flag */
  155. }
  156. sps->initial_cpb_removal_delay_length = get_bits(&s->gb, 5) + 1;
  157. sps->cpb_removal_delay_length = get_bits(&s->gb, 5) + 1;
  158. sps->dpb_output_delay_length = get_bits(&s->gb, 5) + 1;
  159. sps->time_offset_length = get_bits(&s->gb, 5);
  160. sps->cpb_cnt = cpb_count;
  161. return 0;
  162. }
  163. static inline int decode_vui_parameters(H264Context *h, SPS *sps){
  164. MpegEncContext * const s = &h->s;
  165. int aspect_ratio_info_present_flag;
  166. unsigned int aspect_ratio_idc;
  167. aspect_ratio_info_present_flag= get_bits1(&s->gb);
  168. if( aspect_ratio_info_present_flag ) {
  169. aspect_ratio_idc= get_bits(&s->gb, 8);
  170. if( aspect_ratio_idc == EXTENDED_SAR ) {
  171. sps->sar.num= get_bits(&s->gb, 16);
  172. sps->sar.den= get_bits(&s->gb, 16);
  173. }else if(aspect_ratio_idc < FF_ARRAY_ELEMS(pixel_aspect)){
  174. sps->sar= pixel_aspect[aspect_ratio_idc];
  175. }else{
  176. av_log(h->s.avctx, AV_LOG_ERROR, "illegal aspect ratio\n");
  177. return -1;
  178. }
  179. }else{
  180. sps->sar.num=
  181. sps->sar.den= 0;
  182. }
  183. // s->avctx->aspect_ratio= sar_width*s->width / (float)(s->height*sar_height);
  184. if(get_bits1(&s->gb)){ /* overscan_info_present_flag */
  185. get_bits1(&s->gb); /* overscan_appropriate_flag */
  186. }
  187. sps->video_signal_type_present_flag = get_bits1(&s->gb);
  188. if(sps->video_signal_type_present_flag){
  189. get_bits(&s->gb, 3); /* video_format */
  190. sps->full_range = get_bits1(&s->gb); /* video_full_range_flag */
  191. sps->colour_description_present_flag = get_bits1(&s->gb);
  192. if(sps->colour_description_present_flag){
  193. sps->color_primaries = get_bits(&s->gb, 8); /* colour_primaries */
  194. sps->color_trc = get_bits(&s->gb, 8); /* transfer_characteristics */
  195. sps->colorspace = get_bits(&s->gb, 8); /* matrix_coefficients */
  196. if (sps->color_primaries >= AVCOL_PRI_NB)
  197. sps->color_primaries = AVCOL_PRI_UNSPECIFIED;
  198. if (sps->color_trc >= AVCOL_TRC_NB)
  199. sps->color_trc = AVCOL_TRC_UNSPECIFIED;
  200. if (sps->colorspace >= AVCOL_SPC_NB)
  201. sps->colorspace = AVCOL_SPC_UNSPECIFIED;
  202. }
  203. }
  204. if(get_bits1(&s->gb)){ /* chroma_location_info_present_flag */
  205. s->avctx->chroma_sample_location = get_ue_golomb(&s->gb)+1; /* chroma_sample_location_type_top_field */
  206. get_ue_golomb(&s->gb); /* chroma_sample_location_type_bottom_field */
  207. }
  208. sps->timing_info_present_flag = get_bits1(&s->gb);
  209. if(sps->timing_info_present_flag){
  210. sps->num_units_in_tick = get_bits_long(&s->gb, 32);
  211. sps->time_scale = get_bits_long(&s->gb, 32);
  212. if(!sps->num_units_in_tick || !sps->time_scale){
  213. av_log(h->s.avctx, AV_LOG_ERROR, "time_scale/num_units_in_tick invalid or unsupported (%d/%d)\n", sps->time_scale, sps->num_units_in_tick);
  214. return -1;
  215. }
  216. sps->fixed_frame_rate_flag = get_bits1(&s->gb);
  217. }
  218. sps->nal_hrd_parameters_present_flag = get_bits1(&s->gb);
  219. if(sps->nal_hrd_parameters_present_flag)
  220. if(decode_hrd_parameters(h, sps) < 0)
  221. return -1;
  222. sps->vcl_hrd_parameters_present_flag = get_bits1(&s->gb);
  223. if(sps->vcl_hrd_parameters_present_flag)
  224. if(decode_hrd_parameters(h, sps) < 0)
  225. return -1;
  226. if(sps->nal_hrd_parameters_present_flag || sps->vcl_hrd_parameters_present_flag)
  227. get_bits1(&s->gb); /* low_delay_hrd_flag */
  228. sps->pic_struct_present_flag = get_bits1(&s->gb);
  229. if(!get_bits_left(&s->gb))
  230. return 0;
  231. sps->bitstream_restriction_flag = get_bits1(&s->gb);
  232. if(sps->bitstream_restriction_flag){
  233. get_bits1(&s->gb); /* motion_vectors_over_pic_boundaries_flag */
  234. get_ue_golomb(&s->gb); /* max_bytes_per_pic_denom */
  235. get_ue_golomb(&s->gb); /* max_bits_per_mb_denom */
  236. get_ue_golomb(&s->gb); /* log2_max_mv_length_horizontal */
  237. get_ue_golomb(&s->gb); /* log2_max_mv_length_vertical */
  238. sps->num_reorder_frames= get_ue_golomb(&s->gb);
  239. get_ue_golomb(&s->gb); /*max_dec_frame_buffering*/
  240. if (get_bits_left(&s->gb) < 0) {
  241. sps->num_reorder_frames=0;
  242. sps->bitstream_restriction_flag= 0;
  243. }
  244. if(sps->num_reorder_frames > 16U /*max_dec_frame_buffering || max_dec_frame_buffering > 16*/){
  245. av_log(h->s.avctx, AV_LOG_ERROR, "illegal num_reorder_frames %d\n", sps->num_reorder_frames);
  246. return -1;
  247. }
  248. }
  249. if (get_bits_left(&s->gb) < 0) {
  250. av_log(h->s.avctx, AV_LOG_ERROR, "Overread VUI by %d bits\n", -get_bits_left(&s->gb));
  251. return AVERROR_INVALIDDATA;
  252. }
  253. return 0;
  254. }
  255. static void decode_scaling_list(H264Context *h, uint8_t *factors, int size,
  256. const uint8_t *jvt_list, const uint8_t *fallback_list){
  257. MpegEncContext * const s = &h->s;
  258. int i, last = 8, next = 8;
  259. const uint8_t *scan = size == 16 ? zigzag_scan : ff_zigzag_direct;
  260. if(!get_bits1(&s->gb)) /* matrix not written, we use the predicted one */
  261. memcpy(factors, fallback_list, size*sizeof(uint8_t));
  262. else
  263. for(i=0;i<size;i++){
  264. if(next)
  265. next = (last + get_se_golomb(&s->gb)) & 0xff;
  266. if(!i && !next){ /* matrix not written, we use the preset one */
  267. memcpy(factors, jvt_list, size*sizeof(uint8_t));
  268. break;
  269. }
  270. last = factors[scan[i]] = next ? next : last;
  271. }
  272. }
  273. static void decode_scaling_matrices(H264Context *h, SPS *sps, PPS *pps, int is_sps,
  274. uint8_t (*scaling_matrix4)[16], uint8_t (*scaling_matrix8)[64]){
  275. MpegEncContext * const s = &h->s;
  276. int fallback_sps = !is_sps && sps->scaling_matrix_present;
  277. const uint8_t *fallback[4] = {
  278. fallback_sps ? sps->scaling_matrix4[0] : default_scaling4[0],
  279. fallback_sps ? sps->scaling_matrix4[3] : default_scaling4[1],
  280. fallback_sps ? sps->scaling_matrix8[0] : default_scaling8[0],
  281. fallback_sps ? sps->scaling_matrix8[3] : default_scaling8[1]
  282. };
  283. if(get_bits1(&s->gb)){
  284. sps->scaling_matrix_present |= is_sps;
  285. decode_scaling_list(h,scaling_matrix4[0],16,default_scaling4[0],fallback[0]); // Intra, Y
  286. decode_scaling_list(h,scaling_matrix4[1],16,default_scaling4[0],scaling_matrix4[0]); // Intra, Cr
  287. decode_scaling_list(h,scaling_matrix4[2],16,default_scaling4[0],scaling_matrix4[1]); // Intra, Cb
  288. decode_scaling_list(h,scaling_matrix4[3],16,default_scaling4[1],fallback[1]); // Inter, Y
  289. decode_scaling_list(h,scaling_matrix4[4],16,default_scaling4[1],scaling_matrix4[3]); // Inter, Cr
  290. decode_scaling_list(h,scaling_matrix4[5],16,default_scaling4[1],scaling_matrix4[4]); // Inter, Cb
  291. if(is_sps || pps->transform_8x8_mode){
  292. decode_scaling_list(h,scaling_matrix8[0],64,default_scaling8[0],fallback[2]); // Intra, Y
  293. decode_scaling_list(h,scaling_matrix8[3],64,default_scaling8[1],fallback[3]); // Inter, Y
  294. if(sps->chroma_format_idc == 3){
  295. decode_scaling_list(h,scaling_matrix8[1],64,default_scaling8[0],scaling_matrix8[0]); // Intra, Cr
  296. decode_scaling_list(h,scaling_matrix8[4],64,default_scaling8[1],scaling_matrix8[3]); // Inter, Cr
  297. decode_scaling_list(h,scaling_matrix8[2],64,default_scaling8[0],scaling_matrix8[1]); // Intra, Cb
  298. decode_scaling_list(h,scaling_matrix8[5],64,default_scaling8[1],scaling_matrix8[4]); // Inter, Cb
  299. }
  300. }
  301. }
  302. }
  303. int ff_h264_decode_seq_parameter_set(H264Context *h){
  304. MpegEncContext * const s = &h->s;
  305. int profile_idc, level_idc, constraint_set_flags = 0;
  306. unsigned int sps_id;
  307. int i, log2_max_frame_num_minus4;
  308. SPS *sps;
  309. profile_idc= get_bits(&s->gb, 8);
  310. constraint_set_flags |= get_bits1(&s->gb) << 0; //constraint_set0_flag
  311. constraint_set_flags |= get_bits1(&s->gb) << 1; //constraint_set1_flag
  312. constraint_set_flags |= get_bits1(&s->gb) << 2; //constraint_set2_flag
  313. constraint_set_flags |= get_bits1(&s->gb) << 3; //constraint_set3_flag
  314. constraint_set_flags |= get_bits1(&s->gb) << 4; //constraint_set4_flag
  315. constraint_set_flags |= get_bits1(&s->gb) << 5; //constraint_set5_flag
  316. get_bits(&s->gb, 2); // reserved
  317. level_idc= get_bits(&s->gb, 8);
  318. sps_id= get_ue_golomb_31(&s->gb);
  319. if(sps_id >= MAX_SPS_COUNT) {
  320. av_log(h->s.avctx, AV_LOG_ERROR, "sps_id (%d) out of range\n", sps_id);
  321. return -1;
  322. }
  323. sps= av_mallocz(sizeof(SPS));
  324. if(sps == NULL)
  325. return -1;
  326. sps->time_offset_length = 24;
  327. sps->profile_idc= profile_idc;
  328. sps->constraint_set_flags = constraint_set_flags;
  329. sps->level_idc= level_idc;
  330. sps->full_range = -1;
  331. memset(sps->scaling_matrix4, 16, sizeof(sps->scaling_matrix4));
  332. memset(sps->scaling_matrix8, 16, sizeof(sps->scaling_matrix8));
  333. sps->scaling_matrix_present = 0;
  334. sps->colorspace = 2; //AVCOL_SPC_UNSPECIFIED
  335. if (sps->profile_idc == 100 || sps->profile_idc == 110 ||
  336. sps->profile_idc == 122 || sps->profile_idc == 244 ||
  337. sps->profile_idc == 44 || sps->profile_idc == 83 ||
  338. sps->profile_idc == 86 || sps->profile_idc == 118 ||
  339. sps->profile_idc == 128 || sps->profile_idc == 144) {
  340. sps->chroma_format_idc= get_ue_golomb_31(&s->gb);
  341. if (sps->chroma_format_idc > 3U) {
  342. av_log(h->s.avctx, AV_LOG_ERROR, "chroma_format_idc %d is illegal\n", sps->chroma_format_idc);
  343. goto fail;
  344. } else if(sps->chroma_format_idc == 3) {
  345. sps->residual_color_transform_flag = get_bits1(&s->gb);
  346. if(sps->residual_color_transform_flag) {
  347. av_log(h->s.avctx, AV_LOG_ERROR, "separate color planes are not supported\n");
  348. goto fail;
  349. }
  350. }
  351. sps->bit_depth_luma = get_ue_golomb(&s->gb) + 8;
  352. sps->bit_depth_chroma = get_ue_golomb(&s->gb) + 8;
  353. if (sps->bit_depth_luma > 14U || sps->bit_depth_chroma > 14U) {
  354. av_log(h->s.avctx, AV_LOG_ERROR, "illegal bit depth value (%d, %d)\n",
  355. sps->bit_depth_luma, sps->bit_depth_chroma);
  356. goto fail;
  357. }
  358. sps->transform_bypass = get_bits1(&s->gb);
  359. decode_scaling_matrices(h, sps, NULL, 1, sps->scaling_matrix4, sps->scaling_matrix8);
  360. }else{
  361. sps->chroma_format_idc= 1;
  362. sps->bit_depth_luma = 8;
  363. sps->bit_depth_chroma = 8;
  364. }
  365. log2_max_frame_num_minus4 = get_ue_golomb(&s->gb);
  366. if (log2_max_frame_num_minus4 < MIN_LOG2_MAX_FRAME_NUM - 4 ||
  367. log2_max_frame_num_minus4 > MAX_LOG2_MAX_FRAME_NUM - 4) {
  368. av_log(h->s.avctx, AV_LOG_ERROR,
  369. "log2_max_frame_num_minus4 out of range (0-12): %d\n",
  370. log2_max_frame_num_minus4);
  371. goto fail;
  372. }
  373. sps->log2_max_frame_num = log2_max_frame_num_minus4 + 4;
  374. sps->poc_type= get_ue_golomb_31(&s->gb);
  375. if(sps->poc_type == 0){ //FIXME #define
  376. unsigned t = get_ue_golomb(&s->gb);
  377. if(t>12){
  378. av_log(h->s.avctx, AV_LOG_ERROR, "log2_max_poc_lsb (%d) is out of range\n", t);
  379. goto fail;
  380. }
  381. sps->log2_max_poc_lsb= t + 4;
  382. } else if(sps->poc_type == 1){//FIXME #define
  383. sps->delta_pic_order_always_zero_flag= get_bits1(&s->gb);
  384. sps->offset_for_non_ref_pic= get_se_golomb(&s->gb);
  385. sps->offset_for_top_to_bottom_field= get_se_golomb(&s->gb);
  386. sps->poc_cycle_length = get_ue_golomb(&s->gb);
  387. if((unsigned)sps->poc_cycle_length >= FF_ARRAY_ELEMS(sps->offset_for_ref_frame)){
  388. av_log(h->s.avctx, AV_LOG_ERROR, "poc_cycle_length overflow %u\n", sps->poc_cycle_length);
  389. goto fail;
  390. }
  391. for(i=0; i<sps->poc_cycle_length; i++)
  392. sps->offset_for_ref_frame[i]= get_se_golomb(&s->gb);
  393. }else if(sps->poc_type != 2){
  394. av_log(h->s.avctx, AV_LOG_ERROR, "illegal POC type %d\n", sps->poc_type);
  395. goto fail;
  396. }
  397. sps->ref_frame_count= get_ue_golomb_31(&s->gb);
  398. if (h->s.avctx->codec_tag == MKTAG('S', 'M', 'V', '2'))
  399. sps->ref_frame_count= FFMAX(2, sps->ref_frame_count);
  400. if(sps->ref_frame_count > MAX_PICTURE_COUNT-2 || sps->ref_frame_count > 16U){
  401. av_log(h->s.avctx, AV_LOG_ERROR, "too many reference frames\n");
  402. goto fail;
  403. }
  404. sps->gaps_in_frame_num_allowed_flag= get_bits1(&s->gb);
  405. sps->mb_width = get_ue_golomb(&s->gb) + 1;
  406. sps->mb_height= get_ue_golomb(&s->gb) + 1;
  407. if((unsigned)sps->mb_width >= INT_MAX/16 || (unsigned)sps->mb_height >= INT_MAX/16 ||
  408. av_image_check_size(16*sps->mb_width, 16*sps->mb_height, 0, h->s.avctx)){
  409. av_log(h->s.avctx, AV_LOG_ERROR, "mb_width/height overflow\n");
  410. goto fail;
  411. }
  412. sps->frame_mbs_only_flag= get_bits1(&s->gb);
  413. if(!sps->frame_mbs_only_flag)
  414. sps->mb_aff= get_bits1(&s->gb);
  415. else
  416. sps->mb_aff= 0;
  417. sps->direct_8x8_inference_flag= get_bits1(&s->gb);
  418. #ifndef ALLOW_INTERLACE
  419. if(sps->mb_aff)
  420. av_log(h->s.avctx, AV_LOG_ERROR, "MBAFF support not included; enable it at compile-time.\n");
  421. #endif
  422. sps->crop= get_bits1(&s->gb);
  423. if(sps->crop){
  424. int crop_vertical_limit = sps->chroma_format_idc & 2 ? 16 : 8;
  425. int crop_horizontal_limit = sps->chroma_format_idc == 3 ? 16 : 8;
  426. sps->crop_left = get_ue_golomb(&s->gb);
  427. sps->crop_right = get_ue_golomb(&s->gb);
  428. sps->crop_top = get_ue_golomb(&s->gb);
  429. sps->crop_bottom= get_ue_golomb(&s->gb);
  430. if (h->s.avctx->flags2 & CODEC_FLAG2_IGNORE_CROP) {
  431. av_log(h->s.avctx, AV_LOG_DEBUG,
  432. "discarding sps cropping, "
  433. "original values are l:%u r:%u t:%u b:%u\n",
  434. sps->crop_left,
  435. sps->crop_right,
  436. sps->crop_top,
  437. sps->crop_bottom);
  438. sps->crop_left =
  439. sps->crop_right =
  440. sps->crop_top =
  441. sps->crop_bottom = 0;
  442. }
  443. if(sps->crop_left || sps->crop_top){
  444. av_log(h->s.avctx, AV_LOG_ERROR, "insane cropping not completely supported, this could look slightly wrong ... (left: %d, top: %d)\n", sps->crop_left, sps->crop_top);
  445. }
  446. if(sps->crop_right >= crop_horizontal_limit || sps->crop_bottom >= crop_vertical_limit){
  447. av_log(h->s.avctx, AV_LOG_ERROR, "brainfart cropping not supported, cropping disabled (right: %d, bottom: %d)\n", sps->crop_right, sps->crop_bottom);
  448. /* It is very unlikely that partial cropping will make anybody happy.
  449. * Not cropping at all fixes for example playback of Sisvel 3D streams
  450. * in applications supporting Sisvel 3D. */
  451. sps->crop_left =
  452. sps->crop_right =
  453. sps->crop_top =
  454. sps->crop_bottom= 0;
  455. }
  456. }else{
  457. sps->crop_left =
  458. sps->crop_right =
  459. sps->crop_top =
  460. sps->crop_bottom= 0;
  461. }
  462. sps->vui_parameters_present_flag= get_bits1(&s->gb);
  463. if( sps->vui_parameters_present_flag )
  464. if (decode_vui_parameters(h, sps) < 0)
  465. goto fail;
  466. if(!sps->sar.den)
  467. sps->sar.den= 1;
  468. if(s->avctx->debug&FF_DEBUG_PICT_INFO){
  469. static const char csp[4][5] = { "Gray", "420", "422", "444" };
  470. av_log(h->s.avctx, AV_LOG_DEBUG, "sps:%u profile:%d/%d poc:%d ref:%d %dx%d %s %s crop:%d/%d/%d/%d %s %s %d/%d b%d reo:%d\n",
  471. sps_id, sps->profile_idc, sps->level_idc,
  472. sps->poc_type,
  473. sps->ref_frame_count,
  474. sps->mb_width, sps->mb_height,
  475. sps->frame_mbs_only_flag ? "FRM" : (sps->mb_aff ? "MB-AFF" : "PIC-AFF"),
  476. sps->direct_8x8_inference_flag ? "8B8" : "",
  477. sps->crop_left, sps->crop_right,
  478. sps->crop_top, sps->crop_bottom,
  479. sps->vui_parameters_present_flag ? "VUI" : "",
  480. csp[sps->chroma_format_idc],
  481. sps->timing_info_present_flag ? sps->num_units_in_tick : 0,
  482. sps->timing_info_present_flag ? sps->time_scale : 0,
  483. sps->bit_depth_luma,
  484. h->sps.bitstream_restriction_flag ? sps->num_reorder_frames : -1
  485. );
  486. }
  487. sps->new = 1;
  488. av_free(h->sps_buffers[sps_id]);
  489. h->sps_buffers[sps_id] = sps;
  490. h->sps = *sps;
  491. h->current_sps_id = sps_id;
  492. return 0;
  493. fail:
  494. av_free(sps);
  495. return -1;
  496. }
  497. static void
  498. build_qp_table(PPS *pps, int t, int index, const int depth)
  499. {
  500. int i;
  501. const int max_qp = 51 + 6*(depth-8);
  502. for(i = 0; i < max_qp+1; i++)
  503. pps->chroma_qp_table[t][i] = ff_h264_chroma_qp[depth-8][av_clip(i + index, 0, max_qp)];
  504. }
  505. static int more_rbsp_data_in_pps(H264Context *h, PPS *pps)
  506. {
  507. const SPS *sps = h->sps_buffers[pps->sps_id];
  508. int profile_idc = sps->profile_idc;
  509. if ((profile_idc == 66 || profile_idc == 77 ||
  510. profile_idc == 88) && (sps->constraint_set_flags & 7)) {
  511. av_log(h->s.avctx, AV_LOG_VERBOSE,
  512. "Current profile doesn't provide more RBSP data in PPS, skipping\n");
  513. return 0;
  514. }
  515. return 1;
  516. }
  517. int ff_h264_decode_picture_parameter_set(H264Context *h, int bit_length){
  518. MpegEncContext * const s = &h->s;
  519. unsigned int pps_id= get_ue_golomb(&s->gb);
  520. PPS *pps;
  521. const int qp_bd_offset = 6*(h->sps.bit_depth_luma-8);
  522. int bits_left;
  523. if(pps_id >= MAX_PPS_COUNT) {
  524. av_log(h->s.avctx, AV_LOG_ERROR, "pps_id (%d) out of range\n", pps_id);
  525. return -1;
  526. } else if (h->sps.bit_depth_luma > 14) {
  527. av_log(h->s.avctx, AV_LOG_ERROR, "Invalid luma bit depth=%d\n", h->sps.bit_depth_luma);
  528. return AVERROR_INVALIDDATA;
  529. } else if (h->sps.bit_depth_luma == 11 || h->sps.bit_depth_luma == 13) {
  530. av_log(h->s.avctx, AV_LOG_ERROR, "Unimplemented luma bit depth=%d\n", h->sps.bit_depth_luma);
  531. return AVERROR_PATCHWELCOME;
  532. }
  533. pps= av_mallocz(sizeof(PPS));
  534. if(pps == NULL)
  535. return -1;
  536. pps->sps_id= get_ue_golomb_31(&s->gb);
  537. if((unsigned)pps->sps_id>=MAX_SPS_COUNT || h->sps_buffers[pps->sps_id] == NULL){
  538. av_log(h->s.avctx, AV_LOG_ERROR, "sps_id out of range\n");
  539. goto fail;
  540. }
  541. pps->cabac= get_bits1(&s->gb);
  542. pps->pic_order_present= get_bits1(&s->gb);
  543. pps->slice_group_count= get_ue_golomb(&s->gb) + 1;
  544. if(pps->slice_group_count > 1 ){
  545. pps->mb_slice_group_map_type= get_ue_golomb(&s->gb);
  546. av_log(h->s.avctx, AV_LOG_ERROR, "FMO not supported\n");
  547. switch(pps->mb_slice_group_map_type){
  548. case 0:
  549. #if 0
  550. | for( i = 0; i <= num_slice_groups_minus1; i++ ) | | |
  551. | run_length[ i ] |1 |ue(v) |
  552. #endif
  553. break;
  554. case 2:
  555. #if 0
  556. | for( i = 0; i < num_slice_groups_minus1; i++ ) | | |
  557. |{ | | |
  558. | top_left_mb[ i ] |1 |ue(v) |
  559. | bottom_right_mb[ i ] |1 |ue(v) |
  560. | } | | |
  561. #endif
  562. break;
  563. case 3:
  564. case 4:
  565. case 5:
  566. #if 0
  567. | slice_group_change_direction_flag |1 |u(1) |
  568. | slice_group_change_rate_minus1 |1 |ue(v) |
  569. #endif
  570. break;
  571. case 6:
  572. #if 0
  573. | slice_group_id_cnt_minus1 |1 |ue(v) |
  574. | for( i = 0; i <= slice_group_id_cnt_minus1; i++ | | |
  575. |) | | |
  576. | slice_group_id[ i ] |1 |u(v) |
  577. #endif
  578. break;
  579. }
  580. }
  581. pps->ref_count[0]= get_ue_golomb(&s->gb) + 1;
  582. pps->ref_count[1]= get_ue_golomb(&s->gb) + 1;
  583. if(pps->ref_count[0]-1 > 32-1 || pps->ref_count[1]-1 > 32-1){
  584. av_log(h->s.avctx, AV_LOG_ERROR, "reference overflow (pps)\n");
  585. goto fail;
  586. }
  587. pps->weighted_pred= get_bits1(&s->gb);
  588. pps->weighted_bipred_idc= get_bits(&s->gb, 2);
  589. pps->init_qp= get_se_golomb(&s->gb) + 26 + qp_bd_offset;
  590. pps->init_qs= get_se_golomb(&s->gb) + 26 + qp_bd_offset;
  591. pps->chroma_qp_index_offset[0]= get_se_golomb(&s->gb);
  592. pps->deblocking_filter_parameters_present= get_bits1(&s->gb);
  593. pps->constrained_intra_pred= get_bits1(&s->gb);
  594. pps->redundant_pic_cnt_present = get_bits1(&s->gb);
  595. pps->transform_8x8_mode= 0;
  596. h->dequant_coeff_pps= -1; //contents of sps/pps can change even if id doesn't, so reinit
  597. memcpy(pps->scaling_matrix4, h->sps_buffers[pps->sps_id]->scaling_matrix4, sizeof(pps->scaling_matrix4));
  598. memcpy(pps->scaling_matrix8, h->sps_buffers[pps->sps_id]->scaling_matrix8, sizeof(pps->scaling_matrix8));
  599. bits_left = bit_length - get_bits_count(&s->gb);
  600. if(bits_left > 0 && more_rbsp_data_in_pps(h, pps)){
  601. pps->transform_8x8_mode= get_bits1(&s->gb);
  602. decode_scaling_matrices(h, h->sps_buffers[pps->sps_id], pps, 0, pps->scaling_matrix4, pps->scaling_matrix8);
  603. pps->chroma_qp_index_offset[1]= get_se_golomb(&s->gb); //second_chroma_qp_index_offset
  604. } else {
  605. pps->chroma_qp_index_offset[1]= pps->chroma_qp_index_offset[0];
  606. }
  607. build_qp_table(pps, 0, pps->chroma_qp_index_offset[0], h->sps.bit_depth_luma);
  608. build_qp_table(pps, 1, pps->chroma_qp_index_offset[1], h->sps.bit_depth_luma);
  609. if(pps->chroma_qp_index_offset[0] != pps->chroma_qp_index_offset[1])
  610. pps->chroma_qp_diff= 1;
  611. if(s->avctx->debug&FF_DEBUG_PICT_INFO){
  612. av_log(h->s.avctx, AV_LOG_DEBUG, "pps:%u sps:%u %s slice_groups:%d ref:%d/%d %s qp:%d/%d/%d/%d %s %s %s %s\n",
  613. pps_id, pps->sps_id,
  614. pps->cabac ? "CABAC" : "CAVLC",
  615. pps->slice_group_count,
  616. pps->ref_count[0], pps->ref_count[1],
  617. pps->weighted_pred ? "weighted" : "",
  618. pps->init_qp, pps->init_qs, pps->chroma_qp_index_offset[0], pps->chroma_qp_index_offset[1],
  619. pps->deblocking_filter_parameters_present ? "LPAR" : "",
  620. pps->constrained_intra_pred ? "CONSTR" : "",
  621. pps->redundant_pic_cnt_present ? "REDU" : "",
  622. pps->transform_8x8_mode ? "8x8DCT" : ""
  623. );
  624. }
  625. av_free(h->pps_buffers[pps_id]);
  626. h->pps_buffers[pps_id]= pps;
  627. return 0;
  628. fail:
  629. av_free(pps);
  630. return -1;
  631. }