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
