dynamic keyframes, textbox rework, andrea ffmpeg.opts, perpetual chkpt undo, lv2...
[goodguy/history.git] / cinelerra-5.1 / cinelerra / filexml.h
index af45e3088bd8adde783af10b37ed613fae204d14..70950384a5bda391a42dc20f0ad1c25c64d3c4b3 100644 (file)
@@ -27,6 +27,7 @@
 #include <limits.h>
 
 #include "arraylist.h"
+#include "keyframe.inc"
 #include "filexml.inc"
 #include "sizes.h"
 
@@ -39,6 +40,7 @@ class XMLBuffer
        int destroy;
 
        int demand(long len);
+       friend class KeyFrame;
 public:
        XMLBuffer(long buf_size=0x1000, long max_size=LONG_MAX, int del=1);
        XMLBuffer(long buf_size, char *buf, int del=0); // writing
@@ -49,10 +51,11 @@ public:
        long itell() { return outp - bfr; }
        void oseek(long pos) { inp = bfr + pos; }
        void iseek(long pos) { outp = bfr + pos; }
-       unsigned char *pos(long ofs=0) { return bfr+ofs; }
-       unsigned char *str() { if( inp < lmt ) *inp = 0; return bfr; }
+       unsigned char *pos(long ofs=0) { return bfr+ofs; }
+       char *cstr() { if( demand(otell()+1) ) *inp = 0; return (char*)bfr; }
        int read(char *bp, int n);
        int write(const char *bp, int n);
+       void copy_from(XMLBuffer *xbfr);
 
        int cur()  { return outp>=inp ? -1 : *outp; }
        int next() { return outp>=inp ? -1 : *outp++; }
@@ -129,9 +132,9 @@ public:
        int append_data(const char *text);
        int append_data(const char *text, long len);
 
-       charread_text();
-       int read_data_until(const char *tag_end, char *out, int len, int skip=0);
-       int read_text_until(const char *tag_end, char *out, int len, int skip=0);
+       char *read_text();
+       int read_data_until(const char *tag_end, XMLBuffer *xbfr, int skip=0);
+       int read_text_until(const char *tag_end, XMLBuffer *xbfr, int skip=0);
        int read_tag();
        int skip_tag();
        int write_to_file(const char *filename);
@@ -142,17 +145,18 @@ public:
        char *(*encode)(char *bp, const char *sp, int n);
        long (*coded_length)(const char *sp, int n);
 
-       int set_shared_input(char *shared_string, long avail, int coded=1);
-       int set_shared_output(char *shared_string, long avail, int coded=1);
        void set_coding(int coding);
        int get_coding();
+       int set_shared_input(XMLBuffer *xbfr);
+       int set_shared_output(XMLBuffer *xbfr);
+
        int rewind();
        char *get_data();
        char *string();
        long length();
 
        XMLBuffer *buffer;
-       int coded;
+       int coded, shared;
 
        XMLTag tag;
        long output_length;