+++ /dev/null
-
-#include <stdio.h>
-#include "libzmpeg3.h"
-
-/* reads a ifo file which must be a dvd, and vaidates the title data */
-/* reports title/program sets which appear to be usable */
-
-int usage(const char *nm)
-{
- printf("usage: %s <path>\n"
- " <path> = path to dvd mount point\n", nm);
- return 0;
-}
-
-int main(int argc, char **argv)
-{
- if( argc < 2 )
- return usage(argv[0]);
-
- int verbose = 0;
- int program = -1;
- int limit = 3;
- const char *path = 0;
-
- int i;
- for( i=1; i<argc; ++i ) {
- if( !strcmp(argv[i], "-v") ) {
- verbose = 1;
- }
- else if( !strcmp(argv[i], "-p") ) {
- if( ++i < argc ) program = atoi(argv[i]);
- }
- else if( !strcmp(argv[i], "-l") ) {
- if( ++i < argc ) limit = atoi(argv[i]);
- }
- else if(argv[i][0] == '-') {
- fprintf(stderr, "Unrecognized command %s\n", argv[i]);
- exit(1);
- }
- else if(!path) {
- path = argv[i];
- }
- else {
- fprintf(stderr, "Unknown argument \"%s\"\n", argv[i]);
- exit(1);
- }
- }
-
- for( i=1; i<100; ++i ) {
- char ifo_path[PATH_MAX];
- strncpy(&ifo_path[0], path, sizeof(ifo_path));
- int l = strnlen(&ifo_path[0],sizeof(ifo_path));
- snprintf(&ifo_path[l],sizeof(ifo_path)-l,"/VIDEO_TS/VTS_%02d_0.IFO",i);
- if( access(&ifo_path[0],R_OK) ) break;
-
- zmpeg3_t *src = new zmpeg3_t(&ifo_path[0]);
- if( !src ) break;
- uint32_t bits = src->fs->read_uint32();
- if( bits == zmpeg3_t::IFO_PREFIX ) {
- int fd = src->fs->get_fd();
- zifo_t *ifo = src->ifo_open(fd, 0);
- if( !ifo ) {
- fprintf(stderr,"Error opening ifo in %s\n", &ifo_path[0]);
- continue;
- }
-
- zicell_table_t icell_addrs;
- ifo->icell_addresses(&icell_addrs);
- int programs = ifo->max_inlv+1;
- int angles = -1;
- if( verbose )
- printf("processing: %s, %d programs\n",&ifo_path[0], programs);
-
- for( int title=0; title<100; ++title ) {
- int listed = 0;
- for( int pgm=0; pgm<programs; ++pgm ) {
- int sectors = 0, pcells = 0;
- int ret = ifo->chk(title, 0, pgm, 0, &icell_addrs, sectors, pcells, angles);
- if( ret < 0 ) break;
- if( !ret ) continue;
- if( pcells < limit ) continue;
- if( program >= 0 && pgm != program ) continue;
- if( !listed ) {
- listed = 1;
- printf("%s, Title = %d, pcells=%d, sectors = %d, angles %d, program ids=%d",
- &ifo_path[0], title+1, pcells, sectors, angles+1, title*100+pgm);
- }
- else
- printf(", %d",title*100+pgm);
- }
- if( listed ) printf("\n");
- }
- ifo->ifo_close();
- }
-
- delete src;
- }
-
- if( i == 1 ) {
- printf("cant open %s/VIDEO_TS/VTS_01_0.IFO\n",path);
- exit(1);
- }
-
- return 0;
-}
-