libbluray | branch: master | hpi1 <[email protected]> | Tue Dec 2 13:30:45 2014 +0200| [97620e4ee804f793e40e027cb9558f9e48a088b2] | committer: hpi1
mobj_dump: use public API > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=97620e4ee804f793e40e027cb9558f9e48a088b2 --- src/Makefile.am | 18 +++--------------- src/examples/mobj_dump.c | 9 +++++---- src/libbluray/bluray.c | 11 +++++++++++ src/libbluray/bluray.h | 3 +++ src/libbluray/hdmv/hdmv_vm.c | 2 +- src/libbluray/hdmv/mobj_parse.c | 8 ++++---- src/libbluray/hdmv/mobj_parse.h | 3 ++- src/libbluray/hdmv/mobj_print.c | 14 +++++++++++--- 8 files changed, 40 insertions(+), 28 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index bbdfd72..3085b96 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -240,21 +240,9 @@ index_dump_SOURCES = examples/index_dump.c index_dump_LDADD = libbluray.la mobj_dump_CFLAGS = $(AM_CFLAGS) -mobj_dump_SOURCES = \ - examples/mobj_dump.c \ - file/file.c \ - libbluray/hdmv/mobj_parse.c \ - libbluray/hdmv/mobj_print.c \ - util/bits.c \ - util/logging.c \ - util/strutl.c -if HAVE_WIN32 -mobj_dump_SOURCES += \ - file/file_win32.c -else -mobj_dump_SOURCES += \ - file/file_posix.c -endif +mobj_dump_SOURCES = examples/mobj_dump.c \ + libbluray/hdmv/mobj_print.c +mobj_dump_LDADD = libbluray.la bdjo_dump_CFLAGS = $(AM_CFLAGS) bdjo_dump_SOURCES = \ diff --git a/src/examples/mobj_dump.c b/src/examples/mobj_dump.c index 613b261..3eaf9f4 100644 --- a/src/examples/mobj_dump.c +++ b/src/examples/mobj_dump.c @@ -17,8 +17,9 @@ * <http://www.gnu.org/licenses/>. */ +#include "libbluray/bluray.h" + #include "libbluray/hdmv/mobj_data.h" -#include "libbluray/hdmv/mobj_parse.h" #include "libbluray/hdmv/mobj_print.h" #include <stdio.h> @@ -60,7 +61,7 @@ int main(int argc, const char *argv[]) if (argc < 2) { fprintf(stderr, - "usage: %s [-d] <disc_root>\n" + "usage: %s [-d] <file>\n" "Options:\n" " d disassemble object code\n", argv[0]); @@ -70,12 +71,12 @@ int main(int argc, const char *argv[]) disasm = !strcmp(argv[1], "-d"); } - mobj = mobj_parse(argv[argc-1]); + mobj = bd_read_mobj(argv[argc-1]); if (mobj) { _mobj_print(mobj, disasm); - mobj_free(&mobj); + bd_free_mobj(mobj); } return 0; diff --git a/src/libbluray/bluray.c b/src/libbluray/bluray.c index 2b23781..6afbe00 100644 --- a/src/libbluray/bluray.c +++ b/src/libbluray/bluray.c @@ -39,6 +39,7 @@ #include "bdnav/clpi_parse.h" #include "bdnav/sound_parse.h" #include "hdmv/hdmv_vm.h" +#include "hdmv/mobj_parse.h" #include "decoders/graphics_controller.h" #include "decoders/m2ts_filter.h" #include "decoders/overlay.h" @@ -3511,3 +3512,13 @@ void bd_free_mpls(struct mpls_pl *pl) { mpls_free(pl); } + +struct mobj_objects *bd_read_mobj(const char *mobj_file) +{ + return mobj_parse(mobj_file); +} + +void bd_free_mobj(struct mobj_objects *obj) +{ + mobj_free(&obj); +} diff --git a/src/libbluray/bluray.h b/src/libbluray/bluray.h index a546531..4e28175 100644 --- a/src/libbluray/bluray.h +++ b/src/libbluray/bluray.h @@ -887,6 +887,9 @@ struct mpls_pl; struct mpls_pl *bd_read_mpls(const char *mpls_file); void bd_free_mpls(struct mpls_pl *); +struct mobj_objects; +struct mobj_objects *bd_read_mobj(const char *mobj_file); +void bd_free_mobj(struct mobj_objects *); /* BD-J testing */ diff --git a/src/libbluray/hdmv/hdmv_vm.c b/src/libbluray/hdmv/hdmv_vm.c index 020799f..ec5fa2e 100644 --- a/src/libbluray/hdmv/hdmv_vm.c +++ b/src/libbluray/hdmv/hdmv_vm.c @@ -253,7 +253,7 @@ HDMV_VM *hdmv_vm_init(const char *disc_root, BD_REGISTERS *regs, } /* read movie objects */ - p->movie_objects = mobj_parse(disc_root); + p->movie_objects = mobj_get(disc_root); if (!p->movie_objects) { X_FREE(p); return NULL; diff --git a/src/libbluray/hdmv/mobj_parse.c b/src/libbluray/hdmv/mobj_parse.c index 01b8b46..c88f557 100644 --- a/src/libbluray/hdmv/mobj_parse.c +++ b/src/libbluray/hdmv/mobj_parse.c @@ -122,7 +122,7 @@ void mobj_free(MOBJ_OBJECTS **p) } } -static MOBJ_OBJECTS *_mobj_parse(const char *file_name) +MOBJ_OBJECTS *mobj_parse(const char *file_name) { BITSTREAM bs; BD_FILE_H *fp; @@ -190,13 +190,13 @@ static MOBJ_OBJECTS *_mobj_parse(const char *file_name) return NULL; } -MOBJ_OBJECTS *mobj_parse(const char *disc_root) +MOBJ_OBJECTS *mobj_get(const char *disc_root) { MOBJ_OBJECTS *objects; char *file; file = str_printf("%s"DIR_SEP "BDMV" DIR_SEP "MovieObject.bdmv", disc_root); - objects = _mobj_parse(file); + objects = mobj_parse(file); X_FREE(file); if (objects) { return objects; @@ -204,7 +204,7 @@ MOBJ_OBJECTS *mobj_parse(const char *disc_root) /* if failed, try backup file */ file = str_printf("%s" DIR_SEP "BDMV" DIR_SEP "BACKUP" DIR_SEP "MovieObject.bdmv", disc_root); - objects = _mobj_parse(file); + objects = mobj_parse(file); X_FREE(file); return objects; } diff --git a/src/libbluray/hdmv/mobj_parse.h b/src/libbluray/hdmv/mobj_parse.h index 43749d8..b938748 100644 --- a/src/libbluray/hdmv/mobj_parse.h +++ b/src/libbluray/hdmv/mobj_parse.h @@ -27,7 +27,8 @@ struct mobj_objects; struct mobj_cmd; -BD_PRIVATE struct mobj_objects* mobj_parse(const char *disc_root) BD_ATTR_MALLOC; /* parse MovieObject.bdmv */ +BD_PRIVATE struct mobj_objects* mobj_parse(const char *file) BD_ATTR_MALLOC; /* parse MovieObject.bdmv */ +BD_PRIVATE struct mobj_objects* mobj_get(const char *disc_root); /* parse MovieObject.bdmv */ BD_PRIVATE void mobj_parse_cmd(uint8_t *buf, struct mobj_cmd *cmd); BD_PRIVATE void mobj_free(struct mobj_objects **index); diff --git a/src/libbluray/hdmv/mobj_print.c b/src/libbluray/hdmv/mobj_print.c index f6822ba..4ff6bba 100644 --- a/src/libbluray/hdmv/mobj_print.c +++ b/src/libbluray/hdmv/mobj_print.c @@ -22,8 +22,6 @@ #include "mobj_data.h" #include "hdmv_insn.h" -#include "util/macro.h" - #include <stdio.h> static const char * const psr_info[128] = { @@ -310,12 +308,22 @@ static int _sprint_operands_hex(char *buf, MOBJ_CMD *cmd) return buf - start; } +static uint32_t _cmd_to_u32(HDMV_INSN *insn) +{ + union { + HDMV_INSN insn; + uint8_t u8[4]; + } tmp; + tmp.insn = *insn; + return (tmp.u8[0] << 24) | (tmp.u8[1] << 16) | (tmp.u8[2] << 8) | tmp.u8[3]; +} + int mobj_sprint_cmd(char *buf, MOBJ_CMD *cmd) { char *start = buf; HDMV_INSN *insn = &cmd->insn; - buf += sprintf(buf, "%08x %08x,%08x ", MKINT_BE32((uint8_t*)&cmd->insn), cmd->dst, cmd->src); + buf += sprintf(buf, "%08x %08x,%08x ", _cmd_to_u32(&cmd->insn), cmd->dst, cmd->src); switch(insn->grp) { case INSN_GROUP_BRANCH: _______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel
