libbluray | branch: master | hpi1 <[email protected]> | Mon Jun 17 12:41:46 
2013 +0300| [93daf1755f83d0fad2a9363fae3c83730cecfa60] | committer: hpi1

Cut read at clip end packet (not block or read boundary).
Fixes slide shows and probably some other problems too.

> http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=93daf1755f83d0fad2a9363fae3c83730cecfa60
---

 src/libbluray/bluray.c |    9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/src/libbluray/bluray.c b/src/libbluray/bluray.c
index dddb7fc..97e84b7 100644
--- a/src/libbluray/bluray.c
+++ b/src/libbluray/bluray.c
@@ -1850,6 +1850,15 @@ static int _bd_read(BLURAY *bd, unsigned char *buf, int 
len)
             if (size > (unsigned int)6144 - st->int_buf_off) {
                 size = 6144 - st->int_buf_off;
             }
+
+            /* cut read at clip end packet */
+            uint32_t new_clip_pkt = SPN(st->clip_pos + size);
+            if (new_clip_pkt > st->clip->end_pkt) {
+                BD_DEBUG(DBG_STREAM, "cut %d bytes at end of block\n", 
(new_clip_pkt - st->clip->end_pkt) * 192);
+                size -= (new_clip_pkt - st->clip->end_pkt) * 192;
+            }
+
+            /* copy chunk */
             memcpy(buf, bd->int_buf + st->int_buf_off, size);
             buf += size;
             len -= size;

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

Reply via email to