changeset 17862:ecb2023ee4b6

Try several formats instead of only YV12 if no format was explicitly requested. Patch from Benjamin Zores <ben -at- geexbox -dot- org> with a few whitespace changes.
author albeu
date Tue, 14 Mar 2006 00:45:06 +0000
parents a9442aa34139
children 8ec63246c118
files libmpdemux/tv.c
diffstat 1 files changed, 22 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/libmpdemux/tv.c	Tue Mar 14 00:38:00 2006 +0000
+++ b/libmpdemux/tv.c	Tue Mar 14 00:45:06 2006 +0000
@@ -53,7 +53,7 @@
 int tv_param_width = -1;
 int tv_param_height = -1;
 int tv_param_input = 0; /* used in v4l and bttv */
-int tv_param_outfmt = IMGFMT_YV12;
+int tv_param_outfmt = -1;
 float tv_param_fps = -1.0;
 char **tv_param_channels = NULL;
 int tv_param_audio_id = 0;
@@ -165,6 +165,16 @@
 {
     int i;
     tvi_functions_t *funcs = tvh->functions;
+    int tv_fmt_list[] = {
+      IMGFMT_YV12,
+      IMGFMT_I420,
+      IMGFMT_UYVY,
+      IMGFMT_YUY2,
+      IMGFMT_RGB32,
+      IMGFMT_RGB24,
+      IMGFMT_RGB16,
+      IMGFMT_RGB15
+    };
 
     if (funcs->control(tvh->priv, TVI_CONTROL_IS_VIDEO, 0) != TVI_CONTROL_TRUE)
     {
@@ -172,6 +182,16 @@
 	return 0;
     }
 
+    if (tv_param_outfmt == -1)
+      for (i = 0; i < sizeof (tv_fmt_list) / sizeof (*tv_fmt_list); i++)
+        {
+          tv_param_outfmt = tv_fmt_list[i];
+          if (funcs->control (tvh->priv, TVI_CONTROL_VID_SET_FORMAT,
+                              &tv_param_outfmt) == TVI_CONTROL_TRUE)
+            break;
+        }
+    else
+    {
     switch(tv_param_outfmt)
     {
 	case IMGFMT_YV12:
@@ -194,6 +214,7 @@
 	    mp_msg(MSGT_TV, MSGL_ERR, "==================================================================\n");
     }
     funcs->control(tvh->priv, TVI_CONTROL_VID_SET_FORMAT, &tv_param_outfmt);
+    }
 
     /* set some params got from cmdline */
     funcs->control(tvh->priv, TVI_CONTROL_SPC_SET_INPUT, &tv_param_input);