1 |
/******************************************************************************* |
/******************************************************************************* |
2 |
* This file is a example for how to use the xvid core to compress YUV file |
* This file is a example for how to use the xvid core to compress YUV file |
3 |
* |
* |
4 |
* |
* 0.01b 28.05.2002 chenm001<chenm001@163.com> |
5 |
|
* fix a little bug for encode only codec I frame |
6 |
|
* 0.01a 27.05.2002 chenm001<chenm001@163.com> |
7 |
|
* fix a little bug for BFRAMES define locate |
8 |
* 0.01 23.05.2002 chenm001<chenm001@163.com> |
* 0.01 23.05.2002 chenm001<chenm001@163.com> |
9 |
* the BFRAME option must be match to core compile option |
* the BFRAME option must be match to core compile option |
10 |
*******************************************************************************/ |
*******************************************************************************/ |
11 |
|
|
|
#include "ex1.h" |
|
12 |
#define BFRAMES |
#define BFRAMES |
13 |
|
#include "ex1.h" |
14 |
|
|
15 |
int Encode(char *, int, int, char *); |
int Encode(char *, int, int, char *); |
16 |
int Decode(char *, int, int, char *); |
int Decode(char *, int, int, char *); |
55 |
param->max_quantizer = 31; |
param->max_quantizer = 31; |
56 |
param->max_key_interval = 100; |
param->max_key_interval = 100; |
57 |
|
|
58 |
|
#ifdef BFRAMES |
59 |
param->max_bframes = 0; // Disable B-frame |
param->max_bframes = 0; // Disable B-frame |
60 |
|
#endif |
61 |
} |
} |
62 |
|
|
63 |
void set_enc_frame(XVID_ENC_FRAME *frame) |
void set_enc_frame(XVID_ENC_FRAME *frame) |
72 |
frame->colorspace = XVID_CSP_YV12; // the test.yuv format is YV12 |
frame->colorspace = XVID_CSP_YV12; // the test.yuv format is YV12 |
73 |
frame->quant = 0; // CBR mode |
frame->quant = 0; // CBR mode |
74 |
|
|
|
frame->general = 0; |
|
75 |
frame->general |= XVID_MPEGQUANT; // Use MPEG quant |
frame->general |= XVID_MPEGQUANT; // Use MPEG quant |
76 |
frame->quant_inter_matrix = NULL; // Use default quant matrix |
frame->quant_inter_matrix = NULL; // Use default quant matrix |
77 |
frame->quant_intra_matrix = NULL; |
frame->quant_intra_matrix = NULL; |
120 |
// Encode Frame |
// Encode Frame |
121 |
temp=fread(inBuf, 1, width*height*3/2, fpi); // Read YUV data |
temp=fread(inBuf, 1, width*height*3/2, fpi); // Read YUV data |
122 |
while(temp == width*height*3/2){ |
while(temp == width*height*3/2){ |
123 |
|
//printf("Frames=%d\n",num); |
124 |
set_enc_frame(&frame); |
set_enc_frame(&frame); |
125 |
if (!(num%param.max_key_interval)) |
if (!(num%param.max_key_interval)) |
126 |
frame.intra = 1; // Encode as I-frame |
frame.intra = 1; // Encode as I-frame |
129 |
xvid_encore(param.handle, XVID_ENC_ENCODE, &frame, &stats); |
xvid_encore(param.handle, XVID_ENC_ENCODE, &frame, &stats); |
130 |
fwrite(outBuf, 1, frame.length, fpo); |
fwrite(outBuf, 1, frame.length, fpo); |
131 |
temp=fread(inBuf, 1, width*height*3/2, fpi); // Read next YUV data |
temp=fread(inBuf, 1, width*height*3/2, fpi); // Read next YUV data |
132 |
|
num++; |
133 |
} |
} |
134 |
|
|
135 |
// Free Encode Core |
// Free Encode Core |