Mercurial > libavcodec.hg
comparison mpeg12.c @ 4119:85438e10d72d libavcodec
reindentation, patch by From: Steve Lhomme, slhomme divxcorp com
author | diego |
---|---|
date | Wed, 01 Nov 2006 21:09:14 +0000 |
parents | ee762ee26dc2 |
children | 2205aefb22b7 |
comparison
equal
deleted
inserted
replaced
4118:a1786732cd62 | 4119:85438e10d72d |
---|---|
3107 | 3107 |
3108 if(avctx->debug & FF_DEBUG_STARTCODE){ | 3108 if(avctx->debug & FF_DEBUG_STARTCODE){ |
3109 av_log(avctx, AV_LOG_DEBUG, "%3X at %zd left %d\n", start_code, buf_ptr-buf, input_size); | 3109 av_log(avctx, AV_LOG_DEBUG, "%3X at %zd left %d\n", start_code, buf_ptr-buf, input_size); |
3110 } | 3110 } |
3111 | 3111 |
3112 /* prepare data for next start code */ | 3112 /* prepare data for next start code */ |
3113 switch(start_code) { | 3113 switch(start_code) { |
3114 case SEQ_START_CODE: | 3114 case SEQ_START_CODE: |
3115 mpeg1_decode_sequence(avctx, buf_ptr, | 3115 mpeg1_decode_sequence(avctx, buf_ptr, |
3116 input_size); | 3116 input_size); |
3117 break; | |
3118 | |
3119 case PICTURE_START_CODE: | |
3120 /* we have a complete image : we try to decompress it */ | |
3121 mpeg1_decode_picture(avctx, | |
3122 buf_ptr, input_size); | |
3123 break; | |
3124 case EXT_START_CODE: | |
3125 mpeg_decode_extension(avctx, | |
3126 buf_ptr, input_size); | |
3127 break; | |
3128 case USER_START_CODE: | |
3129 mpeg_decode_user_data(avctx, | |
3130 buf_ptr, input_size); | |
3131 break; | |
3132 case GOP_START_CODE: | |
3133 s2->first_field=0; | |
3134 mpeg_decode_gop(avctx, | |
3135 buf_ptr, input_size); | |
3136 break; | |
3137 default: | |
3138 if (start_code >= SLICE_MIN_START_CODE && | |
3139 start_code <= SLICE_MAX_START_CODE) { | |
3140 int mb_y= start_code - SLICE_MIN_START_CODE; | |
3141 | |
3142 if(s2->last_picture_ptr==NULL){ | |
3143 /* skip b frames if we dont have reference frames */ | |
3144 if(s2->pict_type==B_TYPE) break; | |
3145 /* skip P frames if we dont have reference frame no valid header */ | |
3146 // if(s2->pict_type==P_TYPE && s2->first_field && !s2->first_slice) break; | |
3147 } | |
3148 /* skip b frames if we are in a hurry */ | |
3149 if(avctx->hurry_up && s2->pict_type==B_TYPE) break; | |
3150 if( (avctx->skip_frame >= AVDISCARD_NONREF && s2->pict_type==B_TYPE) | |
3151 ||(avctx->skip_frame >= AVDISCARD_NONKEY && s2->pict_type!=I_TYPE) | |
3152 || avctx->skip_frame >= AVDISCARD_ALL) | |
3117 break; | 3153 break; |
3118 | 3154 /* skip everything if we are in a hurry>=5 */ |
3119 case PICTURE_START_CODE: | 3155 if(avctx->hurry_up>=5) break; |
3120 /* we have a complete image : we try to decompress it */ | 3156 |
3121 mpeg1_decode_picture(avctx, | 3157 if (!s->mpeg_enc_ctx_allocated) break; |
3122 buf_ptr, input_size); | 3158 |
3123 break; | 3159 if(s2->codec_id == CODEC_ID_MPEG2VIDEO){ |
3124 case EXT_START_CODE: | 3160 if(mb_y < avctx->skip_top || mb_y >= s2->mb_height - avctx->skip_bottom) |
3125 mpeg_decode_extension(avctx, | 3161 break; |
3126 buf_ptr, input_size); | 3162 } |
3127 break; | 3163 |
3128 case USER_START_CODE: | 3164 if(s2->first_slice){ |
3129 mpeg_decode_user_data(avctx, | 3165 s2->first_slice=0; |
3130 buf_ptr, input_size); | 3166 if(mpeg_field_start(s2) < 0) |
3131 break; | 3167 return -1; |
3132 case GOP_START_CODE: | 3168 } |
3133 s2->first_field=0; | 3169 |
3134 mpeg_decode_gop(avctx, | 3170 if(avctx->thread_count > 1){ |
3135 buf_ptr, input_size); | 3171 int threshold= (s2->mb_height*s->slice_count + avctx->thread_count/2) / avctx->thread_count; |
3136 break; | 3172 if(threshold <= mb_y){ |
3137 default: | 3173 MpegEncContext *thread_context= s2->thread_context[s->slice_count]; |
3138 if (start_code >= SLICE_MIN_START_CODE && | 3174 |
3139 start_code <= SLICE_MAX_START_CODE) { | 3175 thread_context->start_mb_y= mb_y; |
3140 int mb_y= start_code - SLICE_MIN_START_CODE; | 3176 thread_context->end_mb_y = s2->mb_height; |
3141 | 3177 if(s->slice_count){ |
3142 if(s2->last_picture_ptr==NULL){ | 3178 s2->thread_context[s->slice_count-1]->end_mb_y= mb_y; |
3143 /* skip b frames if we dont have reference frames */ | 3179 ff_update_duplicate_context(thread_context, s2); |
3144 if(s2->pict_type==B_TYPE) break; | |
3145 /* skip P frames if we dont have reference frame no valid header */ | |
3146 // if(s2->pict_type==P_TYPE && s2->first_field && !s2->first_slice) break; | |
3147 } | 3180 } |
3148 /* skip b frames if we are in a hurry */ | 3181 init_get_bits(&thread_context->gb, buf_ptr, input_size*8); |
3149 if(avctx->hurry_up && s2->pict_type==B_TYPE) break; | 3182 s->slice_count++; |
3150 if( (avctx->skip_frame >= AVDISCARD_NONREF && s2->pict_type==B_TYPE) | |
3151 ||(avctx->skip_frame >= AVDISCARD_NONKEY && s2->pict_type!=I_TYPE) | |
3152 || avctx->skip_frame >= AVDISCARD_ALL) | |
3153 break; | |
3154 /* skip everything if we are in a hurry>=5 */ | |
3155 if(avctx->hurry_up>=5) break; | |
3156 | |
3157 if (!s->mpeg_enc_ctx_allocated) break; | |
3158 | |
3159 if(s2->codec_id == CODEC_ID_MPEG2VIDEO){ | |
3160 if(mb_y < avctx->skip_top || mb_y >= s2->mb_height - avctx->skip_bottom) | |
3161 break; | |
3162 } | |
3163 | |
3164 if(s2->first_slice){ | |
3165 s2->first_slice=0; | |
3166 if(mpeg_field_start(s2) < 0) | |
3167 return -1; | |
3168 } | |
3169 | |
3170 if(avctx->thread_count > 1){ | |
3171 int threshold= (s2->mb_height*s->slice_count + avctx->thread_count/2) / avctx->thread_count; | |
3172 if(threshold <= mb_y){ | |
3173 MpegEncContext *thread_context= s2->thread_context[s->slice_count]; | |
3174 | |
3175 thread_context->start_mb_y= mb_y; | |
3176 thread_context->end_mb_y = s2->mb_height; | |
3177 if(s->slice_count){ | |
3178 s2->thread_context[s->slice_count-1]->end_mb_y= mb_y; | |
3179 ff_update_duplicate_context(thread_context, s2); | |
3180 } | |
3181 init_get_bits(&thread_context->gb, buf_ptr, input_size*8); | |
3182 s->slice_count++; | |
3183 } | |
3184 buf_ptr += 2; //FIXME add minimum num of bytes per slice | |
3185 }else{ | |
3186 ret = mpeg_decode_slice(s, mb_y, &buf_ptr, input_size); | |
3187 emms_c(); | |
3188 | |
3189 if(ret < 0){ | |
3190 if(s2->resync_mb_x>=0 && s2->resync_mb_y>=0) | |
3191 ff_er_add_slice(s2, s2->resync_mb_x, s2->resync_mb_y, s2->mb_x, s2->mb_y, AC_ERROR|DC_ERROR|MV_ERROR); | |
3192 }else{ | |
3193 ff_er_add_slice(s2, s2->resync_mb_x, s2->resync_mb_y, s2->mb_x-1, s2->mb_y, AC_END|DC_END|MV_END); | |
3194 } | |
3195 } | |
3196 } | 3183 } |
3197 break; | 3184 buf_ptr += 2; //FIXME add minimum num of bytes per slice |
3198 } | 3185 }else{ |
3186 ret = mpeg_decode_slice(s, mb_y, &buf_ptr, input_size); | |
3187 emms_c(); | |
3188 | |
3189 if(ret < 0){ | |
3190 if(s2->resync_mb_x>=0 && s2->resync_mb_y>=0) | |
3191 ff_er_add_slice(s2, s2->resync_mb_x, s2->resync_mb_y, s2->mb_x, s2->mb_y, AC_ERROR|DC_ERROR|MV_ERROR); | |
3192 }else{ | |
3193 ff_er_add_slice(s2, s2->resync_mb_x, s2->resync_mb_y, s2->mb_x-1, s2->mb_y, AC_END|DC_END|MV_END); | |
3194 } | |
3195 } | |
3196 } | |
3197 break; | |
3198 } | |
3199 } | 3199 } |
3200 } | 3200 } |
3201 | 3201 |
3202 static int mpeg_decode_end(AVCodecContext *avctx) | 3202 static int mpeg_decode_end(AVCodecContext *avctx) |
3203 { | 3203 { |