Mercurial > mplayer.hg
annotate vidix/vidix.c @ 35394:7bad316da87a
stream ftp: Pass full buffer size to snprintf
Previously the buffer size was always passed as one less than
the underlying buffer's size. This is not using the underlying
buffer to its full potential according to the C99 standard. The
last byte of the buffers were never used.
No vulnerabilities should have been caused by this mistake because
the strings stored in the buffers were zero terminated at all
times. Neither were out-of-array writes nor reads possible.
author | al |
---|---|
date | Mon, 26 Nov 2012 23:36:00 +0000 |
parents | 142003cb43c7 |
children | 945eab072c9d |
rev | line source |
---|---|
3991 | 1 /* |
23046
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
2 * VIDIX - VIDeo Interface for *niX. |
26718
051b2632f121
consistency cosmetics: Move some parts of file headers around; typo fixes.
diego
parents:
26203
diff
changeset
|
3 * |
051b2632f121
consistency cosmetics: Move some parts of file headers around; typo fixes.
diego
parents:
26203
diff
changeset
|
4 * This interface is introduced as universal one to MPEG decoder, |
051b2632f121
consistency cosmetics: Move some parts of file headers around; typo fixes.
diego
parents:
26203
diff
changeset
|
5 * Back End Scaler (BES) and YUV2RGB hw accelerators. |
051b2632f121
consistency cosmetics: Move some parts of file headers around; typo fixes.
diego
parents:
26203
diff
changeset
|
6 * |
051b2632f121
consistency cosmetics: Move some parts of file headers around; typo fixes.
diego
parents:
26203
diff
changeset
|
7 * In the future it may be expanded up to capturing and audio things. |
051b2632f121
consistency cosmetics: Move some parts of file headers around; typo fixes.
diego
parents:
26203
diff
changeset
|
8 * Main goal of this this interface imlpementation is providing DGA |
051b2632f121
consistency cosmetics: Move some parts of file headers around; typo fixes.
diego
parents:
26203
diff
changeset
|
9 * everywhere where it's possible (unlike X11 and other). |
051b2632f121
consistency cosmetics: Move some parts of file headers around; typo fixes.
diego
parents:
26203
diff
changeset
|
10 * |
051b2632f121
consistency cosmetics: Move some parts of file headers around; typo fixes.
diego
parents:
26203
diff
changeset
|
11 * This interface is based on v4l2, fbvid.h, mga_vid.h projects |
051b2632f121
consistency cosmetics: Move some parts of file headers around; typo fixes.
diego
parents:
26203
diff
changeset
|
12 * and personally my ideas. |
051b2632f121
consistency cosmetics: Move some parts of file headers around; typo fixes.
diego
parents:
26203
diff
changeset
|
13 * |
051b2632f121
consistency cosmetics: Move some parts of file headers around; typo fixes.
diego
parents:
26203
diff
changeset
|
14 * NOTE: This interface is introduced as driver interface. |
051b2632f121
consistency cosmetics: Move some parts of file headers around; typo fixes.
diego
parents:
26203
diff
changeset
|
15 * |
23046
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
16 * Copyright (C) 2002 Nick Kurshev |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
17 * Copyright (C) 2007 Benjamin Zores <ben@geexbox.org> |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
18 * |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
19 * This file is part of MPlayer. |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
20 * |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
21 * MPlayer is free software; you can redistribute it and/or modify |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
22 * it under the terms of the GNU General Public License as published by |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
23 * the Free Software Foundation; either version 2 of the License, or |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
24 * (at your option) any later version. |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
25 * |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
26 * MPlayer is distributed in the hope that it will be useful, |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
27 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
28 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
29 * GNU General Public License for more details. |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
30 * |
26726
a1c020529cc0
Use standard license header with standard formatting.
diego
parents:
26718
diff
changeset
|
31 * You should have received a copy of the GNU General Public License along |
a1c020529cc0
Use standard license header with standard formatting.
diego
parents:
26718
diff
changeset
|
32 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
a1c020529cc0
Use standard license header with standard formatting.
diego
parents:
26718
diff
changeset
|
33 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
23046
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
34 */ |
82216ef041e0
updated vidix files headers whenever it's possible to have a clear GPL statement
ben
parents:
22905
diff
changeset
|
35 |
3991 | 36 #include <stdlib.h> |
37 #include <stdio.h> | |
38 #include <errno.h> | |
39 #include <string.h> | |
40 | |
26203 | 41 #include "config.h" |
27079 | 42 #include "vidix.h" |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
43 #include "drivers.h" |
22905 | 44 #include "libavutil/common.h" |
45 #include "mpbswap.h" | |
3991 | 46 |
27084 | 47 VDXContext *vdlOpen(const char *name,unsigned cap,int verbose) |
3991 | 48 { |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
49 VDXContext *ctx; |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
50 |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
51 if (!(ctx = malloc (sizeof (VDXContext)))) |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
52 return NULL; |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
53 memset (ctx, 0, sizeof (VDXContext)); |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
54 |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
55 /* register all drivers */ |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
56 vidix_register_all_drivers (); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27087
diff
changeset
|
57 |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
58 if (!vidix_find_driver (ctx, name, cap, verbose)) |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
59 { |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
60 free (ctx); |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
61 return NULL; |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
62 } |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
63 |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
64 if (verbose) |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
65 printf ("vidixlib: will use %s driver\n", ctx->drv->name); |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
66 |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
67 if (!ctx->drv || !ctx->drv->init) |
3991 | 68 { |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
69 if (verbose) |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
70 printf ("vidixlib: Can't init driver\n"); |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
71 free (ctx); |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
72 return NULL; |
3991 | 73 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27087
diff
changeset
|
74 |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
75 if (verbose) |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
76 printf ("vidixlib: Attempt to initialize driver at: %p\n", |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
77 ctx->drv->init); |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
78 |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
79 if (ctx->drv->init () !=0) |
4011 | 80 { |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
81 if (verbose) |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
82 printf ("vidixlib: Can't init driver\n"); |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
83 free (ctx); |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
84 return NULL; |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
85 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27087
diff
changeset
|
86 |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
87 if (verbose) |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
88 printf("vidixlib: '%s'successfully loaded\n", ctx->drv->name); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27087
diff
changeset
|
89 |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
90 return ctx; |
3991 | 91 } |
92 | |
27084 | 93 void vdlClose(VDXContext *ctx) |
3991 | 94 { |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
95 if (ctx->drv->destroy) |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
96 ctx->drv->destroy (); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27087
diff
changeset
|
97 |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
98 memset (ctx, 0, sizeof (VDXContext)); /* <- it's not stupid */ |
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
99 free (ctx); |
3991 | 100 } |
101 | |
27084 | 102 int vdlGetCapability(VDXContext *ctx, vidix_capability_t *cap) |
3991 | 103 { |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
104 return ctx->drv->get_caps (cap); |
3991 | 105 } |
106 | |
4539 | 107 #define MPLAYER_IMGFMT_RGB (('R'<<24)|('G'<<16)|('B'<<8)) |
108 #define MPLAYER_IMGFMT_BGR (('B'<<24)|('G'<<16)|('R'<<8)) | |
109 #define MPLAYER_IMGFMT_RGB_MASK 0xFFFFFF00 | |
110 | |
27083 | 111 static uint32_t normalize_fourcc (uint32_t fourcc) |
4539 | 112 { |
113 if((fourcc & MPLAYER_IMGFMT_RGB_MASK) == (MPLAYER_IMGFMT_RGB|0) || | |
114 (fourcc & MPLAYER_IMGFMT_RGB_MASK) == (MPLAYER_IMGFMT_BGR|0)) | |
115 return bswap_32(fourcc); | |
27081 | 116 return fourcc; |
4539 | 117 } |
118 | |
27087 | 119 int vdlQueryFourcc (VDXContext *ctx, vidix_fourcc_t *f) |
3991 | 120 { |
4547 | 121 f->fourcc = normalize_fourcc(f->fourcc); |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
122 return ctx->drv->query_fourcc (f); |
3991 | 123 } |
124 | |
27084 | 125 int vdlConfigPlayback (VDXContext *ctx, vidix_playback_t *p) |
3991 | 126 { |
4547 | 127 p->fourcc = normalize_fourcc(p->fourcc); |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
128 return ctx->drv->config_playback (p); |
3991 | 129 } |
130 | |
27084 | 131 int vdlPlaybackOn (VDXContext *ctx) |
3991 | 132 { |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
133 return ctx->drv->playback_on (); |
3991 | 134 } |
135 | |
27084 | 136 int vdlPlaybackOff (VDXContext *ctx) |
3991 | 137 { |
22857
77def5093daf
switch to new internal vidix API, no more dlopen/dlsym, libvidix is now a fully static library with all drivers built-in
ben
parents:
21507
diff
changeset
|
138 return ctx->drv->playback_off (); |
3991 | 139 } |
140 | |
27084 | 141 int vdlPlaybackFrameSelect (VDXContext *ctx, unsigned frame_idx) |
3991 | 142 { |
22885 | 143 return ctx->drv->frame_sel ? ctx->drv->frame_sel (frame_idx) : ENOSYS; |
3991 | 144 } |
145 | |
27084 | 146 int vdlPlaybackGetEq (VDXContext *ctx, vidix_video_eq_t *e) |
3991 | 147 { |
22885 | 148 return ctx->drv->get_eq ? ctx->drv->get_eq (e) : ENOSYS; |
3991 | 149 } |
150 | |
27084 | 151 int vdlPlaybackSetEq (VDXContext *ctx, const vidix_video_eq_t *e) |
3991 | 152 { |
22885 | 153 return ctx->drv->set_eq ? ctx->drv->set_eq (e) : ENOSYS; |
3991 | 154 } |
155 | |
27084 | 156 int vdlGetGrKeys (VDXContext *ctx, vidix_grkey_t *k) |
4070
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4011
diff
changeset
|
157 { |
22885 | 158 return ctx->drv->get_gkey ? ctx->drv->get_gkey (k) : ENOSYS; |
4070
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4011
diff
changeset
|
159 } |
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4011
diff
changeset
|
160 |
27084 | 161 int vdlSetGrKeys (VDXContext *ctx, const vidix_grkey_t *k) |
4070
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4011
diff
changeset
|
162 { |
22885 | 163 return ctx->drv->set_gkey ? ctx->drv->set_gkey (k) : ENOSYS; |
4070
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4011
diff
changeset
|
164 } |
4191 | 165 |
27084 | 166 int vdlPlaybackGetDeint (VDXContext *ctx, vidix_deinterlace_t *d) |
4191 | 167 { |
22885 | 168 return ctx->drv->get_deint ? ctx->drv->get_deint (d) : ENOSYS; |
4191 | 169 } |
170 | |
27084 | 171 int vdlPlaybackSetDeint (VDXContext *ctx, const vidix_deinterlace_t *d) |
4191 | 172 { |
22885 | 173 return ctx->drv->set_deint ? ctx->drv->set_deint (d) : ENOSYS; |
4191 | 174 } |