libaacs | branch: master | npzacs <[email protected]> | Wed May  2 15:27:15 2012 
+0300| [d5b18dc7cacb77f28b42e3e0b77e9271f7b8f8ad] | committer: npzacs

mkb: added initialization from memory and access to raw data

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

 src/libaacs/mkb.c |   36 ++++++++++++++++++++++++++++++++++--
 src/libaacs/mkb.h |    4 ++++
 2 files changed, 38 insertions(+), 2 deletions(-)

diff --git a/src/libaacs/mkb.c b/src/libaacs/mkb.c
index 63bd864..2bb7957 100644
--- a/src/libaacs/mkb.c
+++ b/src/libaacs/mkb.c
@@ -88,12 +88,44 @@ MKB *mkb_open(const char *path)
     return NULL;
 }
 
+MKB *mkb_init(uint8_t *data, int len)
+{
+    MKB *mkb = malloc(sizeof(MKB));
+
+    mkb->size = len;
+    mkb->buf  = data;
+
+    return mkb;
+}
+
 void mkb_close(MKB *mkb)
 {
-    X_FREE(mkb->buf);
-    X_FREE(mkb);
+    if (mkb) {
+        X_FREE(mkb->buf);
+        X_FREE(mkb);
+    }
+}
+
+const uint8_t *mkb_data(MKB *mkb)
+{
+    return mkb->buf;
 }
 
+size_t mkb_data_size(MKB *mkb)
+{
+    size_t pos = 0;
+
+    while (pos + 4 <= mkb->size) {
+        if (!mkb->buf[pos]) {
+            break;
+        }
+        pos += MKINT_BE24(mkb->buf + pos + 1);
+    }
+
+    return pos;
+}
+
+
 uint8_t mkb_type(MKB *mkb)
 {
     const uint8_t *rec = _record(mkb, 0x10, NULL);
diff --git a/src/libaacs/mkb.h b/src/libaacs/mkb.h
index 4e3f627..4b2e08f 100644
--- a/src/libaacs/mkb.h
+++ b/src/libaacs/mkb.h
@@ -28,8 +28,12 @@
 typedef struct mkb MKB;
 
 AACS_PRIVATE MKB *mkb_open(const char *path);    // init MKB
+AACS_PRIVATE MKB *mkb_init(uint8_t *data, int len); // init MKB from data
 AACS_PRIVATE void mkb_close(MKB *mkb);           // free MKB
 
+AACS_PRIVATE const uint8_t *mkb_data(MKB *mkb);
+AACS_PRIVATE size_t mkb_data_size(MKB *mkb);
+
 // returns type
 AACS_PRIVATE uint8_t mkb_type(MKB *mkb);
 // returns version

_______________________________________________
libaacs-devel mailing list
[email protected]
http://mailman.videolan.org/listinfo/libaacs-devel

Reply via email to