You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	ffprobe: add -show_pixel_formats option
Adds option -show_pixel_formats to ffprobe which lists all available pixel formats with some details. Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
		
				
					committed by
					
						 Michael Niedermayer
						Michael Niedermayer
					
				
			
			
				
	
			
			
			
						parent
						
							abaf4245a1
						
					
				
				
					commit
					143a8a44f4
				
			| @@ -321,6 +321,12 @@ Show information related to program and library versions. This is the | ||||
| equivalent of setting both @option{-show_program_version} and | ||||
| @option{-show_library_versions} options. | ||||
|  | ||||
| @item -show_pixel_formats | ||||
| Show information about all pixel formats supported by FFmpeg. | ||||
|  | ||||
| Pixel format information for each format is printed within a section | ||||
| with name "PIXEL_FORMAT". | ||||
|  | ||||
| @item -bitexact | ||||
| Force bitexact output, useful to produce output which is not dependent | ||||
| on the specific build. | ||||
|   | ||||
| @@ -10,6 +10,7 @@ | ||||
|         <xsd:sequence> | ||||
|             <xsd:element name="program_version"  type="ffprobe:programVersionType"  minOccurs="0" maxOccurs="1" /> | ||||
|             <xsd:element name="library_versions" type="ffprobe:libraryVersionsType" minOccurs="0" maxOccurs="1" /> | ||||
|             <xsd:element name="pixel_formats"    type="ffprobe:pixelFormatsType"    minOccurs="0" maxOccurs="1" /> | ||||
|             <xsd:element name="packets"  type="ffprobe:packetsType" minOccurs="0" maxOccurs="1" /> | ||||
|             <xsd:element name="frames"   type="ffprobe:framesType"  minOccurs="0" maxOccurs="1" /> | ||||
|             <xsd:element name="programs" type="ffprobe:programsType" minOccurs="0" maxOccurs="1" /> | ||||
| @@ -277,4 +278,16 @@ | ||||
|           <xsd:element name="library_version" type="ffprobe:libraryVersionType" minOccurs="0" maxOccurs="unbounded"/> | ||||
|         </xsd:sequence> | ||||
|     </xsd:complexType> | ||||
|  | ||||
|     <xsd:complexType name="pixelFormatType"> | ||||
|       <xsd:attribute name="name"                type="xsd:string" use="required"/> | ||||
|       <xsd:attribute name="nb_components"       type="xsd:int"    use="required"/> | ||||
|       <xsd:attribute name="bits_per_pixel"      type="xsd:int"/> | ||||
|     </xsd:complexType> | ||||
|  | ||||
|     <xsd:complexType name="pixelFormatsType"> | ||||
|       <xsd:sequence> | ||||
|         <xsd:element name="pixel_format" type="ffprobe:pixelFormatType" minOccurs="0" maxOccurs="unbounded"/> | ||||
|       </xsd:sequence> | ||||
|     </xsd:complexType> | ||||
| </xsd:schema> | ||||
|   | ||||
							
								
								
									
										33
									
								
								ffprobe.c
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								ffprobe.c
									
									
									
									
									
								
							| @@ -66,6 +66,7 @@ static int do_show_stream_disposition = 0; | ||||
