/* * print some info about a movie file */ #include #include #include #include #define MVPR(s) fprintf(stderr, "%s: %s\n", s, mvGetErrorStr(mvGetErrno())) #define EMV(func, s) if (func == DM_FAILURE) { MVPR(s); exit(1); } char * ilacestr(DMinterlacing ilace) { switch (ilace) { case DM_IMAGE_NONINTERLACED: return "frames"; case DM_IMAGE_INTERLACED_EVEN: return "fields, even (PAL)"; case DM_IMAGE_INTERLACED_ODD: return "fields, odd (NTSC)"; default: return "(unknown interlacing)"; } } main(int argc, char **argv) { MVid movie, track; DMparams *p; MVtimescale tscale; int t, ntracks; char *mvname = argv[1]; if (argc != 2) { fprintf(stderr, "usage: %s file.mv\n", argv[0]); exit(1); } EMV(mvOpenFile(mvname, O_RDONLY, &movie), mvname); ntracks = mvGetNumTracks(movie); tscale = mvGetMovieTimeScale(movie); printf("ntracks %d, tscale %d\n", ntracks, tscale); for (t = 0; t < ntracks; t++) { MVframe nframes; double rate; EMV(mvFindTrackByIndex(movie, t, &track), "find track"); p = mvGetParams(track); nframes = mvGetTrackLength(track); switch (mvGetTrackMedium(track)) { case DM_AUDIO: rate = mvGetAudioRate(track); printf("%2d audio %8d %5dHz\n", t, nframes, (int)rate); break; case DM_IMAGE: rate = mvGetImageRate(track); printf("%2d image %8d %5.2fHz %4dx%4d %s %s\n", t, nframes, rate, mvGetTrackDisplayWidth(track), mvGetTrackDisplayHeight(track), dmParamsGetEnum(p, DM_IMAGE_COMPRESSION), ilacestr(mvGetImageInterlacing(track))); break; default: fprintf(stderr, "%s, track %d unknown medium\n", mvname, t); } } }