libbluray | branch: master | hpi1 <[email protected]> | Fri Jun 10 12:01:49 2011 +0300| [a2254288ac14deefafdc8e28ff496ae5b4de2bf5] | committer: hpi1
Added decoding of Window Definition Segment (WDS) > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=a2254288ac14deefafdc8e28ff496ae5b4de2bf5 --- src/libbluray/decoders/pg.h | 7 +++++++ src/libbluray/decoders/pg_decode.c | 28 +++++++++++++++++++++++++--- src/libbluray/decoders/pg_decode.h | 4 +++- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/libbluray/decoders/pg.h b/src/libbluray/decoders/pg.h index 1567a17..cbc9b99 100644 --- a/src/libbluray/decoders/pg.h +++ b/src/libbluray/decoders/pg.h @@ -99,4 +99,11 @@ typedef struct { } BD_PG_COMPOSITION; +typedef struct { + int64_t pts; + + unsigned num_windows; + BD_PG_WINDOW *window; +} BD_PG_WINDOWS; + #endif // _BD_PG_H_ diff --git a/src/libbluray/decoders/pg_decode.c b/src/libbluray/decoders/pg_decode.c index 6708bac..2cafa16 100644 --- a/src/libbluray/decoders/pg_decode.c +++ b/src/libbluray/decoders/pg_decode.c @@ -218,6 +218,20 @@ int pg_decode_composition(BITBUFFER *bb, BD_PG_COMPOSITION *p) return 1; } +int pg_decode_windows(BITBUFFER *bb, BD_PG_WINDOWS *p) +{ + unsigned ii; + + p->num_windows = bb_read(bb, 8); + p->window = calloc(p->num_windows, sizeof(BD_PG_WINDOW)); + + for (ii = 0; ii < p->num_windows; ii++) { + pg_decode_window(bb, &p->window[ii]); + } + + return 1; +} + /* * cleanup */ @@ -236,10 +250,10 @@ void pg_clean_composition(BD_PG_COMPOSITION *p) } } -void pg_free_window(BD_PG_WINDOW **p) +void pg_clean_windows(BD_PG_WINDOWS *p) { - if (p && *p) { - X_FREE(*p); + if (p) { + X_FREE(p->window); } } @@ -265,3 +279,11 @@ void pg_free_composition(BD_PG_COMPOSITION **p) X_FREE(*p); } } + +void pg_free_windows(BD_PG_WINDOWS **p) +{ + if (p && *p) { + pg_clean_windows(*p); + X_FREE(*p); + } +} diff --git a/src/libbluray/decoders/pg_decode.h b/src/libbluray/decoders/pg_decode.h index d8af2b5..975b9e2 100644 --- a/src/libbluray/decoders/pg_decode.h +++ b/src/libbluray/decoders/pg_decode.h @@ -43,6 +43,7 @@ BD_PRIVATE int pg_decode_palette_update(BITBUFFER *bb, BD_PG_PALETTE *p); BD_PRIVATE int pg_decode_palette(BITBUFFER *bb, BD_PG_PALETTE *p); BD_PRIVATE int pg_decode_object(BITBUFFER *bb, BD_PG_OBJECT *p); BD_PRIVATE int pg_decode_composition(BITBUFFER *bb, BD_PG_COMPOSITION *p); +BD_PRIVATE int pg_decode_windows(BITBUFFER *bb, BD_PG_WINDOWS *p); /* * cleanup @@ -50,10 +51,11 @@ BD_PRIVATE int pg_decode_composition(BITBUFFER *bb, BD_PG_COMPOSITION *p); BD_PRIVATE void pg_clean_object(BD_PG_OBJECT *p); BD_PRIVATE void pg_clean_composition(BD_PG_COMPOSITION *p); +BD_PRIVATE void pg_clean_windows(BD_PG_WINDOWS *p); -BD_PRIVATE void pg_free_window(BD_PG_WINDOW **p); BD_PRIVATE void pg_free_palette(BD_PG_PALETTE **p); BD_PRIVATE void pg_free_object(BD_PG_OBJECT **p); BD_PRIVATE void pg_free_composition(BD_PG_COMPOSITION **p); +BD_PRIVATE void pg_free_windows(BD_PG_WINDOWS **p); #endif // _PG_DECODE_H_ _______________________________________________ libbluray-devel mailing list [email protected] http://mailman.videolan.org/listinfo/libbluray-devel
