[FFmpeg-devel] [PATCH] examples/avio_list_dir: add move and delete methods
Mariusz SzczepaĆczyk
mszczepanczyk at gmail.com
Sat Aug 15 02:01:20 CEST 2015
---
doc/examples/avio_list_dir.c | 92 ++++++++++++++++++++++++++++++++++++--------
1 file changed, 76 insertions(+), 16 deletions(-)
diff --git a/doc/examples/avio_list_dir.c b/doc/examples/avio_list_dir.c
index 4060ba6..50c435c 100644
--- a/doc/examples/avio_list_dir.c
+++ b/doc/examples/avio_list_dir.c
@@ -54,28 +54,13 @@ static const char *type_string(int type)
return "<UNKNOWN>";
}
-int main(int argc, char *argv[])
+static int list_op(const char *input_dir)
{
- 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();
- avformat_network_init();
-
if ((ret = avio_open_dir(&ctx, input_dir, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open directory: %s.\n", av_err2str(ret));
goto fail;
@@ -114,6 +99,81 @@ int main(int argc, char *argv[])
fail:
avio_close_dir(&ctx);
+ return ret;
+}
+
+static int del_op(const char *url)
+{
+ int ret = avpriv_io_delete(url);
+ if (ret < 0)
+ av_log(NULL, AV_LOG_ERROR, "Cannot delete '%s': %s.\n", url, av_err2str(ret));
+ return ret;
+}
+
+static int move_op(const char *src, const char *dst)
+{
+ int ret = avpriv_io_move(src, dst);
+ if (ret < 0)
+ av_log(NULL, AV_LOG_ERROR, "Cannot move '%s' into '%s': %s.\n", src, dst, av_err2str(ret));
+ return ret;
+}
+
+
+static void usage(const char *program_name)
+{
+ fprintf(stderr, "usage: %s OPERATION entry1 [entry2]\n"
+ "API example program to show how to manipulate resources "
+ "accessed through AVIOContext.\n"
+ "OPERATIONS:\n"
+ "list list content of the directory\n"
+ "move rename content in directory\n"
+ "del delete content in directory\n",
+ program_name);
+}
+
+int main(int argc, char *argv[])
+{
+ const char *op = NULL;
+ int ret;
+
+ av_log_set_level(AV_LOG_DEBUG);
+
+ if (argc < 2) {
+ usage(argv[0]);
+ return 1;
+ }
+
+ /* register codecs and formats and other lavf/lavc components*/
+ av_register_all();
+ avformat_network_init();
+
+ op = argv[1];
+ if (strcmp(op, "list") == 0) {
+ if (argc < 3) {
+ av_log(NULL, AV_LOG_INFO, "Missing argument for list operation.\n");
+ ret = AVERROR(EINVAL);
+ } else {
+ ret = list_op(argv[2]);
+ }
+ } else if (strcmp(op, "del") == 0) {
+ if (argc < 3) {
+ av_log(NULL, AV_LOG_INFO, "Missing argument for del operation.\n");
+ ret = AVERROR(EINVAL);
+ } else {
+ ret = del_op(argv[2]);
+ }
+ } else if (strcmp(op, "move") == 0) {
+ if (argc < 4) {
+ av_log(NULL, AV_LOG_INFO, "Missing argument for move operation.\n");
+ ret = AVERROR(EINVAL);
+ } else {
+ ret = move_op(argv[2], argv[3]);
+ }
+ } else {
+ av_log(NULL, AV_LOG_INFO, "Invalid operation %s\n", op);
+ ret = AVERROR(EINVAL);
+ }
+
avformat_network_deinit();
return ret < 0 ? 1 : 0;
--
2.4.6
More information about the ffmpeg-devel
mailing list