[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