Browse code

flvenc: Check whether seeking back to the header succeeded

The FLV muxer tries to update the header in write_trailer, which is
impossible if writing to a pipe or network stream. Don't write header
data if seeking to the header fails.

Signed-off-by: Martin Storsjö <martin@martin.st>

Björn Axelsson authored on 2012/12/13 22:48:25
Showing 1 changed files
... ...
@@ -403,10 +403,14 @@ static int flv_write_trailer(AVFormatContext *s)
403 403
     file_size = avio_tell(pb);
404 404
 
405 405
     /* update information */
406
-    avio_seek(pb, flv->duration_offset, SEEK_SET);
407
-    put_amf_double(pb, flv->duration / (double)1000);
408
-    avio_seek(pb, flv->filesize_offset, SEEK_SET);
409
-    put_amf_double(pb, file_size);
406
+    if (avio_seek(pb, flv->duration_offset, SEEK_SET) < 0)
407
+        av_log(s, AV_LOG_WARNING, "Failed to update header with correct duration.\n");
408
+    else
409
+        put_amf_double(pb, flv->duration / (double)1000);
410
+    if (avio_seek(pb, flv->filesize_offset, SEEK_SET) < 0)
411
+        av_log(s, AV_LOG_WARNING, "Failed to update header with correct filesize.\n");
412
+    else
413
+        put_amf_double(pb, file_size);
410 414
 
411 415
     avio_seek(pb, file_size, SEEK_SET);
412 416
     return 0;