ffmpeg: select best pixel format for the encoder if no exact match.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
		
							parent
							
								
									f88d5df383
								
							
						
					
					
						commit
						594090c6c2
					
				
							
								
								
									
										7
									
								
								ffmpeg.c
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								ffmpeg.c
									
									
									
									
									
								
							| @ -764,6 +764,8 @@ static void choose_pixel_fmt(AVStream *st, AVCodec *codec) | ||||
| { | ||||
|     if(codec && codec->pix_fmts){ | ||||
|         const enum PixelFormat *p= codec->pix_fmts; | ||||
|         int has_alpha= av_pix_fmt_descriptors[st->codec->pix_fmt].nb_components % 2 == 0; | ||||
|         enum PixelFormat best= PIX_FMT_NONE; | ||||
|         if(st->codec->strict_std_compliance <= FF_COMPLIANCE_UNOFFICIAL){ | ||||
|             if(st->codec->codec_id==CODEC_ID_MJPEG){ | ||||
|                 p= (const enum PixelFormat[]){PIX_FMT_YUVJ420P, PIX_FMT_YUVJ422P, PIX_FMT_YUV420P, PIX_FMT_YUV422P, PIX_FMT_NONE}; | ||||
| @ -772,6 +774,7 @@ static void choose_pixel_fmt(AVStream *st, AVCodec *codec) | ||||
|             } | ||||
|         } | ||||
|         for (; *p != PIX_FMT_NONE; p++) { | ||||
|             best= avcodec_find_best_pix_fmt2(best, *p, st->codec->pix_fmt, has_alpha, NULL); | ||||
|             if(*p == st->codec->pix_fmt) | ||||
|                 break; | ||||
|         } | ||||
| @ -781,8 +784,8 @@ static void choose_pixel_fmt(AVStream *st, AVCodec *codec) | ||||
|                         "Incompatible pixel format '%s' for codec '%s', auto-selecting format '%s'\n", | ||||
|                         av_pix_fmt_descriptors[st->codec->pix_fmt].name, | ||||
|                         codec->name, | ||||
|                         av_pix_fmt_descriptors[codec->pix_fmts[0]].name); | ||||
|             st->codec->pix_fmt = codec->pix_fmts[0]; | ||||
|                         av_pix_fmt_descriptors[best].name); | ||||
|             st->codec->pix_fmt = best; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user