| static int do_show_data    = 0; | ||||
| static int do_show_program_version  = 0; | ||||
| static int do_show_library_versions = 0; | ||||
| static int do_show_pixel_formats = 0; | ||||
|  | ||||
| static int do_show_chapter_tags = 0; | ||||
| static int do_show_format_tags = 0; | ||||
| @@ -132,6 +133,8 @@ typedef enum { | ||||
|     SECTION_ID_PACKET, | ||||
|     SECTION_ID_PACKETS, | ||||
|     SECTION_ID_PACKETS_AND_FRAMES, | ||||
|     SECTION_ID_PIXEL_FORMAT, | ||||
|     SECTION_ID_PIXEL_FORMATS, | ||||
|     SECTION_ID_PROGRAM_STREAM_DISPOSITION, | ||||
|     SECTION_ID_PROGRAM_STREAM_TAGS, | ||||
|     SECTION_ID_PROGRAM, | ||||
| @@ -165,6 +168,8 @@ static struct section sections[] = { | ||||
|     [SECTION_ID_PACKETS] =            { SECTION_ID_PACKETS, "packets", SECTION_FLAG_IS_ARRAY, { SECTION_ID_PACKET, -1} }, | ||||
|     [SECTION_ID_PACKETS_AND_FRAMES] = { SECTION_ID_PACKETS_AND_FRAMES, "packets_and_frames", SECTION_FLAG_IS_ARRAY, { SECTION_ID_PACKET, -1} }, | ||||
|     [SECTION_ID_PACKET] =             { SECTION_ID_PACKET, "packet", 0, { -1 } }, | ||||
|     [SECTION_ID_PIXEL_FORMATS] =      { SECTION_ID_PIXEL_FORMATS, "pixel_formats", SECTION_FLAG_IS_ARRAY, { SECTION_ID_PIXEL_FORMAT, -1 } }, | ||||
|     [SECTION_ID_PIXEL_FORMAT] =       { SECTION_ID_PIXEL_FORMAT, "pixel_format", 0, { -1 } }, | ||||
|     [SECTION_ID_PROGRAM_STREAM_DISPOSITION] = { SECTION_ID_PROGRAM_STREAM_DISPOSITION, "disposition", 0, { -1 }, .unique_name = "program_stream_disposition" }, | ||||
|     [SECTION_ID_PROGRAM_STREAM_TAGS] =        { SECTION_ID_PROGRAM_STREAM_TAGS, "tags", SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = "program_stream_tags" }, | ||||
|     [SECTION_ID_PROGRAM] =                    { SECTION_ID_PROGRAM, "program", 0, { SECTION_ID_PROGRAM_TAGS, SECTION_ID_PROGRAM_STREAMS, -1 } }, | ||||
| @@ -175,7 +180,8 @@ static struct section sections[] = { | ||||
|     [SECTION_ID_PROGRAMS] =                   { SECTION_ID_PROGRAMS, "programs", SECTION_FLAG_IS_ARRAY, { SECTION_ID_PROGRAM, -1 } }, | ||||
|     [SECTION_ID_ROOT] =               { SECTION_ID_ROOT, "root", SECTION_FLAG_IS_WRAPPER, | ||||
|                                         { SECTION_ID_CHAPTERS, SECTION_ID_FORMAT, SECTION_ID_FRAMES, SECTION_ID_PROGRAMS, SECTION_ID_STREAMS, | ||||
|                                           SECTION_ID_PACKETS, SECTION_ID_ERROR, SECTION_ID_PROGRAM_VERSION, SECTION_ID_LIBRARY_VERSIONS, -1} }, | ||||
|                                           SECTION_ID_PACKETS, SECTION_ID_ERROR, SECTION_ID_PROGRAM_VERSION, SECTION_ID_LIBRARY_VERSIONS, | ||||
|                                           SECTION_ID_PIXEL_FORMATS, -1} }, | ||||
|     [SECTION_ID_STREAMS] =            { SECTION_ID_STREAMS, "streams", SECTION_FLAG_IS_ARRAY, { SECTION_ID_STREAM, -1 } }, | ||||
|     [SECTION_ID_STREAM] =             { SECTION_ID_STREAM, "stream", 0, { SECTION_ID_STREAM_DISPOSITION, SECTION_ID_STREAM_TAGS, -1 } }, | ||||
|     [SECTION_ID_STREAM_DISPOSITION] = { SECTION_ID_STREAM_DISPOSITION, "disposition", 0, { -1 }, .unique_name = "stream_disposition" }, | ||||
| @@ -2557,6 +2563,24 @@ static void ffprobe_show_library_versions(WriterContext *w) | ||||
|     writer_print_section_footer(w); | ||||
| } | ||||
|  | ||||
| static void ffprobe_show_pixel_formats(WriterContext *w) | ||||
| { | ||||
|     const AVPixFmtDescriptor *pixdesc = NULL; | ||||
|     int n; | ||||
|  | ||||
|     writer_print_section_header(w, SECTION_ID_PIXEL_FORMATS); | ||||
|     while (pixdesc = av_pix_fmt_desc_next(pixdesc)) { | ||||
|         writer_print_section_header(w, SECTION_ID_PIXEL_FORMAT); | ||||
|         print_str("name", pixdesc->name); | ||||
|         print_int("nb_components", pixdesc->nb_components); | ||||
|         n = av_get_bits_per_pixel(pixdesc); | ||||
|         if (n) print_int    ("bits_per_pixel", n); | ||||
|         else   print_str_opt("bits_per_pixel", "N/A"); | ||||
|         writer_print_section_footer(w); | ||||
|     } | ||||
|     writer_print_section_footer(w); | ||||
| } | ||||
|  | ||||
| static int opt_format(void *optctx, const char *opt, const char *arg) | ||||
| { | ||||
|     iformat = av_find_input_format(arg); | ||||
| @@ -2890,6 +2914,7 @@ DEFINE_OPT_SHOW_SECTION(format,           FORMAT); | ||||
| DEFINE_OPT_SHOW_SECTION(frames,           FRAMES); | ||||
| DEFINE_OPT_SHOW_SECTION(library_versions, LIBRARY_VERSIONS); | ||||
| DEFINE_OPT_SHOW_SECTION(packets,          PACKETS); | ||||
| DEFINE_OPT_SHOW_SECTION(pixel_formats,    PIXEL_FORMATS); | ||||
| DEFINE_OPT_SHOW_SECTION(program_version,  PROGRAM_VERSION); | ||||
| DEFINE_OPT_SHOW_SECTION(streams,          STREAMS); | ||||
| DEFINE_OPT_SHOW_SECTION(programs,         PROGRAMS); | ||||
| @@ -2928,6 +2953,7 @@ static const OptionDef real_options[] = { | ||||
|     { "show_program_version",  0, {(void*)&opt_show_program_version},  "show ffprobe version" }, | ||||
|     { "show_library_versions", 0, {(void*)&opt_show_library_versions}, "show library versions" }, | ||||
|     { "show_versions",         0, {(void*)&opt_show_versions}, "show program and library versions" }, | ||||
|     { "show_pixel_formats", 0, {(void*)&opt_show_pixel_formats}, "show pixel format descriptions" }, | ||||
|     { "show_private_data", OPT_BOOL, {(void*)&show_private_data}, "show private data" }, | ||||
|     { "private",           OPT_BOOL, {(void*)&show_private_data}, "same as show_private_data" }, | ||||
|     { "bitexact", OPT_BOOL, {&do_bitexact}, "force bitexact output" }, | ||||
| @@ -2984,6 +3010,7 @@ int main(int argc, char **argv) | ||||
|     SET_DO_SHOW(FRAMES, frames); | ||||
|     SET_DO_SHOW(LIBRARY_VERSIONS, library_versions); | ||||
|     SET_DO_SHOW(PACKETS, packets); | ||||
|     SET_DO_SHOW(PIXEL_FORMATS, pixel_formats); | ||||
|     SET_DO_SHOW(PROGRAM_VERSION, program_version); | ||||
|     SET_DO_SHOW(PROGRAMS, programs); | ||||
|     SET_DO_SHOW(STREAMS, streams); | ||||
| @@ -3048,10 +3075,12 @@ int main(int argc, char **argv) | ||||
|             ffprobe_show_program_version(wctx); | ||||
|         if (do_show_library_versions) | ||||
|             ffprobe_show_library_versions(wctx); | ||||
|         if (do_show_pixel_formats) | ||||
|             ffprobe_show_pixel_formats(wctx); | ||||
|  | ||||
|         if (!input_filename && | ||||
|             ((do_show_format || do_show_programs || do_show_streams || do_show_chapters || do_show_packets || do_show_error) || | ||||
|              (!do_show_program_version && !do_show_library_versions))) { | ||||
|              (!do_show_program_version && !do_show_library_versions && !do_show_pixel_formats))) { | ||||
|             show_usage(); | ||||
|             av_log(NULL, AV_LOG_ERROR, "You have to specify one input file.\n"); | ||||
|             av_log(NULL, AV_LOG_ERROR, "Use -h to get full help or, even better, run 'man %s'.\n", program_name); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user