Mercurial > mplayer.hg
annotate cinepak.c @ 4911:6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
to working), reworked YUY2 support for speed, cleaned up compiler
warnings, replaced printf()'s with mp_msg()'s
author | melanson |
---|---|
date | Sat, 02 Mar 2002 06:40:26 +0000 |
parents | f5f854541977 |
children | a41e0440edfb |
rev | line source |
---|---|
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
1 /* ------------------------------------------------------------------------ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
2 * Radius Cinepak Video Decoder |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
3 * |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
4 * Dr. Tim Ferguson, 2001. |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
5 * For more details on the algorithm: |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
6 * http://www.csse.monash.edu.au/~timf/videocodec.html |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
7 * |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
8 * This is basically a vector quantiser with adaptive vector density. The |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
9 * frame is segmented into 4x4 pixel blocks, and each block is coded using |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
10 * either 1 or 4 vectors. |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
11 * |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
12 * There are still some issues with this code yet to be resolved. In |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
13 * particular with decoding in the strip boundaries. |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
14 * ------------------------------------------------------------------------ */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
15 #include <stdio.h> |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
16 #include <stdlib.h> |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
17 #include <string.h> |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
18 #include <sys/types.h> |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
19 #include <unistd.h> |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
20 #include <math.h> |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
21 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
22 #include "config.h" |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
23 #include "mp_msg.h" |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
24 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
25 #define DBUG 0 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
26 #define MAX_STRIPS 32 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
27 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
28 /* ------------------------------------------------------------------------ */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
29 typedef struct |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
30 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
31 unsigned char y0, y1, y2, y3; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
32 char u, v; |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
33 |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
34 // These variables are for YV12 output: The v1 vars are for |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
35 // when the vector is doublesized and used by itself to paint a |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
36 // 4x4 block. |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
37 // This quad (y0 y0 y1 y1) is used on the 2 upper rows. |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
38 unsigned long yv12_v1_u; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
39 // This quad (y2 y2 y3 y3) is used on the 2 lower rows. |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
40 unsigned long yv12_v1_l; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
41 // The v4 vars are for when the vector is used as 1 of 4 vectors |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
42 // to paint a 4x4 block. |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
43 // Upper pair (y0 y1): |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
44 unsigned short yv12_v4_u; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
45 // Lower pair (y2 y3): |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
46 unsigned short yv12_v4_l; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
47 |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
48 // These longs are for YUYV output: The v1 vars are for when the |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
49 // vector is doublesized and used by itself to paint a 4x4 block. |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
50 // The names stand for the upper-left, upper-right, |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
51 // lower-left, and lower-right YUYV pixel pairs. |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
52 unsigned long yuyv_v1_ul, yuyv_v1_ur; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
53 unsigned long yuyv_v1_ll, yuyv_v1_lr; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
54 // The v4 vars are for when the vector is used as 1 of 4 vectors |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
55 // to paint a 4x4 block. The names stand for upper and lower |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
56 // YUYV pixel pairs. |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
57 unsigned long yuyv_v4_u, yuyv_v4_l; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
58 |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
59 // These longs are for BGR32 output |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
60 unsigned long rgb0, rgb1, rgb2, rgb3; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
61 |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
62 // These char arrays are for BGR24 output |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
63 unsigned char r[4], g[4], b[4]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
64 } cvid_codebook; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
65 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
66 typedef struct { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
67 cvid_codebook *v4_codebook[MAX_STRIPS]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
68 cvid_codebook *v1_codebook[MAX_STRIPS]; |
4628
1504901deed8
Fixed FILM demuxer so that it now plays (my) FILM files
melanson
parents:
4076
diff
changeset
|
69 unsigned long strip_num; |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
70 } cinepak_info; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
71 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
72 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
73 /* ------------------------------------------------------------------------ */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
74 static unsigned char *in_buffer, uiclip[1024], *uiclp = NULL; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
75 |
4076
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
76 #define SCALEBITS 16 |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
77 #define ONE_HALF ((long) 1 << (SCALEBITS-1)) |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
78 #define FIX(x) ((long) ((x) * (1L<<SCALEBITS) + 0.5)) |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
79 static long CU_Y_tab[256], CV_Y_tab[256], CU_Cb_tab[256], CV_Cb_tab[256], |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
80 CU_Cr_tab[256], CV_Cr_tab[256]; |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
81 |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
82 #define get_byte() *(in_buffer++) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
83 #define skip_byte() in_buffer++ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
84 #define get_word() ((unsigned short)(in_buffer += 2, \ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
85 (in_buffer[-2] << 8 | in_buffer[-1]))) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
86 #define get_long() ((unsigned long)(in_buffer += 4, \ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
87 (in_buffer[-4] << 24 | in_buffer[-3] << 16 | in_buffer[-2] << 8 | in_buffer[-1]))) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
88 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
89 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
90 /* ---------------------------------------------------------------------- */ |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
91 |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
92 #define PACK_YV12_V1_Y(cb,y0,y1) ((((unsigned char)cb->y1)<<24)|(cb->y1<<16)|(((unsigned char)cb->y0)<<8)|(cb->y0)) |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
93 #define PACK_YV12_V4_Y(cb,y0,y1) ((((unsigned char)cb->y1)<<8)|(cb->y0)) |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
94 |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
95 static inline void read_codebook_yv12(cvid_codebook *c, int mode) |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
96 { |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
97 unsigned char y0, y1, y2, y3, u, v; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
98 int y_uv; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
99 |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
100 if(mode) /* black and white */ |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
101 { |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
102 c->y0 = get_byte(); |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
103 c->y1 = get_byte(); |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
104 c->y2 = get_byte(); |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
105 c->y3 = get_byte(); |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
106 c->u = c->v = 128; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
107 } |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
108 else /* colour */ |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
109 { |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
110 y0 = get_byte(); /* luma */ |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
111 y1 = get_byte(); |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
112 y2 = get_byte(); |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
113 y3 = get_byte(); |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
114 u = 128+get_byte(); /* chroma */ |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
115 v = 128+get_byte(); |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
116 |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
117 /* YUV * inv(CinYUV) |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
118 * | Y | | 1 -0.0655 0.0110 | | CY | |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
119 * | Cb | = | 0 1.1656 -0.0062 | | CU | |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
120 * | Cr | | 0 0.0467 1.4187 | | CV | |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
121 */ |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
122 y_uv = (int)((CU_Y_tab[u] + CV_Y_tab[v]) >> SCALEBITS); |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
123 c->y0 = uiclp[y0 + y_uv]; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
124 c->y1 = uiclp[y1 + y_uv]; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
125 c->y2 = uiclp[y2 + y_uv]; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
126 c->y3 = uiclp[y3 + y_uv]; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
127 c->u = uiclp[(int)((CU_Cb_tab[u] + CV_Cb_tab[v]) >> SCALEBITS)]; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
128 c->v = uiclp[(int)((CU_Cr_tab[u] + CV_Cr_tab[v]) >> SCALEBITS)]; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
129 |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
130 c->yv12_v1_u = PACK_YV12_V1_Y(c, y0, y1); |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
131 c->yv12_v1_l = PACK_YV12_V1_Y(c, y2, y3); |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
132 c->yv12_v4_u = PACK_YV12_V4_Y(c, y0, y1); |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
133 c->yv12_v4_l = PACK_YV12_V4_Y(c, y2, y3); |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
134 } |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
135 } |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
136 |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
137 /* ---------------------------------------------------------------------- */ |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
138 |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
139 static unsigned char *yv12_y_plane = NULL; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
140 static unsigned char *yv12_v_plane = NULL; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
141 static unsigned char *yv12_u_plane = NULL; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
142 |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
143 inline void cvid_v1_yv12(unsigned char *frm, unsigned char *end, int stride, cvid_codebook *cb) |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
144 { |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
145 int uv_offset = (frm - yv12_y_plane) / 4; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
146 int row_inc = stride / sizeof(unsigned long); |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
147 unsigned long *y_ptr = (unsigned long *)frm; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
148 unsigned char *v_ptr = yv12_v_plane + uv_offset; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
149 unsigned char *u_ptr = yv12_u_plane + uv_offset; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
150 int uv_stride = stride / 2; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
151 |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
152 // take care of the luminance |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
153 if(y_ptr > (unsigned long *)end) return; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
154 *y_ptr = cb->yv12_v1_u; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
155 y_ptr += row_inc; if(y_ptr > (unsigned long *)end) return; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
156 *y_ptr = cb->yv12_v1_u; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
157 y_ptr += row_inc; if(y_ptr > (unsigned long *)end) return; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
158 *y_ptr = cb->yv12_v1_l; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
159 y_ptr += row_inc; if(y_ptr > (unsigned long *)end) return; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
160 *y_ptr = cb->yv12_v1_l; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
161 |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
162 // now for the chrominance |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
163 v_ptr[0] = cb->v; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
164 v_ptr[1] = cb->v; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
165 v_ptr += uv_stride; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
166 v_ptr[0] = cb->v; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
167 v_ptr[1] = cb->v; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
168 |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
169 u_ptr[0] = cb->u; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
170 u_ptr[1] = cb->u; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
171 u_ptr += uv_stride; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
172 u_ptr[0] = cb->u; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
173 u_ptr[1] = cb->u; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
174 } |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
175 |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
176 /* ---------------------------------------------------------------------- */ |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
177 inline void cvid_v4_yv12(unsigned char *frm, unsigned char *end, int stride, cvid_codebook *cb0, |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
178 cvid_codebook *cb1, cvid_codebook *cb2, cvid_codebook *cb3) |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
179 { |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
180 int uv_offset = (frm - yv12_y_plane) / 4; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
181 int row_inc = stride / sizeof(unsigned short); |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
182 unsigned short *y_ptr = (unsigned short *)frm; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
183 unsigned char *v_ptr = yv12_v_plane + uv_offset; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
184 unsigned char *u_ptr = yv12_u_plane + uv_offset; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
185 int uv_stride = stride / 2; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
186 |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
187 // take care of the luminance |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
188 if(y_ptr > (unsigned short *)end) return; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
189 y_ptr[0] = cb0->yv12_v4_u; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
190 y_ptr[1] = cb1->yv12_v4_u; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
191 y_ptr += row_inc; if(y_ptr > (unsigned short *)end) return; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
192 y_ptr[0] = cb0->yv12_v4_l; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
193 y_ptr[1] = cb1->yv12_v4_l; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
194 y_ptr += row_inc; if(y_ptr > (unsigned short *)end) return; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
195 y_ptr[0] = cb2->yv12_v4_u; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
196 y_ptr[1] = cb3->yv12_v4_u; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
197 y_ptr += row_inc; if(y_ptr > (unsigned short *)end) return; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
198 y_ptr[0] = cb2->yv12_v4_l; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
199 y_ptr[1] = cb3->yv12_v4_l; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
200 |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
201 // now for the chrominance |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
202 v_ptr[0] = cb0->v; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
203 v_ptr[1] = cb1->v; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
204 v_ptr += uv_stride; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
205 v_ptr[0] = cb2->v; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
206 v_ptr[1] = cb3->v; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
207 |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
208 u_ptr[0] = cb0->u; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
209 u_ptr[1] = cb1->u; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
210 u_ptr += uv_stride; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
211 u_ptr[0] = cb2->u; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
212 u_ptr[1] = cb3->u; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
213 } |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
214 |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
215 /* ---------------------------------------------------------------------- */ |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
216 |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
217 #define PACK_YUYV(cb,y0,y1,u,v) ((((unsigned char)cb->v)<<24)|(cb->y1<<16)|(((unsigned char)cb->u)<<8)|(cb->y0)) |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
218 |
3646 | 219 static inline void read_codebook_yuy2(cvid_codebook *c, int mode) |
220 { | |
4076
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
221 unsigned char y0, y1, y2, y3, u, v; |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
222 int y_uv; |
3646 | 223 |
224 if(mode) /* black and white */ | |
225 { | |
226 c->y0 = get_byte(); | |
227 c->y1 = get_byte(); | |
228 c->y2 = get_byte(); | |
229 c->y3 = get_byte(); | |
230 c->u = c->v = 128; | |
231 } | |
232 else /* colour */ | |
233 { | |
4076
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
234 y0 = get_byte(); /* luma */ |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
235 y1 = get_byte(); |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
236 y2 = get_byte(); |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
237 y3 = get_byte(); |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
238 u = 128+get_byte(); /* chroma */ |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
239 v = 128+get_byte(); |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
240 |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
241 /* YUV * inv(CinYUV) |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
242 * | Y | | 1 -0.0655 0.0110 | | CY | |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
243 * | Cb | = | 0 1.1656 -0.0062 | | CU | |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
244 * | Cr | | 0 0.0467 1.4187 | | CV | |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
245 */ |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
246 y_uv = (int)((CU_Y_tab[u] + CV_Y_tab[v]) >> SCALEBITS); |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
247 c->y0 = uiclp[y0 + y_uv]; |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
248 c->y1 = uiclp[y1 + y_uv]; |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
249 c->y2 = uiclp[y2 + y_uv]; |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
250 c->y3 = uiclp[y3 + y_uv]; |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
251 c->u = uiclp[(int)((CU_Cb_tab[u] + CV_Cb_tab[v]) >> SCALEBITS)]; |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
252 c->v = uiclp[(int)((CU_Cr_tab[u] + CV_Cr_tab[v]) >> SCALEBITS)]; |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
253 |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
254 c->yuyv_v4_u = PACK_YUYV(c, y0, y1, u, v); |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
255 c->yuyv_v4_l = PACK_YUYV(c, y2, y3, u, v); |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
256 c->yuyv_v1_ul = PACK_YUYV(c, y0, y0, u, v); |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
257 c->yuyv_v1_ur = PACK_YUYV(c, y1, y1, u, v); |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
258 c->yuyv_v1_ll = PACK_YUYV(c, y2, y2, u, v); |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
259 c->yuyv_v1_lr = PACK_YUYV(c, y3, y3, u, v); |
3646 | 260 } |
261 } | |
262 | |
263 /* ------------------------------------------------------------------------ */ | |
264 inline void cvid_v1_yuy2(unsigned char *frm, unsigned char *end, int stride, cvid_codebook *cb) | |
265 { | |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
266 unsigned long *vptr = (unsigned long *)frm; |
3646 | 267 int row_inc = stride/4; |
268 | |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
269 if(vptr > (unsigned long *)end) return; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
270 vptr[0] = cb->yuyv_v1_ul; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
271 vptr[1] = cb->yuyv_v1_ur; |
3646 | 272 |
273 vptr += row_inc; if(vptr > (unsigned long *)end) return; | |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
274 vptr[0] = cb->yuyv_v1_ul; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
275 vptr[1] = cb->yuyv_v1_ur; |
3646 | 276 |
277 vptr += row_inc; if(vptr > (unsigned long *)end) return; | |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
278 vptr[0] = cb->yuyv_v1_ll; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
279 vptr[1] = cb->yuyv_v1_lr; |
3646 | 280 |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
281 vptr += row_inc; if(vptr > (unsigned long *)end) return; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
282 vptr[0] = cb->yuyv_v1_ll; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
283 vptr[1] = cb->yuyv_v1_lr; |
3646 | 284 } |
285 | |
286 | |
287 /* ------------------------------------------------------------------------ */ | |
288 inline void cvid_v4_yuy2(unsigned char *frm, unsigned char *end, int stride, cvid_codebook *cb0, | |
289 cvid_codebook *cb1, cvid_codebook *cb2, cvid_codebook *cb3) | |
290 { | |
291 unsigned long *vptr = (unsigned long *)frm; | |
292 int row_inc = stride/4; | |
293 | |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
294 if(vptr > (unsigned long *)end) return; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
295 vptr[0] = cb0->yuyv_v4_u; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
296 vptr[1] = cb1->yuyv_v4_u; |
3646 | 297 |
298 vptr += row_inc; if(vptr > (unsigned long *)end) return; | |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
299 vptr[0] = cb0->yuyv_v4_l; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
300 vptr[1] = cb1->yuyv_v4_l; |
3646 | 301 |
302 vptr += row_inc; if(vptr > (unsigned long *)end) return; | |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
303 vptr[0] = cb2->yuyv_v4_u; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
304 vptr[1] = cb3->yuyv_v4_u; |
3646 | 305 |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
306 vptr += row_inc; if(vptr > (unsigned long *)end) return; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
307 vptr[0] = cb2->yuyv_v4_l; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
308 vptr[1] = cb3->yuyv_v4_l; |
3646 | 309 } |
310 | |
311 | |
312 /* ---------------------------------------------------------------------- */ | |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
313 static inline void read_codebook_32(cvid_codebook *c, int mode) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
314 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
315 int uvr, uvg, uvb; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
316 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
317 if(mode) /* black and white */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
318 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
319 c->y0 = get_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
320 c->y1 = get_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
321 c->y2 = get_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
322 c->y3 = get_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
323 c->u = c->v = 0; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
324 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
325 c->rgb0 = (c->y0 << 16) | (c->y0 << 8) | c->y0; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
326 c->rgb1 = (c->y1 << 16) | (c->y1 << 8) | c->y1; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
327 c->rgb2 = (c->y2 << 16) | (c->y2 << 8) | c->y2; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
328 c->rgb3 = (c->y3 << 16) | (c->y3 << 8) | c->y3; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
329 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
330 else /* colour */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
331 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
332 c->y0 = get_byte(); /* luma */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
333 c->y1 = get_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
334 c->y2 = get_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
335 c->y3 = get_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
336 c->u = get_byte(); /* chroma */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
337 c->v = get_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
338 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
339 uvr = c->v << 1; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
340 uvg = -((c->u+1) >> 1) - c->v; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
341 uvb = c->u << 1; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
342 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
343 c->rgb0 = (uiclp[c->y0 + uvr] << 16) | (uiclp[c->y0 + uvg] << 8) | uiclp[c->y0 + uvb]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
344 c->rgb1 = (uiclp[c->y1 + uvr] << 16) | (uiclp[c->y1 + uvg] << 8) | uiclp[c->y1 + uvb]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
345 c->rgb2 = (uiclp[c->y2 + uvr] << 16) | (uiclp[c->y2 + uvg] << 8) | uiclp[c->y2 + uvb]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
346 c->rgb3 = (uiclp[c->y3 + uvr] << 16) | (uiclp[c->y3 + uvg] << 8) | uiclp[c->y3 + uvb]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
347 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
348 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
349 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
350 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
351 /* ------------------------------------------------------------------------ */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
352 inline void cvid_v1_32(unsigned char *frm, unsigned char *end, int stride, cvid_codebook *cb) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
353 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
354 unsigned long *vptr = (unsigned long *)frm, rgb; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
355 int row_inc = stride/4; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
356 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
357 vptr[0] = rgb = cb->rgb0; vptr[1] = rgb; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
358 vptr[2] = rgb = cb->rgb1; vptr[3] = rgb; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
359 vptr += row_inc; if(vptr > (unsigned long *)end) return; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
360 vptr[0] = rgb = cb->rgb0; vptr[1] = rgb; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
361 vptr[2] = rgb = cb->rgb1; vptr[3] = rgb; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
362 vptr += row_inc; if(vptr > (unsigned long *)end) return; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
363 vptr[0] = rgb = cb->rgb2; vptr[1] = rgb; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
364 vptr[2] = rgb = cb->rgb3; vptr[3] = rgb; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
365 vptr += row_inc; if(vptr > (unsigned long *)end) return; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
366 vptr[0] = rgb = cb->rgb2; vptr[1] = rgb; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
367 vptr[2] = rgb = cb->rgb3; vptr[3] = rgb; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
368 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
369 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
370 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
371 /* ------------------------------------------------------------------------ */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
372 inline void cvid_v4_32(unsigned char *frm, unsigned char *end, int stride, cvid_codebook *cb0, |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
373 cvid_codebook *cb1, cvid_codebook *cb2, cvid_codebook *cb3) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
374 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
375 unsigned long *vptr = (unsigned long *)frm; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
376 int row_inc = stride/4; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
377 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
378 vptr[0] = cb0->rgb0; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
379 vptr[1] = cb0->rgb1; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
380 vptr[2] = cb1->rgb0; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
381 vptr[3] = cb1->rgb1; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
382 vptr += row_inc; if(vptr > (unsigned long *)end) return; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
383 vptr[0] = cb0->rgb2; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
384 vptr[1] = cb0->rgb3; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
385 vptr[2] = cb1->rgb2; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
386 vptr[3] = cb1->rgb3; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
387 vptr += row_inc; if(vptr > (unsigned long *)end) return; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
388 vptr[0] = cb2->rgb0; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
389 vptr[1] = cb2->rgb1; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
390 vptr[2] = cb3->rgb0; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
391 vptr[3] = cb3->rgb1; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
392 vptr += row_inc; if(vptr > (unsigned long *)end) return; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
393 vptr[0] = cb2->rgb2; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
394 vptr[1] = cb2->rgb3; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
395 vptr[2] = cb3->rgb2; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
396 vptr[3] = cb3->rgb3; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
397 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
398 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
399 |
3646 | 400 |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
401 /* ---------------------------------------------------------------------- */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
402 static inline void read_codebook_24(cvid_codebook *c, int mode) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
403 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
404 int uvr, uvg, uvb; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
405 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
406 if(mode) /* black and white */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
407 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
408 c->y0 = get_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
409 c->y1 = get_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
410 c->y2 = get_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
411 c->y3 = get_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
412 c->u = c->v = 0; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
413 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
414 c->r[0] = c->g[0] = c->b[0] = c->y0; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
415 c->r[1] = c->g[1] = c->b[1] = c->y1; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
416 c->r[2] = c->g[2] = c->b[2] = c->y2; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
417 c->r[3] = c->g[3] = c->b[3] = c->y3; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
418 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
419 else /* colour */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
420 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
421 c->y0 = get_byte(); /* luma */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
422 c->y1 = get_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
423 c->y2 = get_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
424 c->y3 = get_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
425 c->u = get_byte(); /* chroma */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
426 c->v = get_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
427 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
428 uvr = c->v << 1; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
429 uvg = -((c->u+1) >> 1) - c->v; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
430 uvb = c->u << 1; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
431 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
432 c->r[0] = uiclp[c->y0 + uvr]; c->g[0] = uiclp[c->y0 + uvg]; c->b[0] = uiclp[c->y0 + uvb]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
433 c->r[1] = uiclp[c->y1 + uvr]; c->g[1] = uiclp[c->y1 + uvg]; c->b[1] = uiclp[c->y1 + uvb]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
434 c->r[2] = uiclp[c->y2 + uvr]; c->g[2] = uiclp[c->y2 + uvg]; c->b[2] = uiclp[c->y2 + uvb]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
435 c->r[3] = uiclp[c->y3 + uvr]; c->g[3] = uiclp[c->y3 + uvg]; c->b[3] = uiclp[c->y3 + uvb]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
436 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
437 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
438 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
439 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
440 /* ------------------------------------------------------------------------ */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
441 void cvid_v1_24(unsigned char *vptr, unsigned char *end, int stride, cvid_codebook *cb) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
442 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
443 unsigned char r, g, b; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
444 int row_inc = stride-4*3; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
445 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
446 *vptr++ = b = cb->b[0]; *vptr++ = g = cb->g[0]; *vptr++ = r = cb->r[0]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
447 *vptr++ = b; *vptr++ = g; *vptr++ = r; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
448 *vptr++ = b = cb->b[1]; *vptr++ = g = cb->g[1]; *vptr++ = r = cb->r[1]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
449 *vptr++ = b; *vptr++ = g; *vptr++ = r; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
450 vptr += row_inc; if(vptr > end) return; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
451 *vptr++ = b = cb->b[0]; *vptr++ = g = cb->g[0]; *vptr++ = r = cb->r[0]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
452 *vptr++ = b; *vptr++ = g; *vptr++ = r; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
453 *vptr++ = b = cb->b[1]; *vptr++ = g = cb->g[1]; *vptr++ = r = cb->r[1]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
454 *vptr++ = b; *vptr++ = g; *vptr++ = r; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
455 vptr += row_inc; if(vptr > end) return; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
456 *vptr++ = b = cb->b[2]; *vptr++ = g = cb->g[2]; *vptr++ = r = cb->r[2]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
457 *vptr++ = b; *vptr++ = g; *vptr++ = r; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
458 *vptr++ = b = cb->b[3]; *vptr++ = g = cb->g[3]; *vptr++ = r = cb->r[3]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
459 *vptr++ = b; *vptr++ = g; *vptr++ = r; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
460 vptr += row_inc; if(vptr > end) return; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
461 *vptr++ = b = cb->b[2]; *vptr++ = g = cb->g[2]; *vptr++ = r = cb->r[2]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
462 *vptr++ = b; *vptr++ = g; *vptr++ = r; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
463 *vptr++ = b = cb->b[3]; *vptr++ = g = cb->g[3]; *vptr++ = r = cb->r[3]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
464 *vptr++ = b; *vptr++ = g; *vptr++ = r; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
465 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
466 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
467 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
468 /* ------------------------------------------------------------------------ */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
469 void cvid_v4_24(unsigned char *vptr, unsigned char *end, int stride, cvid_codebook *cb0, |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
470 cvid_codebook *cb1, cvid_codebook *cb2, cvid_codebook *cb3) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
471 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
472 int row_inc = stride-4*3; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
473 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
474 *vptr++ = cb0->b[0]; *vptr++ = cb0->g[0]; *vptr++ = cb0->r[0]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
475 *vptr++ = cb0->b[1]; *vptr++ = cb0->g[1]; *vptr++ = cb0->r[1]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
476 *vptr++ = cb1->b[0]; *vptr++ = cb1->g[0]; *vptr++ = cb1->r[0]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
477 *vptr++ = cb1->b[1]; *vptr++ = cb1->g[1]; *vptr++ = cb1->r[1]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
478 vptr += row_inc; if(vptr > end) return; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
479 *vptr++ = cb0->b[2]; *vptr++ = cb0->g[2]; *vptr++ = cb0->r[2]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
480 *vptr++ = cb0->b[3]; *vptr++ = cb0->g[3]; *vptr++ = cb0->r[3]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
481 *vptr++ = cb1->b[2]; *vptr++ = cb1->g[2]; *vptr++ = cb1->r[2]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
482 *vptr++ = cb1->b[3]; *vptr++ = cb1->g[3]; *vptr++ = cb1->r[3]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
483 vptr += row_inc; if(vptr > end) return; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
484 *vptr++ = cb2->b[0]; *vptr++ = cb2->g[0]; *vptr++ = cb2->r[0]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
485 *vptr++ = cb2->b[1]; *vptr++ = cb2->g[1]; *vptr++ = cb2->r[1]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
486 *vptr++ = cb3->b[0]; *vptr++ = cb3->g[0]; *vptr++ = cb3->r[0]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
487 *vptr++ = cb3->b[1]; *vptr++ = cb3->g[1]; *vptr++ = cb3->r[1]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
488 vptr += row_inc; if(vptr > end) return; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
489 *vptr++ = cb2->b[2]; *vptr++ = cb2->g[2]; *vptr++ = cb2->r[2]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
490 *vptr++ = cb2->b[3]; *vptr++ = cb2->g[3]; *vptr++ = cb2->r[3]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
491 *vptr++ = cb3->b[2]; *vptr++ = cb3->g[2]; *vptr++ = cb3->r[2]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
492 *vptr++ = cb3->b[3]; *vptr++ = cb3->g[3]; *vptr++ = cb3->r[3]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
493 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
494 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
495 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
496 /* ------------------------------------------------------------------------ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
497 * Call this function once at the start of the sequence and save the |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
498 * returned context for calls to decode_cinepak(). |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
499 */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
500 void *decode_cinepak_init(void) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
501 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
502 cinepak_info *cvinfo; |
4076
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
503 int i, x; |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
504 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
505 if((cvinfo = calloc(sizeof(cinepak_info), 1)) == NULL) return NULL; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
506 cvinfo->strip_num = 0; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
507 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
508 if(uiclp == NULL) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
509 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
510 uiclp = uiclip+512; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
511 for(i = -512; i < 512; i++) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
512 uiclp[i] = (i < 0 ? 0 : (i > 255 ? 255 : i)); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
513 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
514 |
4076
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
515 for(i = 0, x = -128; i < 256; i++, x++) |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
516 { |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
517 CU_Y_tab[i] = (-FIX(0.0655)) * x; |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
518 CV_Y_tab[i] = (FIX(0.0110)) * x + ONE_HALF; |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
519 CU_Cb_tab[i] = (FIX(1.1656)) * x; |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
520 CV_Cb_tab[i] = (-FIX(0.0062)) * x + ONE_HALF + FIX(128); |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
521 CU_Cr_tab[i] = (FIX(0.0467)) * x; |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
522 CV_Cr_tab[i] = (FIX(1.4187)) * x + ONE_HALF + FIX(128); |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
523 } |
47b9d8d3f3c5
committed Tim Ferguson's patch for proper YUV color space conversion
melanson
parents:
3646
diff
changeset
|
524 |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
525 return (void *)cvinfo; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
526 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
527 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
528 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
529 /* ------------------------------------------------------------------------ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
530 * This function decodes a buffer containing a Cinepak encoded frame. |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
531 * |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
532 * context - the context created by decode_cinepak_init(). |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
533 * buf - the input buffer to be decoded |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
534 * size - the size of the input buffer |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
535 * frame - the output frame buffer |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
536 * width - the width of the output frame |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
537 * height - the height of the output frame |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
538 * bit_per_pixel - the number of bits per pixel allocated to the output |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
539 * frame; depths support: |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
540 * 32: BGR32 |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
541 * 24: BGR24 |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
542 * 16: YUYV |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
543 * 12: YV12 |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
544 */ |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
545 void decode_cinepak(void *context, unsigned char *buf, int size, unsigned char *frame, unsigned int width, unsigned int height, int bit_per_pixel, int stride_) |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
546 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
547 cinepak_info *cvinfo = (cinepak_info *)context; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
548 cvid_codebook *v4_codebook, *v1_codebook, *codebook = NULL; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
549 unsigned long x, y, y_bottom, frame_flags, strips, cv_width, cv_height, cnum, |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
550 strip_id, chunk_id, x0, y0, x1, y1, ci, flag, mask; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
551 long len, top_size, chunk_size; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
552 unsigned char *frm_ptr, *frm_end; |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
553 unsigned int i, cur_strip, d0, d1, d2, d3, frm_stride, bpp = 3; |
4628
1504901deed8
Fixed FILM demuxer so that it now plays (my) FILM files
melanson
parents:
4076
diff
changeset
|
554 int modulo; |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
555 void (*read_codebook)(cvid_codebook *c, int mode) = read_codebook_24; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
556 void (*cvid_v1)(unsigned char *frm, unsigned char *end, int stride, cvid_codebook *cb) = cvid_v1_24; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
557 void (*cvid_v4)(unsigned char *frm, unsigned char *end, int stride, cvid_codebook *cb0, |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
558 cvid_codebook *cb1, cvid_codebook *cb2, cvid_codebook *cb3) = cvid_v4_24; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
559 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
560 x = y = 0; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
561 y_bottom = 0; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
562 in_buffer = buf; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
563 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
564 frame_flags = get_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
565 len = get_byte() << 16; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
566 len |= get_byte() << 8; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
567 len |= get_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
568 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
569 switch(bit_per_pixel) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
570 { |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
571 case 12: // YV12 |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
572 bpp = 1; // for the purposes of stride |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
573 read_codebook = read_codebook_yv12; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
574 cvid_v1 = cvid_v1_yv12; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
575 cvid_v4 = cvid_v4_yv12; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
576 yv12_y_plane = frame; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
577 yv12_v_plane = frame + width * height; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
578 yv12_u_plane = frame + (width * height) + |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
579 (width * height / 4); |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
580 break; |
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
581 case 16: // YUYV |
3646 | 582 bpp = 2; |
583 read_codebook = read_codebook_yuy2; | |
584 cvid_v1 = cvid_v1_yuy2; | |
585 cvid_v4 = cvid_v4_yuy2; | |
586 break; | |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
587 case 24: // BGR24 |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
588 bpp = 3; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
589 read_codebook = read_codebook_24; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
590 cvid_v1 = cvid_v1_24; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
591 cvid_v4 = cvid_v4_24; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
592 break; |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
593 case 32: // BGR32 |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
594 bpp = 4; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
595 read_codebook = read_codebook_32; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
596 cvid_v1 = cvid_v1_32; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
597 cvid_v4 = cvid_v4_32; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
598 break; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
599 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
600 |
4881 | 601 frm_stride = stride_ ? stride_ : width * bpp; |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
602 frm_ptr = frame; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
603 frm_end = frm_ptr + width * height * bpp; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
604 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
605 if(len != size) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
606 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
607 if(len & 0x01) len++; /* AVIs tend to have a size mismatch */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
608 if(len != size) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
609 { |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
610 mp_msg(MSGT_DECVIDEO, MSGL_WARN, "CVID: corruption %d (QT/AVI) != %ld (CV)\n", size, len); |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
611 // return; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
612 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
613 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
614 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
615 cv_width = get_word(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
616 cv_height = get_word(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
617 strips = get_word(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
618 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
619 if(strips > cvinfo->strip_num) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
620 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
621 if(strips >= MAX_STRIPS) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
622 { |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
623 mp_msg(MSGT_DECVIDEO, MSGL_WARN, "CVID: strip overflow (more than %d)\n", MAX_STRIPS); |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
624 return; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
625 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
626 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
627 for(i = cvinfo->strip_num; i < strips; i++) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
628 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
629 if((cvinfo->v4_codebook[i] = (cvid_codebook *)calloc(sizeof(cvid_codebook), 260)) == NULL) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
630 { |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
631 mp_msg(MSGT_DECVIDEO, MSGL_WARN, "CVID: codebook v4 alloc err\n"); |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
632 return; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
633 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
634 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
635 if((cvinfo->v1_codebook[i] = (cvid_codebook *)calloc(sizeof(cvid_codebook), 260)) == NULL) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
636 { |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
637 mp_msg(MSGT_DECVIDEO, MSGL_WARN, "CVID: codebook v1 alloc err\n"); |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
638 return; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
639 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
640 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
641 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
642 cvinfo->strip_num = strips; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
643 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
644 #if DBUG |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
645 mp_msg(MSGT_DECVIDEO, MSGL_WARN, "CVID: <%ld,%ld> strips %ld\n", cv_width, cv_height, strips); |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
646 #endif |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
647 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
648 for(cur_strip = 0; cur_strip < strips; cur_strip++) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
649 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
650 v4_codebook = cvinfo->v4_codebook[cur_strip]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
651 v1_codebook = cvinfo->v1_codebook[cur_strip]; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
652 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
653 if((cur_strip > 0) && (!(frame_flags & 0x01))) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
654 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
655 memcpy(cvinfo->v4_codebook[cur_strip], cvinfo->v4_codebook[cur_strip-1], 260 * sizeof(cvid_codebook)); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
656 memcpy(cvinfo->v1_codebook[cur_strip], cvinfo->v1_codebook[cur_strip-1], 260 * sizeof(cvid_codebook)); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
657 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
658 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
659 strip_id = get_word(); /* 1000 = key strip, 1100 = iter strip */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
660 top_size = get_word(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
661 y0 = get_word(); /* FIXME: most of these are ignored at the moment */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
662 x0 = get_word(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
663 y1 = get_word(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
664 x1 = get_word(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
665 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
666 y_bottom += y1; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
667 top_size -= 12; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
668 x = 0; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
669 if(x1 != width) |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
670 mp_msg(MSGT_DECVIDEO, MSGL_WARN, "CVID: Warning x1 (%ld) != width (%d)\n", x1, width); |
4628
1504901deed8
Fixed FILM demuxer so that it now plays (my) FILM files
melanson
parents:
4076
diff
changeset
|
671 x1 = width; |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
672 #if DBUG |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
673 mp_msg(MSGT_DECVIDEO, MSGL_WARN, " %d) %04lx %04ld <%ld,%ld> <%ld,%ld> yt %ld %d\n", |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
674 cur_strip, strip_id, top_size, x0, y0, x1, y1, y_bottom); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
675 #endif |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
676 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
677 while(top_size > 0) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
678 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
679 chunk_id = get_word(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
680 chunk_size = get_word(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
681 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
682 #if DBUG |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
683 mp_msg(MSGT_DECVIDEO, MSGL_WARN, " %04lx %04ld\n", chunk_id, chunk_size); |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
684 #endif |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
685 top_size -= chunk_size; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
686 chunk_size -= 4; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
687 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
688 switch(chunk_id) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
689 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
690 /* -------------------- Codebook Entries -------------------- */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
691 case 0x2000: |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
692 case 0x2200: |
4628
1504901deed8
Fixed FILM demuxer so that it now plays (my) FILM files
melanson
parents:
4076
diff
changeset
|
693 modulo = chunk_size % 6; |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
694 codebook = (chunk_id == 0x2200 ? v1_codebook : v4_codebook); |
4628
1504901deed8
Fixed FILM demuxer so that it now plays (my) FILM files
melanson
parents:
4076
diff
changeset
|
695 cnum = (chunk_size - modulo) / 6; |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
696 for(i = 0; i < cnum; i++) read_codebook(codebook+i, 0); |
4628
1504901deed8
Fixed FILM demuxer so that it now plays (my) FILM files
melanson
parents:
4076
diff
changeset
|
697 while (modulo--) |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
698 in_buffer++; |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
699 break; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
700 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
701 case 0x2400: |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
702 case 0x2600: /* 8 bit per pixel */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
703 codebook = (chunk_id == 0x2600 ? v1_codebook : v4_codebook); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
704 cnum = chunk_size/4; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
705 for(i = 0; i < cnum; i++) read_codebook(codebook+i, 1); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
706 break; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
707 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
708 case 0x2100: |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
709 case 0x2300: |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
710 codebook = (chunk_id == 0x2300 ? v1_codebook : v4_codebook); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
711 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
712 ci = 0; |
4628
1504901deed8
Fixed FILM demuxer so that it now plays (my) FILM files
melanson
parents:
4076
diff
changeset
|
713 while(chunk_size > 3) |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
714 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
715 flag = get_long(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
716 chunk_size -= 4; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
717 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
718 for(i = 0; i < 32; i++) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
719 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
720 if(flag & 0x80000000) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
721 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
722 chunk_size -= 6; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
723 read_codebook(codebook+ci, 0); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
724 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
725 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
726 ci++; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
727 flag <<= 1; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
728 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
729 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
730 while(chunk_size > 0) { skip_byte(); chunk_size--; } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
731 break; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
732 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
733 case 0x2500: |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
734 case 0x2700: /* 8 bit per pixel */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
735 codebook = (chunk_id == 0x2700 ? v1_codebook : v4_codebook); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
736 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
737 ci = 0; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
738 while(chunk_size > 0) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
739 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
740 flag = get_long(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
741 chunk_size -= 4; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
742 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
743 for(i = 0; i < 32; i++) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
744 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
745 if(flag & 0x80000000) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
746 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
747 chunk_size -= 4; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
748 read_codebook(codebook+ci, 1); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
749 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
750 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
751 ci++; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
752 flag <<= 1; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
753 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
754 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
755 while(chunk_size > 0) { skip_byte(); chunk_size--; } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
756 break; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
757 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
758 /* -------------------- Frame -------------------- */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
759 case 0x3000: |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
760 while((chunk_size > 0) && (y < y_bottom)) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
761 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
762 flag = get_long(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
763 chunk_size -= 4; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
764 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
765 for(i = 0; i < 32; i++) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
766 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
767 if(y >= y_bottom) break; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
768 if(flag & 0x80000000) /* 4 bytes per block */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
769 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
770 d0 = get_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
771 d1 = get_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
772 d2 = get_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
773 d3 = get_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
774 chunk_size -= 4; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
775 cvid_v4(frm_ptr + (y * frm_stride + x * bpp), frm_end, frm_stride, v4_codebook+d0, v4_codebook+d1, v4_codebook+d2, v4_codebook+d3); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
776 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
777 else /* 1 byte per block */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
778 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
779 cvid_v1(frm_ptr + (y * frm_stride + x * bpp), frm_end, frm_stride, v1_codebook + get_byte()); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
780 chunk_size--; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
781 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
782 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
783 x += 4; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
784 if(x >= width) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
785 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
786 x = 0; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
787 y += 4; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
788 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
789 flag <<= 1; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
790 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
791 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
792 while(chunk_size > 0) { skip_byte(); chunk_size--; } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
793 break; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
794 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
795 case 0x3100: |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
796 while((chunk_size > 0) && (y < y_bottom)) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
797 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
798 /* ---- flag bits: 0 = SKIP, 10 = V1, 11 = V4 ---- */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
799 flag = (unsigned long)get_long(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
800 chunk_size -= 4; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
801 mask = 0x80000000; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
802 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
803 while((mask) && (y < y_bottom)) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
804 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
805 if(flag & mask) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
806 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
807 if(mask == 1) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
808 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
809 if(chunk_size < 0) break; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
810 flag = (unsigned long)get_long(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
811 chunk_size -= 4; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
812 mask = 0x80000000; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
813 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
814 else mask >>= 1; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
815 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
816 if(flag & mask) /* V4 */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
817 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
818 d0 = get_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
819 d1 = get_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
820 d2 = get_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
821 d3 = get_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
822 chunk_size -= 4; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
823 cvid_v4(frm_ptr + (y * frm_stride + x * bpp), frm_end, frm_stride, v4_codebook+d0, v4_codebook+d1, v4_codebook+d2, v4_codebook+d3); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
824 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
825 else /* V1 */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
826 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
827 chunk_size--; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
828 cvid_v1(frm_ptr + (y * frm_stride + x * bpp), frm_end, frm_stride, v1_codebook + get_byte()); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
829 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
830 } /* else SKIP */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
831 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
832 mask >>= 1; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
833 x += 4; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
834 if(x >= width) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
835 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
836 x = 0; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
837 y += 4; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
838 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
839 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
840 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
841 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
842 while(chunk_size > 0) { skip_byte(); chunk_size--; } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
843 break; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
844 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
845 case 0x3200: /* each byte is a V1 codebook */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
846 while((chunk_size > 0) && (y < y_bottom)) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
847 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
848 cvid_v1(frm_ptr + (y * frm_stride + x * bpp), frm_end, frm_stride, v1_codebook + get_byte()); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
849 chunk_size--; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
850 x += 4; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
851 if(x >= width) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
852 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
853 x = 0; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
854 y += 4; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
855 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
856 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
857 while(chunk_size > 0) { skip_byte(); chunk_size--; } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
858 break; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
859 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
860 default: |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
861 mp_msg(MSGT_DECVIDEO, MSGL_WARN, "CVID: unknown chunk_id %08lx\n", chunk_id); |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
862 while(chunk_size > 0) { skip_byte(); chunk_size--; } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
863 break; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
864 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
865 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
866 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
867 |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
868 if(len != size) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
869 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
870 if(len & 0x01) len++; /* AVIs tend to have a size mismatch */ |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
871 if(len != size) |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
872 { |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
873 long xlen; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
874 skip_byte(); |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
875 xlen = get_byte() << 16; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
876 xlen |= get_byte() << 8; |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
877 xlen |= get_byte(); /* Read Len */ |
4911
6078b7894e20
Native Cinepak decoder: Added YV12 support (which is so very close
melanson
parents:
4881
diff
changeset
|
878 mp_msg(MSGT_DECVIDEO, MSGL_WARN, "CVID: END INFO chunk size %d cvid size1 %ld cvid size2 %ld\n", size, len, xlen); |
3643
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
879 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
880 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
881 } |
fb9fd7e2dd35
native opensourec Cinepak (CVID) codec by im Ferguson <timf@mail.csse.monash.edu.au>
arpi
parents:
diff
changeset
|
882 |