changeset 1137:246df8e6aab7 libavformat

Properly set the image depth
author lucabe
date Wed, 28 Jun 2006 12:18:22 +0000
parents d65cd7c3573e
children 36ce24677f96
files grab.c
diffstat 1 files changed, 12 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/grab.c	Wed Jun 28 10:51:56 2006 +0000
+++ b/grab.c	Wed Jun 28 12:18:22 2006 +0000
@@ -62,7 +62,7 @@
     int width, height;
     int video_fd, frame_size;
     int ret, frame_rate, frame_rate_base;
-    int desired_palette;
+    int desired_palette, desired_depth;
     struct video_tuner tuner;
     struct video_audio audio;
     struct video_picture pict;
@@ -118,12 +118,16 @@
     }
 
     desired_palette = -1;
-    if (st->codec->pix_fmt == PIX_FMT_YUV420P) {
+    desired_depth = -1;
+    if (ap->pix_fmt == PIX_FMT_YUV420P) {
         desired_palette = VIDEO_PALETTE_YUV420P;
-    } else if (st->codec->pix_fmt == PIX_FMT_YUV422) {
+        desired_depth = 12;
+    } else if (ap->pix_fmt == PIX_FMT_YUV422) {
         desired_palette = VIDEO_PALETTE_YUV422;
-    } else if (st->codec->pix_fmt == PIX_FMT_BGR24) {
+        desired_depth = 16;
+    } else if (ap->pix_fmt == PIX_FMT_BGR24) {
         desired_palette = VIDEO_PALETTE_RGB24;
+        desired_depth = 24;
     }
 
     /* set tv standard */
@@ -155,14 +159,18 @@
 #endif
     /* try to choose a suitable video format */
     pict.palette = desired_palette;
+    pict.depth= desired_depth;
     if (desired_palette == -1 || (ret = ioctl(video_fd, VIDIOCSPICT, &pict)) < 0) {
         pict.palette=VIDEO_PALETTE_YUV420P;
+        pict.depth=12;
         ret = ioctl(video_fd, VIDIOCSPICT, &pict);
         if (ret < 0) {
             pict.palette=VIDEO_PALETTE_YUV422;
+            pict.depth=16;
             ret = ioctl(video_fd, VIDIOCSPICT, &pict);
             if (ret < 0) {
                 pict.palette=VIDEO_PALETTE_RGB24;
+                pict.depth=24;
                 ret = ioctl(video_fd, VIDIOCSPICT, &pict);
                 if (ret < 0)
                     goto fail1;