[MPlayer-cvslog] r30585 - in trunk: etc/codecs.conf libmpcodecs/vd_theora.c

reimar subversion at mplayerhq.hu
Sun Feb 14 16:39:53 CET 2010


Author: reimar
Date: Sun Feb 14 16:39:52 2010
New Revision: 30585

Log:
Add support for decoding 4:2:2 and 4:4:4 Theora files.
Patch by Giorgio [mywing81 gmail com]

Modified:
   trunk/etc/codecs.conf
   trunk/libmpcodecs/vd_theora.c

Modified: trunk/etc/codecs.conf
==============================================================================
--- trunk/etc/codecs.conf	Sun Feb 14 16:17:24 2010	(r30584)
+++ trunk/etc/codecs.conf	Sun Feb 14 16:39:52 2010	(r30585)
@@ -584,7 +584,7 @@ videocodec theora
   fourcc theo,Thra
   driver theora
   dll libtheora
-  out YV12
+  out YV12,422P,444P
 
 ; prefer native codecs over win32?
 ; the win32 codecs probably are (better) optimized and support direct

Modified: trunk/libmpcodecs/vd_theora.c
==============================================================================
--- trunk/libmpcodecs/vd_theora.c	Sun Feb 14 16:17:24 2010	(r30584)
+++ trunk/libmpcodecs/vd_theora.c	Sun Feb 14 16:39:52 2010	(r30585)
@@ -41,11 +41,28 @@ LIBVD_EXTERN(theora)
 
 #define THEORA_NUM_HEADER_PACKETS 3
 
+typedef struct theora_struct_st {
+    theora_state st;
+    theora_comment cc;
+    theora_info inf;
+} theora_struct_t;
+
+/** Convert Theora pixelformat to the corresponding IMGFMT_ */
+static uint32_t theora_pixelformat2imgfmt(theora_pixelformat fmt){
+    switch(fmt) {
+       case OC_PF_420: return IMGFMT_YV12;
+       case OC_PF_422: return IMGFMT_422P;
+       case OC_PF_444: return IMGFMT_444P;
+    }
+    return 0;
+}
+
 // to set/get/query special features/parameters
 static int control(sh_video_t *sh,int cmd,void* arg,...){
+    theora_struct_t *context = sh->context;
     switch(cmd) {
     case VDCTRL_QUERY_FORMAT:
-        if (*(int*)arg == IMGFMT_YV12)
+        if (*(int*)arg == theora_pixelformat2imgfmt(context->inf.pixelformat))
 	    return CONTROL_TRUE;
 	return CONTROL_FALSE;
     }
@@ -53,12 +70,6 @@ static int control(sh_video_t *sh,int cm
     return CONTROL_UNKNOWN;
 }
 
-typedef struct theora_struct_st {
-    theora_state st;
-    theora_comment cc;
-    theora_info inf;
-} theora_struct_t;
-
 /*
  * init driver
  */
@@ -104,7 +115,7 @@ static int init(sh_video_t *sh){
 
     mp_msg(MSGT_DECVIDEO,MSGL_V,"INFO: Theora video init ok!\n");
 
-    return mpcodecs_config_vo (sh,context->inf.frame_width,context->inf.frame_height,IMGFMT_YV12);
+    return mpcodecs_config_vo (sh,context->inf.frame_width,context->inf.frame_height,theora_pixelformat2imgfmt(context->inf.pixelformat));
 
 err_out:
     free(context);


More information about the MPlayer-cvslog mailing list