00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00028 #include "internal.h"
00029 #include "avcodec.h"
00030 #include "h264.h"
00031 #include "golomb.h"
00032
00033
00034 #include <assert.h>
00035
00036 static const uint8_t sei_num_clock_ts_table[9]={
00037 1, 1, 1, 2, 2, 3, 3, 2, 3
00038 };
00039
00040 void ff_h264_reset_sei(H264Context *h) {
00041 h->sei_recovery_frame_cnt = -1;
00042 h->sei_dpb_output_delay = 0;
00043 h->sei_cpb_removal_delay = -1;
00044 h->sei_buffering_period_present = 0;
00045 }
00046
00047 static int decode_picture_timing(H264Context *h){
00048 MpegEncContext * const s = &h->s;
00049 if(h->sps.nal_hrd_parameters_present_flag || h->sps.vcl_hrd_parameters_present_flag){
00050 h->sei_cpb_removal_delay = get_bits_long(&s->gb, h->sps.cpb_removal_delay_length);
00051 h->sei_dpb_output_delay = get_bits_long(&s->gb, h->sps.dpb_output_delay_length);
00052 }
00053 if(h->sps.pic_struct_present_flag){
00054 unsigned int i, num_clock_ts;
00055 h->sei_pic_struct = get_bits(&s->gb, 4);
00056 h->sei_ct_type = 0;
00057
00058 if (h->sei_pic_struct > SEI_PIC_STRUCT_FRAME_TRIPLING)
00059 return -1;
00060
00061 num_clock_ts = sei_num_clock_ts_table[h->sei_pic_struct];
00062
00063 for (i = 0 ; i < num_clock_ts ; i++){
00064 if(get_bits(&s->gb, 1)){
00065 unsigned int full_timestamp_flag;
00066 h->sei_ct_type |= 1<<get_bits(&s->gb, 2);
00067 skip_bits(&s->gb, 1);
00068 skip_bits(&s->gb, 5);
00069 full_timestamp_flag = get_bits(&s->gb, 1);
00070 skip_bits(&s->gb, 1);
00071 skip_bits(&s->gb, 1);
00072 skip_bits(&s->gb, 8);
00073 if(full_timestamp_flag){
00074 skip_bits(&s->gb, 6);
00075 skip_bits(&s->gb, 6);
00076 skip_bits(&s->gb, 5);
00077 }else{
00078 if(get_bits(&s->gb, 1)){
00079 skip_bits(&s->gb, 6);
00080 if(get_bits(&s->gb, 1)){
00081 skip_bits(&s->gb, 6);
00082 if(get_bits(&s->gb, 1))
00083 skip_bits(&s->gb, 5);
00084 }
00085 }
00086 }
00087 if(h->sps.time_offset_length > 0)
00088 skip_bits(&s->gb, h->sps.time_offset_length);
00089 }
00090 }
00091
00092 if(s->avctx->debug & FF_DEBUG_PICT_INFO)
00093 av_log(s->avctx, AV_LOG_DEBUG, "ct_type:%X pic_struct:%d\n", h->sei_ct_type, h->sei_pic_struct);
00094 }
00095 return 0;
00096 }
00097
00098 static int decode_user_data_itu_t_t35(H264Context *h, int size) {
00099 MpegEncContext * const s = &h->s;
00100 uint32_t user_identifier;
00101 int dtg_active_format;
00102
00103 if (size < 7)
00104 return -1;
00105 size -= 7;
00106
00107 skip_bits(&s->gb, 8);
00108 skip_bits(&s->gb, 16);
00109 user_identifier = get_bits_long(&s->gb, 32);
00110
00111 switch (user_identifier) {
00112 case 0x44544731:
00113 if (size < 1)
00114 return -1;
00115 skip_bits(&s->gb, 1);
00116 if (get_bits(&s->gb, 1)) {
00117 skip_bits(&s->gb, 6);
00118 if (size < 2)
00119 return -1;
00120 skip_bits(&s->gb, 4);
00121 dtg_active_format = get_bits(&s->gb, 4);
00122 s->avctx->dtg_active_format = dtg_active_format;
00123 } else {
00124 skip_bits(&s->gb, 6);
00125 }
00126 break;
00127 default:
00128 skip_bits(&s->gb, size * 8);
00129 break;
00130 }
00131
00132 return 0;
00133 }
00134
00135 static int decode_unregistered_user_data(H264Context *h, int size){
00136 MpegEncContext * const s = &h->s;
00137 uint8_t user_data[16+256];
00138 int e, build, i;
00139
00140 if(size<16)
00141 return -1;
00142
00143 for(i=0; i<sizeof(user_data)-1 && i<size; i++){
00144 user_data[i]= get_bits(&s->gb, 8);
00145 }
00146
00147 user_data[i]= 0;
00148 e= sscanf(user_data+16, "x264 - core %d", &build);
00149 if(e==1 && build>0)
00150 h->x264_build= build;
00151 if(e==1 && build==1 && !strncmp(user_data+16, "x264 - core 0000", 16))
00152 h->x264_build = 67;
00153
00154 if(s->avctx->debug & FF_DEBUG_BUGS)
00155 av_log(s->avctx, AV_LOG_DEBUG, "user data:\"%s\"\n", user_data+16);
00156
00157 for(; i<size; i++)
00158 skip_bits(&s->gb, 8);
00159
00160 return 0;
00161 }
00162
00163 static int decode_recovery_point(H264Context *h){
00164 MpegEncContext * const s = &h->s;
00165
00166 h->sei_recovery_frame_cnt = get_ue_golomb(&s->gb);
00167 skip_bits(&s->gb, 4);
00168
00169 return 0;
00170 }
00171
00172 static int decode_buffering_period(H264Context *h){
00173 MpegEncContext * const s = &h->s;
00174 unsigned int sps_id;
00175 int sched_sel_idx;
00176 SPS *sps;
00177
00178 sps_id = get_ue_golomb_31(&s->gb);
00179 if(sps_id > 31 || !h->sps_buffers[sps_id]) {
00180 av_log(h->s.avctx, AV_LOG_ERROR, "non-existing SPS %d referenced in buffering period\n", sps_id);
00181 return -1;
00182 }
00183 sps = h->sps_buffers[sps_id];
00184
00185
00186 if (sps->nal_hrd_parameters_present_flag) {
00187 for (sched_sel_idx = 0; sched_sel_idx < sps->cpb_cnt; sched_sel_idx++) {
00188 h->initial_cpb_removal_delay[sched_sel_idx] = get_bits_long(&s->gb, sps->initial_cpb_removal_delay_length);
00189 skip_bits(&s->gb, sps->initial_cpb_removal_delay_length);
00190 }
00191 }
00192 if (sps->vcl_hrd_parameters_present_flag) {
00193 for (sched_sel_idx = 0; sched_sel_idx < sps->cpb_cnt; sched_sel_idx++) {
00194 h->initial_cpb_removal_delay[sched_sel_idx] = get_bits_long(&s->gb, sps->initial_cpb_removal_delay_length);
00195 skip_bits(&s->gb, sps->initial_cpb_removal_delay_length);
00196 }
00197 }
00198
00199 h->sei_buffering_period_present = 1;
00200 return 0;
00201 }
00202
00203 int ff_h264_decode_sei(H264Context *h){
00204 MpegEncContext * const s = &h->s;
00205
00206 while (get_bits_left(&s->gb) > 16) {
00207 int size, type;
00208
00209 type=0;
00210 do{
00211 if (get_bits_left(&s->gb) < 8)
00212 return -1;
00213 type+= show_bits(&s->gb, 8);
00214 }while(get_bits(&s->gb, 8) == 255);
00215
00216 size=0;
00217 do{
00218 if (get_bits_left(&s->gb) < 8)
00219 return -1;
00220 size+= show_bits(&s->gb, 8);
00221 }while(get_bits(&s->gb, 8) == 255);
00222
00223 if(s->avctx->debug&FF_DEBUG_STARTCODE)
00224 av_log(h->s.avctx, AV_LOG_DEBUG, "SEI %d len:%d\n", type, size);
00225
00226 switch(type){
00227 case SEI_TYPE_PIC_TIMING:
00228 if(decode_picture_timing(h) < 0)
00229 return -1;
00230 break;
00231 case SEI_TYPE_USER_DATA_ITU_T_T35:
00232 if(decode_user_data_itu_t_t35(h, size) < 0)
00233 return -1;
00234 break;
00235 case SEI_TYPE_USER_DATA_UNREGISTERED:
00236 if(decode_unregistered_user_data(h, size) < 0)
00237 return -1;
00238 break;
00239 case SEI_TYPE_RECOVERY_POINT:
00240 if(decode_recovery_point(h) < 0)
00241 return -1;
00242 break;
00243 case SEI_BUFFERING_PERIOD:
00244 if(decode_buffering_period(h) < 0)
00245 return -1;
00246 break;
00247 default:
00248 skip_bits(&s->gb, 8*size);
00249 }
00250
00251
00252 align_get_bits(&s->gb);
00253 }
00254
00255 return 0;
00256 }