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.

231 lines
7.5KB

  1. /*
  2. * H.26L/H.264/AVC/JVT/14496-10/... sei decoding
  3. * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
  4. *
  5. * This file is part of Libav.
  6. *
  7. * Libav 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. * Libav 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 Libav; 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 sei decoding.
  24. * @author Michael Niedermayer <michaelni@gmx.at>
  25. */
  26. #include "internal.h"
  27. #include "avcodec.h"
  28. #include "h264.h"
  29. #include "golomb.h"
  30. #include <assert.h>
  31. static const uint8_t sei_num_clock_ts_table[9] = {
  32. 1, 1, 1, 2, 2, 3, 3, 2, 3
  33. };
  34. void ff_h264_reset_sei(H264Context *h)
  35. {
  36. h->sei_recovery_frame_cnt = -1;
  37. h->sei_dpb_output_delay = 0;
  38. h->sei_cpb_removal_delay = -1;
  39. h->sei_buffering_period_present = 0;
  40. }
  41. static int decode_picture_timing(H264Context *h)
  42. {
  43. if (h->sps.nal_hrd_parameters_present_flag ||
  44. h->sps.vcl_hrd_parameters_present_flag) {
  45. h->sei_cpb_removal_delay = get_bits(&h->gb,
  46. h->sps.cpb_removal_delay_length);
  47. h->sei_dpb_output_delay = get_bits(&h->gb,
  48. h->sps.dpb_output_delay_length);
  49. }
  50. if (h->sps.pic_struct_present_flag) {
  51. unsigned int i, num_clock_ts;
  52. h->sei_pic_struct = get_bits(&h->gb, 4);
  53. h->sei_ct_type = 0;
  54. if (h->sei_pic_struct > SEI_PIC_STRUCT_FRAME_TRIPLING)
  55. return AVERROR_INVALIDDATA;
  56. num_clock_ts = sei_num_clock_ts_table[h->sei_pic_struct];
  57. for (i = 0; i < num_clock_ts; i++) {
  58. if (get_bits(&h->gb, 1)) { /* clock_timestamp_flag */
  59. unsigned int full_timestamp_flag;
  60. h->sei_ct_type |= 1 << get_bits(&h->gb, 2);
  61. skip_bits(&h->gb, 1); /* nuit_field_based_flag */
  62. skip_bits(&h->gb, 5); /* counting_type */
  63. full_timestamp_flag = get_bits(&h->gb, 1);
  64. skip_bits(&h->gb, 1); /* discontinuity_flag */
  65. skip_bits(&h->gb, 1); /* cnt_dropped_flag */
  66. skip_bits(&h->gb, 8); /* n_frames */
  67. if (full_timestamp_flag) {
  68. skip_bits(&h->gb, 6); /* seconds_value 0..59 */
  69. skip_bits(&h->gb, 6); /* minutes_value 0..59 */
  70. skip_bits(&h->gb, 5); /* hours_value 0..23 */
  71. } else {
  72. if (get_bits(&h->gb, 1)) { /* seconds_flag */
  73. skip_bits(&h->gb, 6); /* seconds_value range 0..59 */
  74. if (get_bits(&h->gb, 1)) { /* minutes_flag */
  75. skip_bits(&h->gb, 6); /* minutes_value 0..59 */
  76. if (get_bits(&h->gb, 1)) /* hours_flag */
  77. skip_bits(&h->gb, 5); /* hours_value 0..23 */
  78. }
  79. }
  80. }
  81. if (h->sps.time_offset_length > 0)
  82. skip_bits(&h->gb,
  83. h->sps.time_offset_length); /* time_offset */
  84. }
  85. }
  86. if (h->avctx->debug & FF_DEBUG_PICT_INFO)
  87. av_log(h->avctx, AV_LOG_DEBUG, "ct_type:%X pic_struct:%d\n",
  88. h->sei_ct_type, h->sei_pic_struct);
  89. }
  90. return 0;
  91. }
  92. static int decode_unregistered_user_data(H264Context *h, int size)
  93. {
  94. uint8_t user_data[16 + 256];
  95. int e, build, i;
  96. if (size < 16)
  97. return AVERROR_INVALIDDATA;
  98. for (i = 0; i < sizeof(user_data) - 1 && i < size; i++)
  99. user_data[i] = get_bits(&h->gb, 8);
  100. user_data[i] = 0;
  101. e = sscanf(user_data + 16, "x264 - core %d", &build);
  102. if (e == 1 && build > 0)
  103. h->x264_build = build;
  104. if (h->avctx->debug & FF_DEBUG_BUGS)
  105. av_log(h->avctx, AV_LOG_DEBUG, "user data:\"%s\"\n", user_data + 16);
  106. for (; i < size; i++)
  107. skip_bits(&h->gb, 8);
  108. return 0;
  109. }
  110. static int decode_recovery_point(H264Context *h)
  111. {
  112. h->sei_recovery_frame_cnt = get_ue_golomb(&h->gb);
  113. /* 1b exact_match_flag,
  114. * 1b broken_link_flag,
  115. * 2b changing_slice_group_idc */
  116. skip_bits(&h->gb, 4);
  117. return 0;
  118. }
  119. static int decode_buffering_period(H264Context *h)
  120. {
  121. unsigned int sps_id;
  122. int sched_sel_idx;
  123. SPS *sps;
  124. sps_id = get_ue_golomb_31(&h->gb);
  125. if (sps_id > 31 || !h->sps_buffers[sps_id]) {
  126. av_log(h->avctx, AV_LOG_ERROR,
  127. "non-existing SPS %d referenced in buffering period\n", sps_id);
  128. return AVERROR_INVALIDDATA;
  129. }
  130. sps = h->sps_buffers[sps_id];
  131. // NOTE: This is really so duplicated in the standard... See H.264, D.1.1
  132. if (sps->nal_hrd_parameters_present_flag) {
  133. for (sched_sel_idx = 0; sched_sel_idx < sps->cpb_cnt; sched_sel_idx++) {
  134. h->initial_cpb_removal_delay[sched_sel_idx] =
  135. get_bits(&h->gb, sps->initial_cpb_removal_delay_length);
  136. // initial_cpb_removal_delay_offset
  137. skip_bits(&h->gb, sps->initial_cpb_removal_delay_length);
  138. }
  139. }
  140. if (sps->vcl_hrd_parameters_present_flag) {
  141. for (sched_sel_idx = 0; sched_sel_idx < sps->cpb_cnt; sched_sel_idx++) {
  142. h->initial_cpb_removal_delay[sched_sel_idx] =
  143. get_bits(&h->gb, sps->initial_cpb_removal_delay_length);
  144. // initial_cpb_removal_delay_offset
  145. skip_bits(&h->gb, sps->initial_cpb_removal_delay_length);
  146. }
  147. }
  148. h->sei_buffering_period_present = 1;
  149. return 0;
  150. }
  151. int ff_h264_decode_sei(H264Context *h)
  152. {
  153. while (get_bits_left(&h->gb) > 16) {
  154. int size = 0;
  155. int type = 0;
  156. int ret = 0;
  157. do
  158. type += show_bits(&h->gb, 8);
  159. while (get_bits(&h->gb, 8) == 255);
  160. do
  161. size += show_bits(&h->gb, 8);
  162. while (get_bits(&h->gb, 8) == 255);
  163. if (size > get_bits_left(&h->gb) / 8) {
  164. av_log(h->avctx, AV_LOG_ERROR, "SEI type %d truncated at %d\n",
  165. type, get_bits_left(&h->gb));
  166. return AVERROR_INVALIDDATA;
  167. }
  168. switch (type) {
  169. case SEI_TYPE_PIC_TIMING: // Picture timing SEI
  170. ret = decode_picture_timing(h);
  171. if (ret < 0)
  172. return ret;
  173. break;
  174. case SEI_TYPE_USER_DATA_UNREGISTERED:
  175. ret = decode_unregistered_user_data(h, size);
  176. if (ret < 0)
  177. return ret;
  178. break;
  179. case SEI_TYPE_RECOVERY_POINT:
  180. ret = decode_recovery_point(h);
  181. if (ret < 0)
  182. return ret;
  183. break;
  184. case SEI_BUFFERING_PERIOD:
  185. ret = decode_buffering_period(h);
  186. if (ret < 0)
  187. return ret;
  188. break;
  189. default:
  190. av_log(h->avctx, AV_LOG_DEBUG, "unknown SEI type %d\n", type);
  191. skip_bits(&h->gb, 8 * size);
  192. }
  193. // FIXME check bits here
  194. align_get_bits(&h->gb);
  195. }
  196. return 0;
  197. }