Am Mon, 15 Dec 2008 13:21:49 -0600
schrieb Carl Karsten <c...@personnelware.com>:

> Stefan Scheffler wrote:
> > Hi,
> > 
> > this patch makes export_mov use optstr_get to parse meta data and
> > extended/codecs options. The current parser is pretty ugly and
> > doesn't handle non int values.
> > 
> 
> When you gave me that patch, you also gave me:
> 
> "this makes -y raw work"
> 
> transcode/export/export_raw.c
> 
> -       srcfmt = IMG_YUV422P;
> +       srcfmt = IMG_UYVY;
> 
> Should that get committed?
> 
> Carl K

No, that was just to verify someting.

I had a fix for decoding jpeg quicktime files in yuv mode. Maybe
that's the one you actually meant. I've attached a slightly cleaned up
version.

The module will automatically load the levels filter if it reads a
file that can only be decoded into the YUVJ420P colormodel. The idea is
taken from import_ffmpeg, but it's not actually used there. I hope
that's not for a reason...

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.

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	16 Dec 2008 16:34:06 -0000
@@ -226,29 +226,48 @@
               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.");
+                    }
+                } else {
+                    tc_log_error(MOD_NAME,"unable to handle colormodel. Try -V rgb24.");
+                    return(TC_IMPORT_ERROR);
+                }
+            }
 
-              quicktime_set_cmodel(qt_video, BC_YUV420P); qt_cm = BC_YUV420P;
-              break;
+            quicktime_set_cmodel(qt_video, BC_YUV420P); 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;

Reply via email to