You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	doc/examples: add directory listing example
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
		
				
					committed by
					
						 Michael Niedermayer
						Michael Niedermayer
					
				
			
			
				
	
			
			
			
						parent
						
							303c3dada2
						
					
				
				
					commit
					56b7aa2138
				
			
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -36,6 +36,7 @@ | ||||
| /doc/avoptions_codec.texi | ||||
| /doc/avoptions_format.texi | ||||
| /doc/doxy/html/ | ||||
| /doc/examples/avio_list_dir | ||||
| /doc/examples/avio_reading | ||||
| /doc/examples/decoding_encoding | ||||
| /doc/examples/demuxing_decoding | ||||
|   | ||||
							
								
								
									
										2
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								configure
									
									
									
									
										vendored
									
									
								
							| @@ -1321,6 +1321,7 @@ COMPONENT_LIST=" | ||||
|  | ||||
| EXAMPLE_LIST=" | ||||
|     avio_reading_example | ||||
|     avio_list_dir_example | ||||
|     decoding_encoding_example | ||||
|     demuxing_decoding_example | ||||
|     extract_mvs_example | ||||
| @@ -2659,6 +2660,7 @@ zoompan_filter_deps="swscale" | ||||
|  | ||||
| # examples | ||||
| avio_reading="avformat avcodec avutil" | ||||
| avio_list_dir="avformat avutil" | ||||
| avcodec_example_deps="avcodec avutil" | ||||
| decoding_encoding_example_deps="avcodec avformat avutil" | ||||
| demuxing_decoding_example_deps="avcodec avformat avutil" | ||||
|   | ||||
| @@ -36,6 +36,7 @@ DOCS-$(CONFIG_MANPAGES)  += $(MANPAGES) | ||||
| DOCS-$(CONFIG_TXTPAGES)  += $(TXTPAGES) | ||||
| DOCS = $(DOCS-yes) | ||||
|  | ||||
| DOC_EXAMPLES-$(CONFIG_AVIO_LIST_DIR_EXAMPLE)     += avio_list_dir | ||||
| DOC_EXAMPLES-$(CONFIG_AVIO_READING_EXAMPLE)      += avio_reading | ||||
| DOC_EXAMPLES-$(CONFIG_AVCODEC_EXAMPLE)           += avcodec | ||||
| DOC_EXAMPLES-$(CONFIG_DECODING_ENCODING_EXAMPLE) += decoding_encoding | ||||
|   | ||||
| @@ -11,7 +11,8 @@ CFLAGS += -Wall -g | ||||
| CFLAGS := $(shell pkg-config --cflags $(FFMPEG_LIBS)) $(CFLAGS) | ||||
| LDLIBS := $(shell pkg-config --libs $(FFMPEG_LIBS)) $(LDLIBS) | ||||
|  | ||||
| EXAMPLES=       avio_reading                       \ | ||||
| EXAMPLES=       avio_list_dir                      \ | ||||
|                 avio_reading                       \ | ||||
|                 decoding_encoding                  \ | ||||
|                 demuxing_decoding                  \ | ||||
|                 extract_mvs                        \ | ||||
|   | ||||
							
								
								
									
										111
									
								
								doc/examples/avio_list_dir.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								doc/examples/avio_list_dir.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,111 @@ | ||||
