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){ |     if(codec && codec->pix_fmts){ | ||||||
|         const enum PixelFormat *p= 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->strict_std_compliance <= FF_COMPLIANCE_UNOFFICIAL){ | ||||||
|             if(st->codec->codec_id==CODEC_ID_MJPEG){ |             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}; |                 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++) { |         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) |             if(*p == st->codec->pix_fmt) | ||||||
|                 break; |                 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", |                         "Incompatible pixel format '%s' for codec '%s', auto-selecting format '%s'\n", | ||||||
|                         av_pix_fmt_descriptors[st->codec->pix_fmt].name, |                         av_pix_fmt_descriptors[st->codec->pix_fmt].name, | ||||||
|                         codec->name, |                         codec->name, | ||||||
|                         av_pix_fmt_descriptors[codec->pix_fmts[0]].name); |                         av_pix_fmt_descriptors[best].name); | ||||||
|             st->codec->pix_fmt = codec->pix_fmts[0]; |             st->codec->pix_fmt = best; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user