mirror of
				https://github.com/nyanmisaka/ffmpeg-rockchip.git
				synced 2025-11-01 04:53:04 +08:00 
			
		
		
		
	non 420P grab fix - suppressed unused 'sys/poll.h' header - do not put error if audio or video stream not found (no longer needs to use -an or -vn when it is obvious) - display error message when image filename does not contain '%d'
Originally committed as revision 123 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
		
							
								
								
									
										70
									
								
								ffmpeg.c
									
									
									
									
									
								
							
							
						
						
									
										70
									
								
								ffmpeg.c
									
									
									
									
									
								
							| @@ -24,7 +24,6 @@ | |||||||
| #include <fcntl.h> | #include <fcntl.h> | ||||||
| #include <sys/ioctl.h> | #include <sys/ioctl.h> | ||||||
| #include <sys/time.h> | #include <sys/time.h> | ||||||
| #include <sys/poll.h> |  | ||||||
| #include <termios.h> | #include <termios.h> | ||||||
| #include <sys/time.h> | #include <sys/time.h> | ||||||
| #include <sys/resource.h> | #include <sys/resource.h> | ||||||
| @@ -466,6 +465,8 @@ int av_grab(AVFormatContext *s) | |||||||
|  |  | ||||||
|             if (pix_fmt != PIX_FMT_YUV420P) { |             if (pix_fmt != PIX_FMT_YUV420P) { | ||||||
|                 picture = &picture_tmp1; |                 picture = &picture_tmp1; | ||||||
|  |                 avpicture_fill(picture, picture_420p,  | ||||||
|  |                                PIX_FMT_YUV420P, width, height); | ||||||
|                 img_convert(picture, PIX_FMT_YUV420P, |                 img_convert(picture, PIX_FMT_YUV420P, | ||||||
|                             picture2, pix_fmt,  |                             picture2, pix_fmt,  | ||||||
|                             width, height); |                             width, height); | ||||||
| @@ -1762,6 +1763,21 @@ int find_codec_parameters(AVFormatContext *ic) | |||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | int filename_number_test(const char *filename) | ||||||
|  | { | ||||||
|  |     char buf[1024]; | ||||||
|  |  | ||||||
|  |     if (get_frame_filename(buf, sizeof(buf), filename, 1) < 0) { | ||||||
|  |         fprintf(stderr, "%s: Incorrect image filename syntax.\n" | ||||||
|  |                 "Use '%%d' to specify the image number:\n" | ||||||
|  |                 "  for img1.jpg, img2.jpg, ..., use 'img%%d.jpg';\n" | ||||||
|  |                 "  for img001.jpg, img002.jpg, ..., use 'img%%03d.jpg'.\n",  | ||||||
|  |                 filename); | ||||||
|  |         return -1; | ||||||
|  |     } else { | ||||||
|  |         return 0; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
| void opt_input_file(const char *filename) | void opt_input_file(const char *filename) | ||||||
| { | { | ||||||
| @@ -1824,6 +1840,12 @@ void opt_input_file(const char *filename) | |||||||
|         ap->width = frame_width; |         ap->width = frame_width; | ||||||
|     if (!ap->height) |     if (!ap->height) | ||||||
|         ap->height = frame_height; |         ap->height = frame_height; | ||||||
|  |  | ||||||
|  |     /* check filename in case of an image number is expected */ | ||||||
|  |     if (ic->format->flags & AVFMT_NEEDNUMBER) { | ||||||
|  |         if (filename_number_test(ic->filename) < 0) | ||||||
|  |             exit(1); | ||||||
|  |     } | ||||||
|      |      | ||||||
|     err = ic->format->read_header(ic, ap); |     err = ic->format->read_header(ic, ap); | ||||||
|     if (err < 0) { |     if (err < 0) { | ||||||
| @@ -1862,11 +1884,36 @@ void opt_input_file(const char *filename) | |||||||
|     file_format = NULL; |     file_format = NULL; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void check_audio_video_inputs(int *has_video_ptr, int *has_audio_ptr) | ||||||
|  | { | ||||||
|  |     int has_video, has_audio, i, j; | ||||||
|  |     AVFormatContext *ic; | ||||||
|  |  | ||||||
|  |     has_video = 0; | ||||||
|  |     has_audio = 0; | ||||||
|  |     for(j=0;j<nb_input_files;j++) { | ||||||
|  |         ic = input_files[j]; | ||||||
|  |         for(i=0;i<ic->nb_streams;i++) { | ||||||
|  |             AVCodecContext *enc = &ic->streams[i]->codec; | ||||||
|  |             switch(enc->codec_type) { | ||||||
|  |             case CODEC_TYPE_AUDIO: | ||||||
|  |                 has_audio = 1; | ||||||
|  |                 break; | ||||||
|  |             case CODEC_TYPE_VIDEO: | ||||||
|  |                 has_video = 1; | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     *has_video_ptr = has_video; | ||||||
|  |     *has_audio_ptr = has_audio; | ||||||
|  | } | ||||||
|  |  | ||||||
| void opt_output_file(const char *filename) | void opt_output_file(const char *filename) | ||||||
| { | { | ||||||
|     AVStream *st; |     AVStream *st; | ||||||
|     AVFormatContext *oc; |     AVFormatContext *oc; | ||||||
|     int use_video, use_audio, nb_streams; |     int use_video, use_audio, nb_streams, input_has_video, input_has_audio; | ||||||
|     int codec_id; |     int codec_id; | ||||||
|  |  | ||||||
|     if (!strcmp(filename, "-")) |     if (!strcmp(filename, "-")) | ||||||
| @@ -1893,7 +1940,15 @@ void opt_output_file(const char *filename) | |||||||
|     } else { |     } else { | ||||||
|         use_video = file_format->video_codec != CODEC_ID_NONE; |         use_video = file_format->video_codec != CODEC_ID_NONE; | ||||||
|         use_audio = file_format->audio_codec != CODEC_ID_NONE; |         use_audio = file_format->audio_codec != CODEC_ID_NONE; | ||||||
|          |  | ||||||
|  |         /* disable if no corresponding type found */ | ||||||
|  |         check_audio_video_inputs(&input_has_video, &input_has_audio); | ||||||
|  |         if (!input_has_video) | ||||||
|  |             use_video = 0; | ||||||
|  |         if (!input_has_audio) | ||||||
|  |             use_audio = 0; | ||||||
|  |  | ||||||
|  |         /* manual disable */ | ||||||
|         if (audio_disable) { |         if (audio_disable) { | ||||||
|             use_audio = 0; |             use_audio = 0; | ||||||
|         } |         } | ||||||
| @@ -1967,7 +2022,7 @@ void opt_output_file(const char *filename) | |||||||
|         oc->nb_streams = nb_streams; |         oc->nb_streams = nb_streams; | ||||||
|  |  | ||||||
|         if (!nb_streams) { |         if (!nb_streams) { | ||||||
|             fprintf(stderr, "No audio or video selected\n"); |             fprintf(stderr, "No audio or video streams available\n"); | ||||||
|             exit(1); |             exit(1); | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @@ -1987,6 +2042,13 @@ void opt_output_file(const char *filename) | |||||||
|     nb_output_files++; |     nb_output_files++; | ||||||
|  |  | ||||||
|     strcpy(oc->filename, filename); |     strcpy(oc->filename, filename); | ||||||
|  |  | ||||||
|  |     /* check filename in case of an image number is expected */ | ||||||
|  |     if (oc->format->flags & AVFMT_NEEDNUMBER) { | ||||||
|  |         if (filename_number_test(oc->filename) < 0) | ||||||
|  |             exit(1); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     if (!(oc->format->flags & AVFMT_NOFILE)) { |     if (!(oc->format->flags & AVFMT_NOFILE)) { | ||||||
|         /* test if it already exists to avoid loosing precious files */ |         /* test if it already exists to avoid loosing precious files */ | ||||||
|         if (!file_overwrite &&  |         if (!file_overwrite &&  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Fabrice Bellard
					Fabrice Bellard