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;
|