1 /*
2 * nv_stub.cc --
3 *
4 * FIXME: This file needs a description here.
5 *
6 * Copyright (c) 1996-2002 The Regents of the University of California.
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions are met:
11 *
12 * A. Redistributions of source code must retain the above copyright notice,
13 * this list of conditions and the following disclaimer.
14 * B. Redistributions in binary form must reproduce the above copyright notice,
15 * this list of conditions and the following disclaimer in the documentation
16 * and/or other materials provided with the distribution.
17 * C. Neither the names of the copyright holders nor the names of its
18 * contributors may be used to endorse or promote products derived from this
19 * software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
22 * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
23 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
25 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 * POSSIBILITY OF SUCH DAMAGE.
32 */
33
34 #include <sys/param.h>
35 #include <netinet/in.h>
36 #include "jpeg.h"
37
38 static YUVJpegDecoder* decoder;
39 extern void JVideoConfig(JpegDecoder::config& c, int w, int h, int q);
40
41 static DiffJpegDecoder* diffdecoder;
42
43 extern "C" {
44 #include "nv/video.h"
45
46 void jpeg_decode(vidimage_t *image, u_char *data, int len)
47 {
48 u_short *hdr = (u_short*)data;
49 int width = ntohs(hdr[0]);
50 int height = ntohs(hdr[1]);
51 int qFactor = ntohs(hdr[2]);
52 data += 8;
53 len -= 8;
54 if (decoder == 0) {
55 JpegDecoder::config config;
56 JVideoConfig(config, width, height, qFactor);
57 decoder = new YUVJpegDecoder(config);
58 }
59 /*FIXME hope there is room */
60 data[len++] = 0xff;
61 data[len++] = 0xd9; /* EOI */
62
63 decoder->decode(data, len);
64
65 u_short *syp = (u_short*)decoder->yplane();
66 u_char *sup = decoder->uplane();
67 u_char *svp = decoder->vplane();
68
69 u_short *yp = (u_short*)image->y_data;
70 u_char *uvp = (u_char*)image->uv_data;
71 for (len = width * height; len >= 0; len -= 2) {
72 *yp++ = *syp++;
73 *uvp++ = *sup++ - 128;
74 *uvp++ = *svp++ - 128;
75 }
76 VidImage_UpdateRect(image, 0, 0, width, height);
77 }
78
79 struct blkcache* init_jpegdiff(int w, int h, int q)
80 {
81 JpegDecoder::config config;
82 /*FIXME*/
83 JVideoConfig(config, w, h, q);
84 diffdecoder = new DiffJpegDecoder(config);
85 return (diffdecoder->dcts);
86 }
87
88 void jpeg_getdiff(u_char* in, int len, struct blkcache* bc, u_char* diffvector)
89 {
90 diffdecoder->decode(in, len, bc, diffvector);
91 }
92
93 }
94
This page was automatically generated by the
LXR engine.
Visit the LXR main site for more
information.