diff options
author | Andrey Utkin <andrey.krieger.utkin@gmail.com> | 2014-07-03 14:37:09 +0300 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-07-07 21:28:25 +0200 |
commit | 2229a6dfe66fd73126082bdf83c388ee4ea2c879 (patch) | |
tree | c68a6209896c1722b6c9ad33e5a3f33e0e95c124 | |
parent | fcd1f6bc9d5caec25d925c5c4aa44cef15c37897 (diff) | |
download | ffmpeg-streaming-2229a6dfe66fd73126082bdf83c388ee4ea2c879.zip ffmpeg-streaming-2229a6dfe66fd73126082bdf83c388ee4ea2c879.tar.gz |
avdevice/lavfi: allow non-mmappable files for graph_file
Use av_bprint_fd_contents() instead of av_file_map()
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavdevice/lavfi.c | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/libavdevice/lavfi.c b/libavdevice/lavfi.c index d1904dd..9be2d0e 100644 --- a/libavdevice/lavfi.c +++ b/libavdevice/lavfi.c @@ -26,6 +26,8 @@ /* #define DEBUG */ #include <float.h> /* DBL_MIN, DBL_MAX */ +#include <fcntl.h> /* O_RDONLY */ +#include <unistd.h> /* close() */ #include "libavutil/bprint.h" #include "libavutil/channel_layout.h" @@ -115,23 +117,22 @@ av_cold static int lavfi_read_header(AVFormatContext *avctx) } if (lavfi->graph_filename) { - uint8_t *file_buf, *graph_buf; - size_t file_bufsize; - ret = av_file_map(lavfi->graph_filename, - &file_buf, &file_bufsize, 0, avctx); - if (ret < 0) - goto end; - - /* create a 0-terminated string based on the read file */ - graph_buf = av_malloc(file_bufsize + 1); - if (!graph_buf) { - av_file_unmap(file_buf, file_bufsize); - FAIL(AVERROR(ENOMEM)); + AVBPrint graph_file_pb; + int fd = avpriv_open(lavfi->graph_filename, O_RDONLY); + if (fd == -1) + FAIL(AVERROR(EINVAL)); + av_bprint_init(&graph_file_pb, 0, AV_BPRINT_SIZE_UNLIMITED); + ret = av_bprint_fd_contents(&graph_file_pb, fd); + av_bprint_chars(&graph_file_pb, '\0', 1); + close(fd); + if (!ret && !av_bprint_is_complete(&graph_file_pb)) + ret = AVERROR(ENOMEM); + if (ret) { + av_bprint_finalize(&graph_file_pb, NULL); + FAIL(ret); } - memcpy(graph_buf, file_buf, file_bufsize); - graph_buf[file_bufsize] = 0; - av_file_unmap(file_buf, file_bufsize); - lavfi->graph_str = graph_buf; + if ((ret = av_bprint_finalize(&graph_file_pb, &lavfi->graph_str))) + FAIL(ret); } if (!lavfi->graph_str) |