[FFmpeg-cvslog] lavd/lavfi: work with non-mappable files for graph_file option

Andrey Utkin git at videolan.org
Wed Jul 23 18:56:57 CEST 2014


ffmpeg | branch: master | Andrey Utkin <andrey.krieger.utkin at gmail.com> | Wed Jul 23 16:12:39 2014 +0300| [b6a6459a24c6279502abeae064c28c1187fd0b0f] | committer: Michael Niedermayer

lavd/lavfi: work with non-mappable files for graph_file option

Example of non-mappable file is /dev/stdin. Previously passing it as
graph_file value returned error.

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b6a6459a24c6279502abeae064c28c1187fd0b0f
---

 libavdevice/lavfi.c |   30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/libavdevice/lavfi.c b/libavdevice/lavfi.c
index d1904dd..f1c88ac 100644
--- a/libavdevice/lavfi.c
+++ b/libavdevice/lavfi.c
@@ -115,23 +115,23 @@ 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);
+        AVBPrint graph_file_pb;
+        AVIOContext *avio = NULL;
+        ret = avio_open(&avio, lavfi->graph_filename, AVIO_FLAG_READ);
         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));
+            FAIL(ret);
+        av_bprint_init(&graph_file_pb, 0, AV_BPRINT_SIZE_UNLIMITED);
+        ret = avio_read_to_bprint(avio, &graph_file_pb, INT_MAX);
+        avio_close(avio);
+        av_bprint_chars(&graph_file_pb, '\0', 1);
+        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)



More information about the ffmpeg-cvslog mailing list