File: mpeg2enc.patch

package info (click to toggle)
vstream 0.4.5-2
  • links: PTS
  • area: main
  • in suites: woody
  • size: 216 kB
  • ctags: 812
  • sloc: ansic: 2,602; makefile: 72
file content (142 lines) | stat: -rw-r--r-- 4,197 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
diff -urN mpeg2enc_old/Makefile mpeg2enc/Makefile
--- mpeg2enc_old/Makefile	Fri Aug 28 19:07:01 1998
+++ mpeg2enc/Makefile	Sat Sep 19 22:22:37 1998
@@ -33,9 +33,9 @@
 # GNU gcc
 #
 CC = gcc
-CFLAGS = -O2 -Wall -g
+CFLAGS = -O6 -malign-double -mcpu=pentiumpro -malign-loops=5 -malign-functions=5 -malign-jumps=5 -Wall
 
-OBJ = mpeg2enc.o conform.o putseq.o putpic.o puthdr.o putmpg.o putvlc.o putbits.o motion.o predict.o readpic.o writepic.o transfrm.o fdctref.o idct.o quantize.o ratectl.o stats.o
+OBJ = /root/Vstream0.4.5/getframe.o mpeg2enc.o conform.o putseq.o putpic.o puthdr.o putmpg.o putvlc.o putbits.o motion.o predict.o readpic.o writepic.o transfrm.o fdctref.o idct.o quantize.o ratectl.o stats.o
 
 all: mpeg2encode
 
diff -urN mpeg2enc_old/readpic.c mpeg2enc/readpic.c
--- mpeg2enc_old/readpic.c	Sat Jul 20 00:49:30 1996
+++ mpeg2enc/readpic.c	Tue Sep  1 03:41:23 1998
@@ -36,6 +36,7 @@
 static void read_y_u_v _ANSI_ARGS_((char *fname, unsigned char *frame[]));
 static void read_yuv _ANSI_ARGS_((char *fname, unsigned char *frame[]));
 static void read_ppm _ANSI_ARGS_((char *fname, unsigned char *frame[]));
+static void read_stream _ANSI_ARGS_((char *fname, unsigned char *frame[]));
 static void border_extend _ANSI_ARGS_((unsigned char *frame, int w1, int h1,
   int w2, int h2));
 static void conv444to422 _ANSI_ARGS_((unsigned char *src, unsigned char *dst));
@@ -56,6 +57,9 @@
   case T_PPM:
     read_ppm(fname,frame);
     break;
+  case 3:
+    read_stream(fname,frame);
+    break;
   default:
     break;
   }
@@ -252,6 +256,105 @@
     conv422to420(v422,frame[2]);
   }
 }
+
+extern unsigned char *getframe(char *fname);
+
+static void read_stream(fname,frame)
+char *fname;
+unsigned char *frame[];
+{
+  int i, j, pix;
+  int r, g, b;
+  double y, u, v;
+  double cr, cg, cb, cu, cv;
+  unsigned char *yp, *up, *vp;
+  static unsigned char *u444, *v444, *u422, *v422;
+  static double coef[7][3] = {
+    {0.2125,0.7154,0.0721}, /* ITU-R Rec. 709 (1990) */
+    {0.299, 0.587, 0.114},  /* unspecified */
+    {0.299, 0.587, 0.114},  /* reserved */
+    {0.30,  0.59,  0.11},   /* FCC */
+    {0.299, 0.587, 0.114},  /* ITU-R Rec. 624-4 System B, G */
+    {0.299, 0.587, 0.114},  /* SMPTE 170M */
+    {0.212, 0.701, 0.087}}; /* SMPTE 240M (1987) */
+  unsigned char *sframe;
+
+  i = matrix_coefficients;
+  if (i>8)
+    i = 3;
+
+  cr = coef[i-1][0];
+  cg = coef[i-1][1];
+  cb = coef[i-1][2];
+  cu = 0.5/(1.0-cb);
+  cv = 0.5/(1.0-cr);
+
+  if (chroma_format==CHROMA444)
+  {
+    u444 = frame[1];
+    v444 = frame[2];
+  }
+  else
+  {
+    if (!u444)
+    {
+      if (!(u444 = (unsigned char *)malloc(width*height)))
+        error("malloc failed");
+      if (!(v444 = (unsigned char *)malloc(width*height)))
+        error("malloc failed");
+      if (chroma_format==CHROMA420)
+      {
+        if (!(u422 = (unsigned char *)malloc((width>>1)*height)))
+          error("malloc failed");
+        if (!(v422 = (unsigned char *)malloc((width>>1)*height)))
+          error("malloc failed");
+      }
+    }
+  }
+
+  sframe=getframe(fname);
+  pix=0;
+
+  for (i=0; i<vertical_size; i++)
+  {
+    yp = frame[0] + i*width;
+    up = u444 + i*width;
+    vp = v444 + i*width;
+
+    for (j=0; j<horizontal_size; j++)
+    {
+      r=sframe[pix++];
+      g=sframe[pix++];
+      b=sframe[pix++];
+      /* convert to YUV */
+      y = cr*r + cg*g + cb*b;
+      u = cu*(b-y);
+      v = cv*(r-y);
+      yp[j] = (219.0/256.0)*y + 16.5;  /* nominal range: 16..235 */
+      up[j] = (224.0/256.0)*u + 128.5; /* 16..240 */
+      vp[j] = (224.0/256.0)*v + 128.5; /* 16..240 */
+    }
+  }
+
+  border_extend(frame[0],horizontal_size,vertical_size,width,height);
+  border_extend(u444,horizontal_size,vertical_size,width,height);
+  border_extend(v444,horizontal_size,vertical_size,width,height);
+
+  if (chroma_format==CHROMA422)
+  {
+    conv444to422(u444,frame[1]);
+    conv444to422(v444,frame[2]);
+  }
+
+  if (chroma_format==CHROMA420)
+  {
+    conv444to422(u444,u422);
+    conv444to422(v444,v422);
+    conv422to420(u422,frame[1]);
+    conv422to420(v422,frame[2]);
+  }
+}
+
 
 static void border_extend(frame,w1,h1,w2,h2)
 unsigned char *frame;