| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * The simplest mpeg encoder (well, it was the simplest!) | 2  * The simplest mpeg encoder (well, it was the simplest!) | 
| 3  * Copyright (c) 2000,2001 Fabrice Bellard | 3  * Copyright (c) 2000,2001 Fabrice Bellard | 
| 4  * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at> | 4  * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at> | 
| 5  * | 5  * | 
| 6  * 4MV & hq & B-frame encoding stuff by Michael Niedermayer <michaelni@gmx.at> | 6  * 4MV & hq & B-frame encoding stuff by Michael Niedermayer <michaelni@gmx.at> | 
| 7  * | 7  * | 
| 8  * This file is part of FFmpeg. | 8  * This file is part of FFmpeg. | 
| 9  * | 9  * | 
| 10  * FFmpeg is free software; you can redistribute it and/or | 10  * FFmpeg is free software; you can redistribute it and/or | 
| (...skipping 566 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 577     if(s->codec_id == CODEC_ID_MPEG2VIDEO && !s->progressive_sequence) | 577     if(s->codec_id == CODEC_ID_MPEG2VIDEO && !s->progressive_sequence) | 
| 578         s->mb_height = (s->height + 31) / 32 * 2; | 578         s->mb_height = (s->height + 31) / 32 * 2; | 
| 579     else | 579     else | 
| 580         s->mb_height = (s->height + 15) / 16; | 580         s->mb_height = (s->height + 15) / 16; | 
| 581 | 581 | 
| 582     if(s->avctx->pix_fmt == PIX_FMT_NONE){ | 582     if(s->avctx->pix_fmt == PIX_FMT_NONE){ | 
| 583         av_log(s->avctx, AV_LOG_ERROR, "decoding to PIX_FMT_NONE is not supporte
      d.\n"); | 583         av_log(s->avctx, AV_LOG_ERROR, "decoding to PIX_FMT_NONE is not supporte
      d.\n"); | 
| 584         return -1; | 584         return -1; | 
| 585     } | 585     } | 
| 586 | 586 | 
| 587     if(s->avctx->active_thread_type&FF_THREAD_SLICE && | 587     if(s->avctx->thread_count > MAX_THREADS){ | 
| 588        (s->avctx->thread_count > MAX_THREADS || (s->avctx->thread_count > s->mb_
      height && s->mb_height))){ |  | 
| 589         av_log(s->avctx, AV_LOG_ERROR, "too many threads\n"); | 588         av_log(s->avctx, AV_LOG_ERROR, "too many threads\n"); | 
| 590         return -1; | 589         return -1; | 
| 591     } | 590     } | 
| 592 | 591 | 
| 593     if((s->width || s->height) && av_image_check_size(s->width, s->height, 0, s-
      >avctx)) | 592     if((s->width || s->height) && av_image_check_size(s->width, s->height, 0, s-
      >avctx)) | 
| 594         return -1; | 593         return -1; | 
| 595 | 594 | 
| 596     dsputil_init(&s->dsp, s->avctx); | 595     dsputil_init(&s->dsp, s->avctx); | 
| 597     ff_dct_common_init(s); | 596     ff_dct_common_init(s); | 
| 598 | 597 | 
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 738        s->visualization_buffer[1] = av_malloc((s->mb_width*16 + 2*EDGE_WIDTH) * 
      s->mb_height*16 + 2*EDGE_WIDTH); | 737        s->visualization_buffer[1] = av_malloc((s->mb_width*16 + 2*EDGE_WIDTH) * 
      s->mb_height*16 + 2*EDGE_WIDTH); | 
| 739        s->visualization_buffer[2] = av_malloc((s->mb_width*16 + 2*EDGE_WIDTH) * 
      s->mb_height*16 + 2*EDGE_WIDTH); | 738        s->visualization_buffer[2] = av_malloc((s->mb_width*16 + 2*EDGE_WIDTH) * 
      s->mb_height*16 + 2*EDGE_WIDTH); | 
| 740     } | 739     } | 
| 741 | 740 | 
| 742     s->context_initialized = 1; | 741     s->context_initialized = 1; | 
| 743     s->thread_context[0]= s; | 742     s->thread_context[0]= s; | 
| 744 | 743 | 
| 745     if (HAVE_THREADS && s->avctx->active_thread_type&FF_THREAD_SLICE) { | 744     if (HAVE_THREADS && s->avctx->active_thread_type&FF_THREAD_SLICE) { | 
| 746         threads = s->avctx->thread_count; | 745         threads = s->avctx->thread_count; | 
| 747 | 746 | 
|  | 747         if (s->avctx->thread_count > s->mb_height && s->mb_height) { | 
|  | 748             av_log(s->avctx, AV_LOG_WARNING, "Reducing from %d to %d threads due
       to height of %d pixels.\n", s->avctx->thread_count, s->mb_height, s->height); | 
|  | 749             threads = s->mb_height; | 
|  | 750         } | 
|  | 751 | 
| 748         for(i=1; i<threads; i++){ | 752         for(i=1; i<threads; i++){ | 
| 749             s->thread_context[i]= av_malloc(sizeof(MpegEncContext)); | 753             s->thread_context[i]= av_malloc(sizeof(MpegEncContext)); | 
| 750             memcpy(s->thread_context[i], s, sizeof(MpegEncContext)); | 754             memcpy(s->thread_context[i], s, sizeof(MpegEncContext)); | 
| 751         } | 755         } | 
| 752 | 756 | 
| 753         for(i=0; i<threads; i++){ | 757         for(i=0; i<threads; i++){ | 
| 754             if(init_duplicate_context(s->thread_context[i], s) < 0) | 758             if(init_duplicate_context(s->thread_context[i], s) < 0) | 
| 755                goto fail; | 759                goto fail; | 
| 756             s->thread_context[i]->start_mb_y= (s->mb_height*(i  ) + s->avctx->th
      read_count/2) / s->avctx->thread_count; | 760             s->thread_context[i]->start_mb_y= (s->mb_height*(i  ) + s->avctx->th
      read_count/2) / s->avctx->thread_count; | 
| 757             s->thread_context[i]->end_mb_y  = (s->mb_height*(i+1) + s->avctx->th
      read_count/2) / s->avctx->thread_count; | 761             s->thread_context[i]->end_mb_y  = (s->mb_height*(i+1) + s->avctx->th
      read_count/2) / s->avctx->thread_count; | 
| (...skipping 1476 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2234 #endif | 2238 #endif | 
| 2235     if(s->avctx->lowres) MPV_decode_mb_internal(s, block, 1, 0); | 2239     if(s->avctx->lowres) MPV_decode_mb_internal(s, block, 1, 0); | 
| 2236     else                  MPV_decode_mb_internal(s, block, 0, 0); | 2240     else                  MPV_decode_mb_internal(s, block, 0, 0); | 
| 2237 } | 2241 } | 
| 2238 | 2242 | 
| 2239 /** | 2243 /** | 
| 2240  * | 2244  * | 
| 2241  * @param h is the normal height, this will be reduced automatically if needed f
      or the last row | 2245  * @param h is the normal height, this will be reduced automatically if needed f
      or the last row | 
| 2242  */ | 2246  */ | 
| 2243 void ff_draw_horiz_band(MpegEncContext *s, int y, int h){ | 2247 void ff_draw_horiz_band(MpegEncContext *s, int y, int h){ | 
| 2244 »       const int field_pic= s->picture_structure != PICT_FRAME; | 2248         const int field_pic= s->picture_structure != PICT_FRAME; | 
| 2245     if(field_pic){ | 2249     if(field_pic){ | 
| 2246         h <<= 1; | 2250         h <<= 1; | 
| 2247         y <<= 1; | 2251         y <<= 1; | 
| 2248     } | 2252     } | 
| 2249 | 2253 | 
| 2250     if (!s->avctx->hwaccel | 2254     if (!s->avctx->hwaccel | 
| 2251        && !(s->avctx->codec->capabilities&CODEC_CAP_HWACCEL_VDPAU) | 2255        && !(s->avctx->codec->capabilities&CODEC_CAP_HWACCEL_VDPAU) | 
| 2252        && s->unrestricted_mv | 2256        && s->unrestricted_mv | 
| 2253        && s->current_picture.reference | 2257        && s->current_picture.reference | 
| 2254        && !s->intra_only | 2258        && !s->intra_only | 
| (...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2590 | 2594 | 
| 2591     s->y_dc_scale= s->y_dc_scale_table[ qscale ]; | 2595     s->y_dc_scale= s->y_dc_scale_table[ qscale ]; | 
| 2592     s->c_dc_scale= s->c_dc_scale_table[ s->chroma_qscale ]; | 2596     s->c_dc_scale= s->c_dc_scale_table[ s->chroma_qscale ]; | 
| 2593 } | 2597 } | 
| 2594 | 2598 | 
| 2595 void MPV_report_decode_progress(MpegEncContext *s) | 2599 void MPV_report_decode_progress(MpegEncContext *s) | 
| 2596 { | 2600 { | 
| 2597     if (s->pict_type != FF_B_TYPE && !s->partitioned_frame) | 2601     if (s->pict_type != FF_B_TYPE && !s->partitioned_frame) | 
| 2598         ff_thread_report_progress((AVFrame*)s->current_picture_ptr, s->mb_y, 0); | 2602         ff_thread_report_progress((AVFrame*)s->current_picture_ptr, s->mb_y, 0); | 
| 2599 } | 2603 } | 
| OLD | NEW | 
|---|