| /* | ||||
|  * Copyright (c) 2014 Lukasz Marek | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
|  * of this software and associated documentation files (the "Software"), to deal | ||||
|  * in the Software without restriction, including without limitation the rights | ||||
|  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
|  * copies of the Software, and to permit persons to whom the Software is | ||||
|  * furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included in | ||||
|  * all copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||||
|  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
|  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||
|  * THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <libavcodec/avcodec.h> | ||||
| #include <libavformat/avformat.h> | ||||
| #include <libavformat/avio.h> | ||||
|  | ||||
| static const char *type_string(int type) | ||||
| { | ||||
|     switch (type) { | ||||
|     case AVIO_ENTRY_DIRECTORY: | ||||
|         return "<DIR>"; | ||||
|     case AVIO_ENTRY_FILE: | ||||
|         return "<FILE>"; | ||||
|     case AVIO_ENTRY_BLOCK_DEVICE: | ||||
|         return "<BLOCK DEVICE>"; | ||||
|     case AVIO_ENTRY_CHARACTER_DEVICE: | ||||
|         return "<CHARACTER DEVICE>"; | ||||
|     case AVIO_ENTRY_NAMED_PIPE: | ||||
|         return "<PIPE>"; | ||||
|     case AVIO_ENTRY_SYMBOLIC_LINK: | ||||
|         return "<LINK>"; | ||||
|     case AVIO_ENTRY_SOCKET: | ||||
|         return "<SOCKET>"; | ||||
|     case AVIO_ENTRY_UNKNOWN: | ||||
|     default: | ||||
|         break; | ||||
|     } | ||||
|     return "<UNKNOWN>"; | ||||
| } | ||||
|  | ||||
| int main(int argc, char *argv[]) | ||||
| { | ||||
|     const char *input_dir = NULL; | ||||
|     AVIODirEntry *entry = NULL; | ||||
|     AVIODirContext *ctx = NULL; | ||||
|     int cnt, ret; | ||||
|     char filemode[4], uid_and_gid[20]; | ||||
|  | ||||
|     av_log_set_level(AV_LOG_DEBUG); | ||||
|  | ||||
|     if (argc != 2) { | ||||
|         fprintf(stderr, "usage: %s input_dir\n" | ||||
|                 "API example program to show how to list files in directory " | ||||
|                 "accessed through AVIOContext.\n", argv[0]); | ||||
|         return 1; | ||||
|     } | ||||
|     input_dir = argv[1]; | ||||
|  | ||||
|     /* register codecs and formats and other lavf/lavc components*/ | ||||
|     av_register_all(); | ||||
|  | ||||
|     if ((ret = avio_open_dir(&ctx, input_dir, NULL)) < 0) { | ||||
|         av_log(NULL, AV_LOG_ERROR, "Cannot open directory: %s.\n", av_err2str(ret)); | ||||
|         return 1; | ||||
|     } | ||||
|  | ||||
|     cnt = 0; | ||||
|     for (;;) { | ||||
|         if ((ret = avio_read_dir(ctx, &entry)) < 0) { | ||||
|             av_log(NULL, AV_LOG_ERROR, "Cannot list directory: %s.\n", av_err2str(ret)); | ||||
|             return 1; | ||||
|         } | ||||
|         if (!entry) | ||||
|             break; | ||||
|         if (entry->filemode == -1) { | ||||
|             snprintf(filemode, 4, "???"); | ||||
|         } else { | ||||
|             snprintf(filemode, 4, "%3"PRIo64, entry->filemode); | ||||
|         } | ||||
|         snprintf(uid_and_gid, 20, "%"PRId64"(%"PRId64")", entry->user_id, entry->group_id); | ||||
|         if (cnt == 0) | ||||
|             av_log(NULL, AV_LOG_INFO, "%-9s %12s %30s %10s %s %16s %16s %16s\n", | ||||
|                    "TYPE", "SIZE", "NAME", "UID(GID)", "UGO", "MODIFIED", | ||||
|                    "ACCESSED", "STATUS_CHANGED"); | ||||
|         av_log(NULL, AV_LOG_INFO, "%-9s %12"PRId64" %30s %10s %s %16"PRId64" %16"PRId64" %16"PRId64"\n", | ||||
|                type_string(entry->type), | ||||
|                entry->size, | ||||
|                entry->name, | ||||
|                uid_and_gid, | ||||
|                filemode, | ||||
|                entry->modification_timestamp, | ||||
|                entry->access_timestamp, | ||||
|                entry->status_change_timestamp); | ||||
|         avio_free_directory_entry(&entry); | ||||
|         cnt++; | ||||
|     }; | ||||
|  | ||||
|     avio_close_dir(&ctx); | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
		Reference in New Issue
	
	Block a user