annotate dvdread_internal.h @ 75:8e12b8e01713 src

Accommodate duplicate language units and pgcs. Many dvd's are showing up that have titles that have numerous repeated language unit tables and pgc's. The new release "Up" is an example. I believe "Dark Knight" also exhibits this. When scanning such discs with lsdvd (and other programs that scan all titles), libdvdread will consume many GB of data for these repeated elements and gets very slow (e.g hours to read all titles) on OS X due to reading the duplicate data from uncached raw devices. This patch detects duplicates and reference counts pgc's and pgcit's. When a duplicate is detected, a reference count is incremented instead of allocating new memory and re-reading the data. Patch by John Stebbins.
author rathann
date Sun, 09 Dec 2012 21:07:59 +0000
parents 3bc841283972
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
1 /*
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
2 * This file is part of libdvdread.
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
3 *
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
4 * libdvdread is free software; you can redistribute it and/or modify
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
5 * it under the terms of the GNU General Public License as published by
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
7 * (at your option) any later version.
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
8 *
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
9 * libdvdread is distributed in the hope that it will be useful,
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
12 * GNU General Public License for more details.
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
13 *
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
14 * You should have received a copy of the GNU General Public License along
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
15 * with libdvdread; if not, write to the Free Software Foundation, Inc.,
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
17 */
17258a7b3239 Add missing license header.
diego
parents: 23
diff changeset
18
23
ac07d427fbc6 Use consistent multiple inclusion guards everywhere:
diego
parents: 3
diff changeset
19 #ifndef LIBDVDREAD_DVDREAD_INTERNAL_H
ac07d427fbc6 Use consistent multiple inclusion guards everywhere:
diego
parents: 3
diff changeset
20 #define LIBDVDREAD_DVDREAD_INTERNAL_H
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
21
62
3bc841283972 Move UDFReadBlocksRaw declaration to dvdread_internal.h.
diego
parents: 41
diff changeset
22 #include <stdint.h>
3bc841283972 Move UDFReadBlocksRaw declaration to dvdread_internal.h.
diego
parents: 41
diff changeset
23 #include <sys/types.h>
3bc841283972 Move UDFReadBlocksRaw declaration to dvdread_internal.h.
diego
parents: 41
diff changeset
24
41
ef679522d00f replaced conditional checks on MSC with _WIN32 to permit MINGW to mount and decrypt images; patch by John Stebbins (stebbing jetheaddev com)
nicodvb
parents: 27
diff changeset
25 #ifdef _WIN32
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
26 #include <unistd.h>
41
ef679522d00f replaced conditional checks on MSC with _WIN32 to permit MINGW to mount and decrypt images; patch by John Stebbins (stebbing jetheaddev com)
nicodvb
parents: 27
diff changeset
27 #endif /* _WIN32 */
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
28
62
3bc841283972 Move UDFReadBlocksRaw declaration to dvdread_internal.h.
diego
parents: 41
diff changeset
29 #include "dvdread/dvd_reader.h"
3bc841283972 Move UDFReadBlocksRaw declaration to dvdread_internal.h.
diego
parents: 41
diff changeset
30
27
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 25
diff changeset
31 #define CHECK_VALUE(arg) \
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 25
diff changeset
32 if(!(arg)) { \
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 25
diff changeset
33 fprintf(stderr, "\n*** libdvdread: CHECK_VALUE failed in %s:%i ***" \
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 25
diff changeset
34 "\n*** for %s ***\n\n", \
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 25
diff changeset
35 __FILE__, __LINE__, # arg ); \
98951f8ec89c cosmetics: Sync indentation and similar changes from libdvdread 0.9.5.
diego
parents: 25
diff changeset
36 }
3
fdbae45c30fc moved to src/ the sources files
nicodvb
parents:
diff changeset
37
62
3bc841283972 Move UDFReadBlocksRaw declaration to dvdread_internal.h.
diego
parents: 41
diff changeset
38 int UDFReadBlocksRaw(dvd_reader_t *device, uint32_t lb_number,
3bc841283972 Move UDFReadBlocksRaw declaration to dvdread_internal.h.
diego
parents: 41
diff changeset
39 size_t block_count, unsigned char *data, int encrypted);
3bc841283972 Move UDFReadBlocksRaw declaration to dvdread_internal.h.
diego
parents: 41
diff changeset
40
23
ac07d427fbc6 Use consistent multiple inclusion guards everywhere:
diego
parents: 3
diff changeset
41 #endif /* LIBDVDREAD_DVDREAD_INTERNAL_H */