Am Wed, 24 Dec 2008 10:59:36 +0100 schrieb Francesco Romani <from...@gmail.com>:
> On Tue, 2008-12-16 at 17:54 +0100, Stefan Scheffler wrote: > > > I haven't actually tested the attached version, because tc > > fails to recognize a lot of quicktime files lately. For some > > reason tcprobe segfaults when it opens them with libdvdread to check > > for DVD. It's strange, I don't think I've had this problem before. > > CVS was pretty cold during last week (except for fixes), so this is is > surprising for me. > > Anyway, 1.1.0 final is scheduled for December the 29, if we can root > out the cause of troubles, it will be nice (I'll happily support and > take part of any effort on that, the only problem being quicktime > isn't my playfield) Otherwise, no big deal: fixes will be committed > in 1.1.1 > > Bests, > It was actually a problem with my libdvdcss. Upgrading that fixed it. No idea why it only crashed with quicktime files. I made a pretty stupid mistake in the precious patch. So much for not testing changes... The attached patch should work though. I successfully transcoded a jpeg quicktime file and also a couple of other files. stefan
Index: import/import_mov.c =================================================================== RCS file: /cvstc/transcode/import/import_mov.c,v retrieving revision 1.20 diff -u -r1.20 import_mov.c --- import/import_mov.c 14 Sep 2006 08:25:15 -0000 1.20 +++ import/import_mov.c 27 Dec 2008 12:08:30 -0000 @@ -226,29 +226,52 @@ break; case CODEC_YUV: - /* use raw mode when possible */ - /* not working ?*/ - /* if (strcmp(qt_codec, "yv12")) rawVideo=1; */ - /* allocate buffer for row pointers */ - row_ptr = tc_malloc(3*sizeof(char *)); - if(row_ptr==0) { - tc_log_error(MOD_NAME,"can't alloc row pointers"); - return(TC_IMPORT_ERROR); - } + /* use raw mode when possible */ + /* not working ?*/ + /* if (strcmp(qt_codec, "yv12")) rawVideo=1; */ + + /* allocate buffer for row pointers */ + row_ptr = tc_malloc(3*sizeof(char *)); + if(row_ptr==0) { + tc_log_error(MOD_NAME,"can't alloc row pointers"); + return(TC_IMPORT_ERROR); + } + + if (!quicktime_reads_cmodel(qt_video, BC_YUV420P, 0)) { + if (quicktime_reads_cmodel(qt_video, BC_YUVJ420P, 0)) { + /* stolen from import_ffmpeg */ + /* load levels filter */ + if (!tc_filter_add("levels", "output=16-240:pre=1")) { + tc_log_warn(MOD_NAME, "cannot load levels filter. Try -V rgb24."); + } + quicktime_set_cmodel(qt_video, BC_YUVJ420P); + + } else { + tc_log_error(MOD_NAME,"unable to handle colormodel. Try -V rgb24."); + return(TC_IMPORT_ERROR); + } + } else { + quicktime_set_cmodel(qt_video, BC_YUV420P); + } - quicktime_set_cmodel(qt_video, BC_YUV420P); qt_cm = BC_YUV420P; - break; + qt_cm = BC_YUV420P; + break; case CODEC_YUV422: - /* allocate buffer for row pointers */ - row_ptr = tc_malloc(3*sizeof(char *)); - if(row_ptr==0) { - tc_log_error(MOD_NAME,"can't alloc row pointers"); - return(TC_IMPORT_ERROR); - } + /* allocate buffer for row pointers */ + row_ptr = tc_malloc(3*sizeof(char *)); + if(row_ptr==0) { + tc_log_error(MOD_NAME,"can't alloc row pointers"); + return(TC_IMPORT_ERROR); + } + + if (!quicktime_reads_cmodel(qt_video, BC_YUV422P, 0)) { + tc_log_error(MOD_NAME,"unable to handle colormodel. Try -V rgb24."); + return(TC_IMPORT_ERROR); + } - quicktime_set_cmodel(qt_video, BC_YUV422P); qt_cm = BC_YUV422P; - break; + quicktime_set_cmodel(qt_video, BC_YUV422P); qt_cm = BC_YUV422P; + break; case CODEC_YUY2: quicktime_set_cmodel(qt_video, BC_YUV422); qt_cm = BC_YUV422;