annotate libvo/vo_zr2.c @ 36537:3b2228019b6a

vo_bl: update copyright header. Patch by Stefan Schuermans [stefan blinkenarea org].
author reimar
date Sun, 19 Jan 2014 12:06:04 +0000
parents 5d3f93051de9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27509
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 26203
diff changeset
1 /*
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 26203
diff changeset
2 * playback on Zoran cards, based on vo_zr.c
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 26203
diff changeset
3 *
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 26203
diff changeset
4 * copyright (C) 2001-2005 Rik Snel
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 26203
diff changeset
5 *
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 26203
diff changeset
6 * This file is part of MPlayer.
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 26203
diff changeset
7 *
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 26203
diff changeset
8 * MPlayer is free software; you can redistribute it and/or modify
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 26203
diff changeset
9 * it under the terms of the GNU General Public License as published by
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 26203
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 26203
diff changeset
11 * (at your option) any later version.
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 26203
diff changeset
12 *
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 26203
diff changeset
13 * MPlayer is distributed in the hope that it will be useful,
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 26203
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 26203
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 26203
diff changeset
16 * GNU General Public License for more details.
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 26203
diff changeset
17 *
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 26203
diff changeset
18 * You should have received a copy of the GNU General Public License along
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 26203
diff changeset
19 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 26203
diff changeset
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
21 */
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
22
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
23 /* $Id$ */
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
24
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
25 #include <stdio.h>
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
26 #include <stdlib.h>
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
27 #include <string.h>
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
28 #include <unistd.h>
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
29 #include <fcntl.h>
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
30 #include <errno.h>
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
31 #include <sys/stat.h>
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
32 #include <sys/types.h>
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
33 #include <sys/time.h>
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
34 #include <sys/mman.h>
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
35 #include <sys/ioctl.h>
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
36 #include <linux/types.h>
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
37 #include <linux/videodev.h>
26203
0d255d03016f #include config.h before all other headers.
diego
parents: 25810
diff changeset
38 #include "config.h"
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
39 #include "videodev_mjpeg.h"
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
40 #include "video_out.h"
36517
5d3f93051de9 Remove empty draw_slice and draw_frame stubs.
reimar
parents: 33305
diff changeset
41 #define NO_DRAW_FRAME
5d3f93051de9 Remove empty draw_slice and draw_frame stubs.
reimar
parents: 33305
diff changeset
42 #define NO_DRAW_SLICE
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
43 #include "video_out_internal.h"
13787
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 11660
diff changeset
44 #include "mp_msg.h"
14428
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
45 #include "subopt-helper.h"
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
46 #include "fastmemcpy.h"
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
47
25216
3aee342be929 Make vo info structs const
reimar
parents: 23458
diff changeset
48 static const vo_info_t info = {
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
49 "Zoran ZR360[56]7/ZR36060 Driver (DC10(+)/buz/lml33/MatroxRR)",
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
50 "zr2",
14429
90b4a1345b96 replace almost obsolete email address: snel@phys.uu.nl -> rsnel@cube.dyndns.org
rik
parents: 14428
diff changeset
51 "Rik Snel <rsnel@cube.dyndns.org>",
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
52 ""
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
53 };
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
54
25220
c9e9ac2008c2 Mark the vo_functions_t definitions as const where possible.
reimar
parents: 25216
diff changeset
55 const LIBVO_EXTERN(zr2)
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
56
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
57 typedef struct {
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
58 /* options */
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
59 char *subdevice;
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
60
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
61 /* information for (and about) the zoran card */
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
62
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
63 unsigned char *buf; /* the JPEGs will be placed here */
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
64 struct mjpeg_requestbuffers zrq; /* info about this buffer */
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
65
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
66 int vdes; /* file descriptor of card */
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
67 int playing; /* 0 or 1 */
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
68 int frame, sync, queue; /* buffer management */
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
69 struct mjpeg_sync zs; /* state information */
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
70 struct mjpeg_params zp;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
71 struct video_capability vc; /* max resolution and so on */
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
72 } vo_zr2_priv_t;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
73
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
74 static vo_zr2_priv_t priv;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
75
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
76 #define ZR2_MJPEG_NBUFFERS 2
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
77 #define ZR2_MJPEG_SIZE 1024*256
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
78
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
79 /* some convenient #define's, is this portable enough? */
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
80 #define DBG2(...) mp_msg(MSGT_VO, MSGL_DBG2, "vo_zr2: " __VA_ARGS__)
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
81 #define VERBOSE(...) mp_msg(MSGT_VO, MSGL_V, "vo_zr2: " __VA_ARGS__)
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
82 #define ERROR(...) mp_msg(MSGT_VO, MSGL_ERR, "vo_zr2: " __VA_ARGS__)
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
83 #define WARNING(...) mp_msg(MSGT_VO, MSGL_WARN, "vo_zr2: " __VA_ARGS__)
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
84
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
85 static void stop_playing(vo_zr2_priv_t *p) {
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
86 if (p->playing) {
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
87 p->frame = -1;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
88 if (ioctl(p->vdes, MJPIOC_QBUF_PLAY, &p->frame) < 0)
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
89 ERROR("error stopping playback\n");
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
90 p->playing = 0;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
91 p->sync = 0;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
92 p->queue = 0;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
93 p->frame = 0;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
94 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
95 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
96
14428
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
97 static const char *guess_device(const char *suggestion, int inform) {
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
98 struct stat vstat;
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
99 int res;
25810
7d81806e92dd Add a few const attributes
reimar
parents: 25426
diff changeset
100 static const char * const devs[] = {
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
101 "/dev/video",
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
102 "/dev/video0",
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
103 "/dev/v4l/video0",
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
104 "/dev/v4l0",
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
105 "/dev/v4l",
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
106 NULL
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
107 };
25810
7d81806e92dd Add a few const attributes
reimar
parents: 25426
diff changeset
108 const char * const *dev = devs;
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
109
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
110 if (suggestion) {
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
111 if (!*suggestion) {
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
112 ERROR("error: specified device name is empty string\n");
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
113 return NULL;
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
114 }
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
115
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
116 res = stat(suggestion, &vstat);
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
117 if (res == 0 && S_ISCHR(vstat.st_mode)) {
14428
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
118 if (inform) VERBOSE("using device %s\n", suggestion);
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
119 return suggestion;
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
120 } else {
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
121 if (res != 0) ERROR("%s does not exist\n", suggestion);
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
122 else ERROR("%s is no character device\n", suggestion);
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
123 /* don't try to be smarter than the user, just exit */
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
124 return NULL;
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
125 }
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
126 }
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
127
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
128 while (*(++dev) != NULL) {
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
129 if (stat(*dev, &vstat) == 0 && S_ISCHR(vstat.st_mode)) {
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
130 VERBOSE("guessed video device %s\n", *dev);
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
131 return *dev;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
132 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
133 dev++;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
134 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
135
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
136 ERROR("unable to find video device\n");
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
137
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
138 return NULL;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
139 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
140
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 14595
diff changeset
141 static int query_format(uint32_t format) {
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
142 if (format==IMGFMT_ZRMJPEGNI ||
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
143 format==IMGFMT_ZRMJPEGIT ||
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
144 format==IMGFMT_ZRMJPEGIB)
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
145 return VFCAP_CSP_SUPPORTED|VFCAP_CSP_SUPPORTED_BY_HW;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
146 return 0;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
147 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
148
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
149 static uint32_t draw_image(mp_image_t *mpi) {
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
150 vo_zr2_priv_t *p = &priv;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
151 int size = (int)mpi->planes[1];
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
152 if (size > (int)p->zrq.size) {
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
153 ERROR("incoming JPEG image (size=%d) doesn't fit in buffer\n",
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
154 size);
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
155 return VO_FALSE;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
156 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
157
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
158 /* looking for free buffer */
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
159 if (p->queue - p->sync < (int)p->zrq.count) p->frame = p->queue;
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
160 else {
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
161 if (ioctl(p->vdes, MJPIOC_SYNC, &p->zs) < 0) {
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
162 ERROR("error waiting for buffer to become free\n");
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
163 return VO_FALSE;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
164 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
165 p->frame = p->zs.frame;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
166 p->sync++;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
167 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
168
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
169 /* copy the jpeg image to the buffer which we acquired */
23457
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 16171
diff changeset
170 fast_memcpy(p->buf + p->zrq.size*p->frame, mpi->planes[0], size);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
171
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
172 return VO_TRUE;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
173 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
174
14428
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
175 static const char *normstring(int norm) {
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
176 switch (norm) {
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
177 case VIDEO_MODE_PAL:
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
178 return "PAL";
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
179 case VIDEO_MODE_NTSC:
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
180 return "NTSC";
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
181 case VIDEO_MODE_SECAM:
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
182 return "SECAM";
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
183 case VIDEO_MODE_AUTO:
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
184 return "auto";
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
185 }
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
186 return "undefined";
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
187 }
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
188
14594
fa603d1e06fc vo_zr2 moved to OPT_ARG_MSTRZ from OPT_ARG_STR
rik
parents: 14429
diff changeset
189 static int get_norm(const char *n) {
fa603d1e06fc vo_zr2 moved to OPT_ARG_MSTRZ from OPT_ARG_STR
rik
parents: 14429
diff changeset
190 if (!strcmp(n, "PAL")) return VIDEO_MODE_PAL;
fa603d1e06fc vo_zr2 moved to OPT_ARG_MSTRZ from OPT_ARG_STR
rik
parents: 14429
diff changeset
191 if (!strcmp(n, "NTSC")) return VIDEO_MODE_NTSC;
fa603d1e06fc vo_zr2 moved to OPT_ARG_MSTRZ from OPT_ARG_STR
rik
parents: 14429
diff changeset
192 if (!strcmp(n, "SECAM")) return VIDEO_MODE_SECAM;
fa603d1e06fc vo_zr2 moved to OPT_ARG_MSTRZ from OPT_ARG_STR
rik
parents: 14429
diff changeset
193 if (!strcmp(n, "auto")) return VIDEO_MODE_AUTO;
14428
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
194 return -1; /* invalid */
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
195 }
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
196
30122
1772a5171ac7 Fix function declarations to avoid casting function pointers.
reimar
parents: 29263
diff changeset
197 static int nc(void *normp) {
1772a5171ac7 Fix function declarations to avoid casting function pointers.
reimar
parents: 29263
diff changeset
198 const char **norm = normp;
14594
fa603d1e06fc vo_zr2 moved to OPT_ARG_MSTRZ from OPT_ARG_STR
rik
parents: 14429
diff changeset
199 if (get_norm(*norm) == -1) {
fa603d1e06fc vo_zr2 moved to OPT_ARG_MSTRZ from OPT_ARG_STR
rik
parents: 14429
diff changeset
200 ERROR("norm \"%s\" is not supported, choose from PAL, NTSC, SECAM and auto\n", *norm);
14428
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
201 return 0;
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
202 } else return 1;
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
203 }
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
204
30122
1772a5171ac7 Fix function declarations to avoid casting function pointers.
reimar
parents: 29263
diff changeset
205 static int pbc(void *prebufp) {
1772a5171ac7 Fix function declarations to avoid casting function pointers.
reimar
parents: 29263
diff changeset
206 int *prebuf = prebufp;
14428
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
207 if (*prebuf) WARNING("prebuffering is not yet supported\n");
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
208 return 1;
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
209 }
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
210
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 14595
diff changeset
211 static int preinit(const char *arg) {
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
212 vo_zr2_priv_t *p = &priv;
14428
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
213 const char *dev = NULL;
14594
fa603d1e06fc vo_zr2 moved to OPT_ARG_MSTRZ from OPT_ARG_STR
rik
parents: 14429
diff changeset
214 char *dev_arg = NULL, *norm_arg = NULL;
14428
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
215 int norm = VIDEO_MODE_AUTO, prebuf = 0;
28828
56eee6ffba9b Make data related to suboption parsing const in libvo
reimar
parents: 27509
diff changeset
216 const opt_t subopts[] = { /* don't want warnings with -Wall... */
28922
9dd905e52639 Remove obsolete extra elements from opt_t struct initialization.
diego
parents: 28828
diff changeset
217 { "dev", OPT_ARG_MSTRZ, &dev_arg, NULL },
30122
1772a5171ac7 Fix function declarations to avoid casting function pointers.
reimar
parents: 29263
diff changeset
218 { "prebuf", OPT_ARG_BOOL, &prebuf, pbc },
1772a5171ac7 Fix function declarations to avoid casting function pointers.
reimar
parents: 29263
diff changeset
219 { "norm", OPT_ARG_MSTRZ, &norm_arg, nc },
28922
9dd905e52639 Remove obsolete extra elements from opt_t struct initialization.
diego
parents: 28828
diff changeset
220 { NULL, 0, NULL, NULL }
14428
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
221 };
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
222
14428
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
223 VERBOSE("preinit() called with arg: %s\n", arg);
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
224 memset(p, 0, sizeof(*p)); /* set defaults */
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
225 p->vdes = -1;
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
226
14428
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
227 if (subopt_parse(arg, subopts)) {
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
228 mp_msg(MSGT_VO, MSGL_FATAL,
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
229 "Allowed suboptions for -vo zr2 are:\n"
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
230 "- dev=DEVICE (default: %s)\n"
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
231 "- norm=PAL|NTSC|SECAM|auto (default: auto)\n"
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
232 "- prebuf/noprebuf (default:"
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
233 " noprebuf)\n"
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
234 "\n"
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
235 "Example: mplayer -vo zr2:dev=/dev/video1:"
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
236 "norm=PAL movie.avi\n\n"
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
237 , guess_device(NULL, 0));
14595
0ddc0ba54747 free MSTRZ args also if parser fails
rik
parents: 14594
diff changeset
238 free(norm_arg);
0ddc0ba54747 free MSTRZ args also if parser fails
rik
parents: 14594
diff changeset
239 free(dev_arg);
14428
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
240 return -1;
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
241 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
242
14428
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
243 /* interpret the strings we got from subopt_parse */
14594
fa603d1e06fc vo_zr2 moved to OPT_ARG_MSTRZ from OPT_ARG_STR
rik
parents: 14429
diff changeset
244 if (norm_arg) {
fa603d1e06fc vo_zr2 moved to OPT_ARG_MSTRZ from OPT_ARG_STR
rik
parents: 14429
diff changeset
245 norm = get_norm(norm_arg);
fa603d1e06fc vo_zr2 moved to OPT_ARG_MSTRZ from OPT_ARG_STR
rik
parents: 14429
diff changeset
246 free(norm_arg);
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
247 }
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
248
14594
fa603d1e06fc vo_zr2 moved to OPT_ARG_MSTRZ from OPT_ARG_STR
rik
parents: 14429
diff changeset
249 if (dev_arg) dev = dev_arg;
fa603d1e06fc vo_zr2 moved to OPT_ARG_MSTRZ from OPT_ARG_STR
rik
parents: 14429
diff changeset
250
14428
04ce031b1180 vo_zr2 moves to subopt-helper (per Alex's request)
rik
parents: 13787
diff changeset
251 dev = guess_device(dev, 1);
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
252 if (!dev) {
14594
fa603d1e06fc vo_zr2 moved to OPT_ARG_MSTRZ from OPT_ARG_STR
rik
parents: 14429
diff changeset
253 free(dev_arg);
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
254 uninit();
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
255 return 1;
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
256 }
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
257
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
258 p->vdes = open(dev, O_RDWR);
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
259 if (p->vdes < 0) {
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
260 ERROR("error opening %s: %s\n", dev, strerror(errno));
14594
fa603d1e06fc vo_zr2 moved to OPT_ARG_MSTRZ from OPT_ARG_STR
rik
parents: 14429
diff changeset
261 free(dev_arg);
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
262 uninit();
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
263 return 1;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
264 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
265
14594
fa603d1e06fc vo_zr2 moved to OPT_ARG_MSTRZ from OPT_ARG_STR
rik
parents: 14429
diff changeset
266 free(dev_arg);
fa603d1e06fc vo_zr2 moved to OPT_ARG_MSTRZ from OPT_ARG_STR
rik
parents: 14429
diff changeset
267
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
268 /* check if we really are dealing with a zoran card */
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
269 if (ioctl(p->vdes, MJPIOC_G_PARAMS, &p->zp) < 0) {
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
270 ERROR("%s probably is not a DC10(+)/buz/lml33\n", dev);
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
271 uninit();
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
272 return 1;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
273 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
274
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
275 VERBOSE("kernel driver version %d.%d, current norm is %s\n",
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
276 p->zp.major_version, p->zp.minor_version,
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
277 normstring(p->zp.norm));
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
278
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
279 /* changing the norm in the zoran_params and MJPIOC_S_PARAMS
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
280 * does nothing the last time I tried, so bail out if the norm
11417
62eb4a5046b7 specification of video norm should not be mandatory
rik
parents: 11416
diff changeset
281 * is not correct */
62eb4a5046b7 specification of video norm should not be mandatory
rik
parents: 11416
diff changeset
282 if (norm != VIDEO_MODE_AUTO && p->zp.norm != norm) {
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
283 ERROR("mplayer currently can't change the video norm, "
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
284 "change it with (eg.) XawTV and retry.\n");
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
285 uninit();
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
286 return 1;
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
287 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
288
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
289 /* gather useful information */
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
290 if (ioctl(p->vdes, VIDIOCGCAP, &p->vc) < 0) {
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
291 ERROR("error getting video capabilities from %s\n", dev);
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
292 uninit();
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
293 return 1;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
294 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
295
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
296 VERBOSE("card reports maxwidth=%d, maxheight=%d\n",
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
297 p->vc.maxwidth, p->vc.maxheight);
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
298
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
299 /* according to the mjpegtools source, some cards return a bogus
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
300 * vc.maxwidth, correct it here. If a new zoran card appears with a
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
301 * maxwidth different 640, 720 or 768 this code may lead to problems */
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
302 if (p->vc.maxwidth != 640 && p->vc.maxwidth != 768) {
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
303 VERBOSE("card probably reported bogus width (%d), "
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
304 "changing to 720\n", p->vc.maxwidth);
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
305 p->vc.maxwidth = 720;
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
306 }
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
307
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
308 p->zrq.count = ZR2_MJPEG_NBUFFERS;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
309 p->zrq.size = ZR2_MJPEG_SIZE;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
310
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
311 if (ioctl(p->vdes, MJPIOC_REQBUFS, &p->zrq)) {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
312 ERROR("error requesting %d buffers of size %d\n",
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
313 ZR2_MJPEG_NBUFFERS, ZR2_MJPEG_NBUFFERS);
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
314 uninit();
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
315 return 1;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
316 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
317
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
318 VERBOSE("got %ld buffers of size %ld (wanted %d buffers of size %d)\n",
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
319 p->zrq.count, p->zrq.size, ZR2_MJPEG_NBUFFERS,
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
320 ZR2_MJPEG_SIZE);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
321
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
322 p->buf = (unsigned char*)mmap(0, p->zrq.count*p->zrq.size,
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
323 PROT_READ|PROT_WRITE, MAP_SHARED, p->vdes, 0);
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
324
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
325 if (p->buf == MAP_FAILED) {
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
326 ERROR("error mapping requested buffers: %s", strerror(errno));
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
327 uninit();
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
328 return 1;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
329 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
330
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
331 return 0;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
332 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
333
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
334 static int config(uint32_t width, uint32_t height, uint32_t d_width,
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
335 uint32_t d_height, uint32_t flags, char *title, uint32_t format) {
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
336 int fields = 1, top_first = 1, err = 0;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
337 int stretchx = 1, stretchy = 1;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
338 struct mjpeg_params zptmp;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
339 vo_zr2_priv_t *p = &priv;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
340 VERBOSE("config() called\n");
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
341
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
342 /* paranoia check */
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
343 if (!query_format(format)) {
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
344 ERROR("called with wrong format, should be impossible\n");
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
345 return 1;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
346 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
347
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
348 if ((int)height > p->vc.maxheight) {
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
349 ERROR("input height %d is too large, maxheight=%d\n",
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
350 height, p->vc.maxheight);
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
351 err = 1;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
352 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
353
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
354 if (format != IMGFMT_ZRMJPEGNI) {
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
355 fields = 2;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
356 if (format == IMGFMT_ZRMJPEGIB)
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
357 top_first = 0;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
358 } else if ((int)height > p->vc.maxheight/2) {
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
359 ERROR("input is too high (%d) for non-interlaced playback"
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
360 "max=%d\n", height, p->vc.maxheight);
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
361 err = 1;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
362 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
363
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
364 if (width%16 != 0) {
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
365 ERROR("input width=%d, must be multiple of 16\n", width);
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
366 err = 1;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
367 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
368
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
369 if (height%(fields*8) != 0) {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
370 ERROR("input height=%d, must be multiple of %d\n",
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
371 height, 2*fields);
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
372 err = 1;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
373 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
374
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
375 /* we assume sample_aspect = 1 */
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
376 if (fields == 1) {
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
377 if (2*d_width <= (uint32_t)p->vc.maxwidth) {
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
378 VERBOSE("stretching x direction to preserve aspect\n");
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
379 d_width *= 2;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
380 } else VERBOSE("unable to preserve aspect, screen width "
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
381 "too small\n");
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
382 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
383
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
384 if (d_width == width) stretchx = 1;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
385 else if (d_width == 2*width) stretchx = 2;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
386 #if 0 /* do minimal stretching for now */
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
387 else if (d_width == 4*width) stretchx = 4;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
388 else WARNING("d_width must be {1,2,4}*width, using defaults\n");
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
389
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
390 if (d_height == height) stretchy = 1;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
391 else if (d_height == 2*height) stretchy = 2;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
392 else if (d_height == 4*height) stretchy = 4;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
393 else WARNING("d_height must be {1,2,4}*height, using defaults\n");
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
394 #endif
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
395
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
396 if (stretchx*width > (uint32_t)p->vc.maxwidth) {
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
397 ERROR("movie to be played is too wide, width=%d>maxwidth=%d\n",
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
398 width*stretchx, p->vc.maxwidth);
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
399 err = 1;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
400 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
401
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
402 if (stretchy*height > (uint32_t)p->vc.maxheight) {
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
403 ERROR("movie to be played is too heigh, height=%d>maxheight"
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
404 "=%d\n", height*stretchy, p->vc.maxheight);
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
405 err = 1;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
406 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
407
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
408 if (err == 1) return 1;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
409
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
410 /* some video files (eg. concatenated MPEG files), make MPlayer
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
411 * call config() during playback while no parameters have changed.
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
412 * We make configuration changes to a temporary params structure,
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
413 * compare it with the old params structure and only apply the new
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
414 * config if it is different from the old one. */
23458
973e53dc7df5 Do not use fast_memcpy for small size copy, esp. when the size is constant
reimar
parents: 23457
diff changeset
415 memcpy(&zptmp, &p->zp, sizeof(zptmp));
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
416
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
417 /* translate the configuration to zoran understandable format */
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
418 zptmp.decimation = 0;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
419 zptmp.HorDcm = stretchx;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
420 zptmp.VerDcm = stretchy;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
421 zptmp.TmpDcm = 1;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
422 zptmp.field_per_buff = fields;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
423 zptmp.odd_even = top_first;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
424
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
425 /* center the image on screen */
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
426 zptmp.img_x = (p->vc.maxwidth - width*stretchx)/2;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
427 zptmp.img_y = (p->vc.maxheight - height*stretchy*(3-fields))/4;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
428
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
429 zptmp.img_width = stretchx*width;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
430 zptmp.img_height = stretchy*height/fields;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
431
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
432 VERBOSE("tv: %dx%d, out: %dx%d+%d+%d, in: %ux%u %s%s%s\n",
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
433 p->vc.maxwidth, p->vc.maxheight,
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
434 zptmp.img_width, 2*zptmp.img_height,
11660
a55d0c2d72b5 message fix
rik
parents: 11417
diff changeset
435 zptmp.img_x, 2*zptmp.img_y,
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
436 width, height, (fields == 1) ? "non-interlaced" : "",
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
437 (fields == 2 && top_first == 1)
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
438 ? "interlaced top first" : "",
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
439 (fields == 2 && top_first == 0)
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
440 ? "interlaced bottom first" : "");
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
441
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
442 if (memcmp(&zptmp, &p->zp, sizeof(zptmp))) {
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
443 /* config differs, we must update */
23458
973e53dc7df5 Do not use fast_memcpy for small size copy, esp. when the size is constant
reimar
parents: 23457
diff changeset
444 memcpy(&p->zp, &zptmp, sizeof(zptmp));
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
445 stop_playing(p);
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
446 if (ioctl(p->vdes, MJPIOC_S_PARAMS, &p->zp) < 0) {
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
447 ERROR("error writing display params to card\n");
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
448 return 1;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
449 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
450 VERBOSE("successfully written display parameters to card\n");
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
451 } else VERBOSE("config didn't change, no need to write it to card\n");
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
452
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
453 return 0;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
454 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
455
33305
ddb45e9443ec Remove the variable arguments from the libvo control() functions.
iive
parents: 30122
diff changeset
456 static int control(uint32_t request, void *data) {
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
457 switch (request) {
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
458 case VOCTRL_QUERY_FORMAT:
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
459 return query_format(*((uint32_t*)data));
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
460 case VOCTRL_DRAW_IMAGE:
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
461 return draw_image(data);
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
462 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
463 return VO_NOTIMPL;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
464 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
465
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
466 static void draw_osd(void) {
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
467 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
468
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
469 static void flip_page(void) {
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
470 vo_zr2_priv_t *p = &priv;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
471 /* queueing the buffer for playback */
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
472 /* queueing the first buffer automatically starts playback */
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
473 if (p->playing == 0) p->playing = 1;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
474 if (ioctl(p->vdes, MJPIOC_QBUF_PLAY, &p->frame) < 0)
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
475 ERROR("error queueing buffer for playback\n");
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
476 else p->queue++;
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
477 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
478
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
479 static void check_events(void) {
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
480 }
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
481
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
482 static void uninit(void) {
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
483 vo_zr2_priv_t *p = &priv;
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
484 VERBOSE("uninit() called (may be called from preinit() on error)\n");
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
485
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
486 stop_playing(p);
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
487
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28922
diff changeset
488 if (p->buf && munmap(p->buf, p->zrq.size*p->zrq.count))
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
489 ERROR("error munmapping buffer: %s\n", strerror(errno));
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
490
11416
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
491 if (p->vdes >= 0) close(p->vdes);
af8c66f215cf added subdevice options, SECAM support (for what's it worth...), added \n to some verbose messages, tended to compiler warnings (signed/unsigned comparison)
rik
parents: 11390
diff changeset
492 free(p->subdevice);
11390
32eb3dfe44c9 new zoran driver as discussed on the CVS list. Hardware passthrough is
rik
parents:
diff changeset
493 }