You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	Revert r19317, "simplify slice_end, return size of output frame".
It returns non decodable B-frames. Originally committed as revision 19324 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
		| @@ -1935,7 +1935,7 @@ static int slice_decode_thread(AVCodecContext *c, void *arg){ | ||||
|  | ||||
| /** | ||||
|  * Handles slice ends. | ||||
|  * @return sizeof(AVFrame) if a frame is output, 0 otherwise | ||||
|  * @return 1 if it seems to be the last slice | ||||
|  */ | ||||
| static int slice_end(AVCodecContext *avctx, AVFrame *pict) | ||||
| { | ||||
| @@ -1966,7 +1966,6 @@ static int slice_end(AVCodecContext *avctx, AVFrame *pict) | ||||
|         if (s->pict_type == FF_B_TYPE || s->low_delay) { | ||||
|             *pict= *(AVFrame*)s->current_picture_ptr; | ||||
|             ff_print_debug_info(s, pict); | ||||
|             return sizeof(*pict); | ||||
|         } else { | ||||
|             s->picture_number++; | ||||
|             /* latency of 1 frame for I- and P-frames */ | ||||
| @@ -1974,11 +1973,13 @@ static int slice_end(AVCodecContext *avctx, AVFrame *pict) | ||||
|             if (s->last_picture_ptr != NULL) { | ||||
|                 *pict= *(AVFrame*)s->last_picture_ptr; | ||||
|                  ff_print_debug_info(s, pict); | ||||
|                  return sizeof(*pict); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         return 1; | ||||
|     } else { | ||||
|         return 0; | ||||
|     } | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int mpeg1_decode_sequence(AVCodecContext *avctx, | ||||
| @@ -2316,7 +2317,10 @@ static int decode_chunks(AVCodecContext *avctx, | ||||
|                 if (CONFIG_MPEG_VDPAU_DECODER && avctx->codec->capabilities&CODEC_CAP_HWACCEL_VDPAU) | ||||
|                     ff_vdpau_mpeg_picture_complete(s2, buf, buf_size, s->slice_count); | ||||
|  | ||||
|                 *data_size = slice_end(avctx, picture); | ||||
|                 if (slice_end(avctx, picture)) { | ||||
|                     if(s2->last_picture_ptr || s2->low_delay) //FIXME merge with the stuff in mpeg_decode_slice | ||||
|                         *data_size = sizeof(AVPicture); | ||||
|                 } | ||||
|             } | ||||
|             s2->pict_type= 0; | ||||
|             return FFMAX(0, buf_ptr - buf - s2->parse_context.last_index); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user