annotate libxvidff.c @ 11560:8a4984c5cacc libavcodec

Define AVMediaType enum, and use it instead of enum CodecType, which is deprecated and will be dropped at the next major bump.
author stefano
date Tue, 30 Mar 2010 23:30:55 +0000
parents 965eca23972e
children 7dd2a45249a9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
1 /*
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
2 * Interface to xvidcore for mpeg4 encoding
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
3 * Copyright (c) 2004 Adam Thayer <krevnik@comcast.net>
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
4 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3343
diff changeset
5 * This file is part of FFmpeg.
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3343
diff changeset
6 *
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3343
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3343
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
11 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3343
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
15 * Lesser General Public License for more details.
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
16 *
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3343
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
3036
0b546eab515d Update licensing information: The FSF changed postal address.
diego
parents: 2967
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
20 */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
21
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
22 /**
8718
e9d9d946f213 Use full internal pathname in doxygen @file directives.
diego
parents: 8673
diff changeset
23 * @file libavcodec/libxvidff.c
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
24 * Interface to xvidcore for MPEG-4 compliant encoding.
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
25 * @author Adam Thayer (krevnik@comcast.net)
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
26 */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
27
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
28 #include <xvid.h>
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
29 #include <unistd.h>
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
30 #include "avcodec.h"
8613
e75610c5da69 Fix compilation with --enable-libxvid.
cehoyos
parents: 8612
diff changeset
31 #include "libavutil/intreadwrite.h"
5101
c3f2379b80db Give all wrappers for external libraries names starting with lib.
diego
parents: 4962
diff changeset
32 #include "libxvid_internal.h"
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
33
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
34 /**
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
35 * Buffer management macros.
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
36 */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
37 #define BUFFER_SIZE 1024
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
38 #define BUFFER_REMAINING(x) (BUFFER_SIZE - strlen(x))
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
39 #define BUFFER_CAT(x) (&((x)[strlen(x)]))
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
40
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
41 /* For PPC Use */
8250
cf4d575b1982 Delete unnecessary 'extern' keywords.
diego
parents: 7824
diff changeset
42 int has_altivec(void);
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
43
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
44 /**
6908
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
45 * Structure for the private Xvid context.
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
46 * This stores all the private context for the codec.
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
47 */
8315
7ccdcc976edd Do not invade _t POSIX namespace.
diego
parents: 8250
diff changeset
48 struct xvid_context {
6908
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
49 void *encoder_handle; /** Handle for Xvid encoder */
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
50 int xsize, ysize; /** Frame size */
6908
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
51 int vop_flags; /** VOP flags for Xvid encoder */
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
52 int vol_flags; /** VOL flags for Xvid encoder */
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
53 int me_flags; /** Motion Estimation flags */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
54 int qscale; /** Do we use constant scale? */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
55 int quicktime_format; /** Are we in a QT-based format? */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
56 AVFrame encoded_picture; /** Encoded frame information */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
57 char *twopassbuffer; /** Character buffer for two-pass */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
58 char *old_twopassbuffer; /** Old character buffer (two-pass) */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
59 char *twopassfile; /** second pass temp file name */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
60 unsigned char *intra_matrix; /** P-Frame Quant Matrix */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
61 unsigned char *inter_matrix; /** I-Frame Quant Matrix */
8315
7ccdcc976edd Do not invade _t POSIX namespace.
diego
parents: 8250
diff changeset
62 };
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
63
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
64 /**
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
65 * Structure for the private first-pass plugin.
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
66 */
8315
7ccdcc976edd Do not invade _t POSIX namespace.
diego
parents: 8250
diff changeset
67 struct xvid_ff_pass1 {
6908
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
68 int version; /** Xvid version */
8315
7ccdcc976edd Do not invade _t POSIX namespace.
diego
parents: 8250
diff changeset
69 struct xvid_context *context; /** Pointer to private context */
7ccdcc976edd Do not invade _t POSIX namespace.
diego
parents: 8250
diff changeset
70 };
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
71
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
72 /* Prototypes - See function implementation for details */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
73 int xvid_strip_vol_header(AVCodecContext *avctx, unsigned char *frame, unsigned int header_len, unsigned int frame_len);
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
74 int xvid_ff_2pass(void *ref, int opt, void *p1, void *p2);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
75 void xvid_correct_framerate(AVCodecContext *avctx);
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
76
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
77 /**
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
78 * Creates the private context for the encoder.
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
79 * All buffers are allocated, settings are loaded from the user,
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
80 * and the encoder context created.
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
81 *
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
82 * @param avctx AVCodecContext pointer to context
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
83 * @return Returns 0 on success, -1 on failure
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
84 */
11321
e0feb5fa4e97 Make the following functions static (and remove ff_), they are only used
cehoyos
parents: 10146
diff changeset
85 static av_cold int xvid_encode_init(AVCodecContext *avctx) {
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
86 int xerr, i;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
87 int xvid_flags = avctx->flags;
8315
7ccdcc976edd Do not invade _t POSIX namespace.
diego
parents: 8250
diff changeset
88 struct xvid_context *x = avctx->priv_data;
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
89 uint16_t *intra, *inter;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
90 int fd;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
91
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
92 xvid_plugin_single_t single;
8315
7ccdcc976edd Do not invade _t POSIX namespace.
diego
parents: 8250
diff changeset
93 struct xvid_ff_pass1 rc2pass1;
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
94 xvid_plugin_2pass2_t rc2pass2;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
95 xvid_gbl_init_t xvid_gbl_init;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
96 xvid_enc_create_t xvid_enc_create;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
97 xvid_enc_plugin_t plugins[7];
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
98
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
99 /* Bring in VOP flags from ffmpeg command-line */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
100 x->vop_flags = XVID_VOP_HALFPEL; /* Bare minimum quality */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
101 if( xvid_flags & CODEC_FLAG_4MV )
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
102 x->vop_flags |= XVID_VOP_INTER4V; /* Level 3 */
7034
130784da5595 uniformize trellis quant option
bcoudurier
parents: 6908
diff changeset
103 if( avctx->trellis
130784da5595 uniformize trellis quant option
bcoudurier
parents: 6908
diff changeset
104 )
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
105 x->vop_flags |= XVID_VOP_TRELLISQUANT; /* Level 5 */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
106 if( xvid_flags & CODEC_FLAG_AC_PRED )
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
107 x->vop_flags |= XVID_VOP_HQACPRED; /* Level 6 */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
108 if( xvid_flags & CODEC_FLAG_GRAY )
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
109 x->vop_flags |= XVID_VOP_GREYSCALE;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
110
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
111 /* Decide which ME quality setting to use */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
112 x->me_flags = 0;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
113 switch( avctx->me_method ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
114 case ME_FULL: /* Quality 6 */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
115 x->me_flags |= XVID_ME_EXTSEARCH16
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
116 | XVID_ME_EXTSEARCH8;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
117
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
118 case ME_EPZS: /* Quality 4 */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
119 x->me_flags |= XVID_ME_ADVANCEDDIAMOND8
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
120 | XVID_ME_HALFPELREFINE8
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
121 | XVID_ME_CHROMA_PVOP
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
122 | XVID_ME_CHROMA_BVOP;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
123
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
124 case ME_LOG: /* Quality 2 */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
125 case ME_PHODS:
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
126 case ME_X1:
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
127 x->me_flags |= XVID_ME_ADVANCEDDIAMOND16
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
128 | XVID_ME_HALFPELREFINE16;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
129
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
130 case ME_ZERO: /* Quality 0 */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
131 default:
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
132 break;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
133 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
134
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
135 /* Decide how we should decide blocks */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
136 switch( avctx->mb_decision ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
137 case 2:
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
138 x->vop_flags |= XVID_VOP_MODEDECISION_RD;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
139 x->me_flags |= XVID_ME_HALFPELREFINE8_RD
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
140 | XVID_ME_QUARTERPELREFINE8_RD
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
141 | XVID_ME_EXTSEARCH_RD
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
142 | XVID_ME_CHECKPREDICTION_RD;
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
143 case 1:
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
144 if( !(x->vop_flags & XVID_VOP_MODEDECISION_RD) )
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
145 x->vop_flags |= XVID_VOP_FAST_MODEDECISION_RD;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
146 x->me_flags |= XVID_ME_HALFPELREFINE16_RD
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
147 | XVID_ME_QUARTERPELREFINE16_RD;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
148
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
149 default:
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
150 break;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
151 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
152
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
153 /* Bring in VOL flags from ffmpeg command-line */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
154 x->vol_flags = 0;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
155 if( xvid_flags & CODEC_FLAG_GMC ) {
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
156 x->vol_flags |= XVID_VOL_GMC;
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
157 x->me_flags |= XVID_ME_GME_REFINE;
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
158 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
159 if( xvid_flags & CODEC_FLAG_QPEL ) {
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
160 x->vol_flags |= XVID_VOL_QUARTERPEL;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
161 x->me_flags |= XVID_ME_QUARTERPELREFINE16;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
162 if( x->vop_flags & XVID_VOP_INTER4V )
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
163 x->me_flags |= XVID_ME_QUARTERPELREFINE8;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
164 }
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
165
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
166 memset(&xvid_gbl_init, 0, sizeof(xvid_gbl_init));
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
167 xvid_gbl_init.version = XVID_VERSION;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
168 xvid_gbl_init.debug = 0;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
169
8590
7a463923ecd1 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 8496
diff changeset
170 #if ARCH_PPC
6908
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
171 /* Xvid's PPC support is borked, use libavcodec to detect */
8590
7a463923ecd1 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 8496
diff changeset
172 #if HAVE_ALTIVEC
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
173 if( has_altivec() ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
174 xvid_gbl_init.cpu_flags = XVID_CPU_FORCE | XVID_CPU_ALTIVEC;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
175 } else
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
176 #endif
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
177 xvid_gbl_init.cpu_flags = XVID_CPU_FORCE;
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
178 #else
6908
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
179 /* Xvid can detect on x86 */
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
180 xvid_gbl_init.cpu_flags = 0;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
181 #endif
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
182
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
183 /* Initialize */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
184 xvid_global(NULL, XVID_GBL_INIT, &xvid_gbl_init, NULL);
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
185
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
186 /* Create the encoder reference */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
187 memset(&xvid_enc_create, 0, sizeof(xvid_enc_create));
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
188 xvid_enc_create.version = XVID_VERSION;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
189
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
190 /* Store the desired frame size */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
191 xvid_enc_create.width = x->xsize = avctx->width;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
192 xvid_enc_create.height = x->ysize = avctx->height;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
193
6908
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
194 /* Xvid can determine the proper profile to use */
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
195 /* xvid_enc_create.profile = XVID_PROFILE_S_L3; */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
196
6665
c22932db0ebb Make Xvid wrapper use threads (with support for newest CVS Xvid only)
superdump
parents: 6517
diff changeset
197 /* We don't use zones */
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
198 xvid_enc_create.zones = NULL;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
199 xvid_enc_create.num_zones = 0;
6665
c22932db0ebb Make Xvid wrapper use threads (with support for newest CVS Xvid only)
superdump
parents: 6517
diff changeset
200
c22932db0ebb Make Xvid wrapper use threads (with support for newest CVS Xvid only)
superdump
parents: 6517
diff changeset
201 xvid_enc_create.num_threads = avctx->thread_count;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
202
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
203 xvid_enc_create.plugins = plugins;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
204 xvid_enc_create.num_plugins = 0;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
205
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
206 /* Initialize Buffers */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
207 x->twopassbuffer = NULL;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
208 x->old_twopassbuffer = NULL;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
209 x->twopassfile = NULL;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
210
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
211 if( xvid_flags & CODEC_FLAG_PASS1 ) {
8315
7ccdcc976edd Do not invade _t POSIX namespace.
diego
parents: 8250
diff changeset
212 memset(&rc2pass1, 0, sizeof(struct xvid_ff_pass1));
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
213 rc2pass1.version = XVID_VERSION;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
214 rc2pass1.context = x;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
215 x->twopassbuffer = av_malloc(BUFFER_SIZE);
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
216 x->old_twopassbuffer = av_malloc(BUFFER_SIZE);
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
217 if( x->twopassbuffer == NULL || x->old_twopassbuffer == NULL ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
218 av_log(avctx, AV_LOG_ERROR,
6908
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
219 "Xvid: Cannot allocate 2-pass log buffers\n");
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
220 return -1;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
221 }
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
222 x->twopassbuffer[0] = x->old_twopassbuffer[0] = 0;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
223
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
224 plugins[xvid_enc_create.num_plugins].func = xvid_ff_2pass;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
225 plugins[xvid_enc_create.num_plugins].param = &rc2pass1;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
226 xvid_enc_create.num_plugins++;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
227 } else if( xvid_flags & CODEC_FLAG_PASS2 ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
228 memset(&rc2pass2, 0, sizeof(xvid_plugin_2pass2_t));
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
229 rc2pass2.version = XVID_VERSION;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
230 rc2pass2.bitrate = avctx->bit_rate;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
231
3233
18af2f7788c6 - Add new file internal.h for common internal-use-only functions.
corey
parents: 3202
diff changeset
232 fd = av_tempfile("xvidff.", &(x->twopassfile));
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
233 if( fd == -1 ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
234 av_log(avctx, AV_LOG_ERROR,
6908
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
235 "Xvid: Cannot write 2-pass pipe\n");
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
236 return -1;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
237 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
238
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
239 if( avctx->stats_in == NULL ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
240 av_log(avctx, AV_LOG_ERROR,
6908
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
241 "Xvid: No 2-pass information loaded for second pass\n");
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
242 return -1;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
243 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
244
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
245 if( strlen(avctx->stats_in) >
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
246 write(fd, avctx->stats_in, strlen(avctx->stats_in)) ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
247 close(fd);
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
248 av_log(avctx, AV_LOG_ERROR,
6908
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
249 "Xvid: Cannot write to 2-pass pipe\n");
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
250 return -1;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
251 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
252
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
253 close(fd);
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
254 rc2pass2.filename = x->twopassfile;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
255 plugins[xvid_enc_create.num_plugins].func = xvid_plugin_2pass2;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
256 plugins[xvid_enc_create.num_plugins].param = &rc2pass2;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
257 xvid_enc_create.num_plugins++;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
258 } else if( !(xvid_flags & CODEC_FLAG_QSCALE) ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
259 /* Single Pass Bitrate Control! */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
260 memset(&single, 0, sizeof(xvid_plugin_single_t));
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
261 single.version = XVID_VERSION;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
262 single.bitrate = avctx->bit_rate;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
263
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
264 plugins[xvid_enc_create.num_plugins].func = xvid_plugin_single;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
265 plugins[xvid_enc_create.num_plugins].param = &single;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
266 xvid_enc_create.num_plugins++;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
267 }
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
268
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
269 /* Luminance Masking */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
270 if( 0.0 != avctx->lumi_masking ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
271 plugins[xvid_enc_create.num_plugins].func = xvid_plugin_lumimasking;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
272 plugins[xvid_enc_create.num_plugins].param = NULL;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
273 xvid_enc_create.num_plugins++;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
274 }
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
275
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
276 /* Frame Rate and Key Frames */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
277 xvid_correct_framerate(avctx);
2637
ef44d24680d1 switch to native time bases
michael
parents: 2574
diff changeset
278 xvid_enc_create.fincr = avctx->time_base.num;
ef44d24680d1 switch to native time bases
michael
parents: 2574
diff changeset
279 xvid_enc_create.fbase = avctx->time_base.den;
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
280 if( avctx->gop_size > 0 )
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
281 xvid_enc_create.max_key_interval = avctx->gop_size;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
282 else
6908
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
283 xvid_enc_create.max_key_interval = 240; /* Xvid's best default */
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
284
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
285 /* Quants */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
286 if( xvid_flags & CODEC_FLAG_QSCALE ) x->qscale = 1;
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
287 else x->qscale = 0;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
288
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
289 xvid_enc_create.min_quant[0] = avctx->qmin;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
290 xvid_enc_create.min_quant[1] = avctx->qmin;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
291 xvid_enc_create.min_quant[2] = avctx->qmin;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
292 xvid_enc_create.max_quant[0] = avctx->qmax;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
293 xvid_enc_create.max_quant[1] = avctx->qmax;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
294 xvid_enc_create.max_quant[2] = avctx->qmax;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
295
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
296 /* Quant Matrices */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
297 x->intra_matrix = x->inter_matrix = NULL;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
298 if( avctx->mpeg_quant )
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
299 x->vol_flags |= XVID_VOL_MPEGQUANT;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
300 if( (avctx->intra_matrix || avctx->inter_matrix) ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
301 x->vol_flags |= XVID_VOL_MPEGQUANT;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
302
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
303 if( avctx->intra_matrix ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
304 intra = avctx->intra_matrix;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
305 x->intra_matrix = av_malloc(sizeof(unsigned char) * 64);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
306 } else
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
307 intra = NULL;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
308 if( avctx->inter_matrix ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
309 inter = avctx->inter_matrix;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
310 x->inter_matrix = av_malloc(sizeof(unsigned char) * 64);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
311 } else
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
312 inter = NULL;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
313
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
314 for( i = 0; i < 64; i++ ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
315 if( intra )
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
316 x->intra_matrix[i] = (unsigned char)intra[i];
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
317 if( inter )
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
318 x->inter_matrix[i] = (unsigned char)inter[i];
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
319 }
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
320 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
321
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
322 /* Misc Settings */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
323 xvid_enc_create.frame_drop_ratio = 0;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
324 xvid_enc_create.global = 0;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
325 if( xvid_flags & CODEC_FLAG_CLOSED_GOP )
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
326 xvid_enc_create.global |= XVID_GLOBAL_CLOSED_GOP;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
327
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
328 /* Determines which codec mode we are operating in */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
329 avctx->extradata = NULL;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
330 avctx->extradata_size = 0;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
331 if( xvid_flags & CODEC_FLAG_GLOBAL_HEADER ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
332 /* In this case, we are claiming to be MPEG4 */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
333 x->quicktime_format = 1;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
334 avctx->codec_id = CODEC_ID_MPEG4;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
335 } else {
6908
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
336 /* We are claiming to be Xvid */
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
337 x->quicktime_format = 0;
4023
508f089d0b28 Have xvid encoder wrapper honnor -vtag option
gpoirier
parents: 4004
diff changeset
338 if(!avctx->codec_tag)
8612
b20c590170cc remove ff_get_fourcc() and use AV_RL32() instead
aurel
parents: 8611
diff changeset
339 avctx->codec_tag = AV_RL32("xvid");
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
340 }
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
341
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
342 /* Bframes */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
343 xvid_enc_create.max_bframes = avctx->max_b_frames;
3202
89348aaf566e fixing bquant_offset
michael
parents: 3036
diff changeset
344 xvid_enc_create.bquant_offset = 100 * avctx->b_quant_offset;
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
345 xvid_enc_create.bquant_ratio = 100 * avctx->b_quant_factor;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
346 if( avctx->max_b_frames > 0 && !x->quicktime_format ) xvid_enc_create.global |= XVID_GLOBAL_PACKED;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
347
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
348 /* Create encoder context */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
349 xerr = xvid_encore(NULL, XVID_ENC_CREATE, &xvid_enc_create, NULL);
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
350 if( xerr ) {
6908
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
351 av_log(avctx, AV_LOG_ERROR, "Xvid: Could not create encoder reference\n");
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
352 return -1;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
353 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
354
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
355 x->encoder_handle = xvid_enc_create.handle;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
356 avctx->coded_frame = &x->encoded_picture;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
357
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
358 return 0;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
359 }
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
360
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
361 /**
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
362 * Encodes a single frame.
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
363 *
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
364 * @param avctx AVCodecContext pointer to context
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
365 * @param frame Pointer to encoded frame buffer
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
366 * @param buf_size Size of encoded frame buffer
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
367 * @param data Pointer to AVFrame of unencoded frame
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
368 * @return Returns 0 on success, -1 on failure
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
369 */
11321
e0feb5fa4e97 Make the following functions static (and remove ff_), they are only used
cehoyos
parents: 10146
diff changeset
370 static int xvid_encode_frame(AVCodecContext *avctx,
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
371 unsigned char *frame, int buf_size, void *data) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
372 int xerr, i;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
373 char *tmp;
8315
7ccdcc976edd Do not invade _t POSIX namespace.
diego
parents: 8250
diff changeset
374 struct xvid_context *x = avctx->priv_data;
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
375 AVFrame *picture = data;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
376 AVFrame *p = &(x->encoded_picture);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
377
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
378 xvid_enc_frame_t xvid_enc_frame;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
379 xvid_enc_stats_t xvid_enc_stats;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
380
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
381 /* Start setting up the frame */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
382 memset(&xvid_enc_frame, 0, sizeof(xvid_enc_frame));
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
383 xvid_enc_frame.version = XVID_VERSION;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
384 memset(&xvid_enc_stats, 0, sizeof(xvid_enc_stats));
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
385 xvid_enc_stats.version = XVID_VERSION;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
386 *p = *picture;
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
387
6908
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
388 /* Let Xvid know where to put the frame. */
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
389 xvid_enc_frame.bitstream = frame;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
390 xvid_enc_frame.length = buf_size;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
391
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
392 /* Initialize input image fields */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
393 if( avctx->pix_fmt != PIX_FMT_YUV420P ) {
6908
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
394 av_log(avctx, AV_LOG_ERROR, "Xvid: Color spaces other than 420p not supported\n");
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
395 return -1;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
396 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
397
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
398 xvid_enc_frame.input.csp = XVID_CSP_PLANAR; /* YUV420P */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
399
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
400 for( i = 0; i < 4; i++ ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
401 xvid_enc_frame.input.plane[i] = picture->data[i];
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
402 xvid_enc_frame.input.stride[i] = picture->linesize[i];
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
403 }
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
404
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
405 /* Encoder Flags */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
406 xvid_enc_frame.vop_flags = x->vop_flags;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
407 xvid_enc_frame.vol_flags = x->vol_flags;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
408 xvid_enc_frame.motion = x->me_flags;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
409 xvid_enc_frame.type = XVID_TYPE_AUTO;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
410
6670
33d3c14d5a57 Set pixel aspect ratio for libxvid wrapper.
benoit
parents: 6665
diff changeset
411 /* Pixel aspect ratio setting */
33d3c14d5a57 Set pixel aspect ratio for libxvid wrapper.
benoit
parents: 6665
diff changeset
412 if (avctx->sample_aspect_ratio.num < 1 || avctx->sample_aspect_ratio.num > 255 ||
33d3c14d5a57 Set pixel aspect ratio for libxvid wrapper.
benoit
parents: 6665
diff changeset
413 avctx->sample_aspect_ratio.den < 1 || avctx->sample_aspect_ratio.den > 255) {
33d3c14d5a57 Set pixel aspect ratio for libxvid wrapper.
benoit
parents: 6665
diff changeset
414 av_log(avctx, AV_LOG_ERROR, "Invalid pixel aspect ratio %i/%i\n",
33d3c14d5a57 Set pixel aspect ratio for libxvid wrapper.
benoit
parents: 6665
diff changeset
415 avctx->sample_aspect_ratio.num, avctx->sample_aspect_ratio.den);
33d3c14d5a57 Set pixel aspect ratio for libxvid wrapper.
benoit
parents: 6665
diff changeset
416 return -1;
33d3c14d5a57 Set pixel aspect ratio for libxvid wrapper.
benoit
parents: 6665
diff changeset
417 }
33d3c14d5a57 Set pixel aspect ratio for libxvid wrapper.
benoit
parents: 6665
diff changeset
418 xvid_enc_frame.par = XVID_PAR_EXT;
33d3c14d5a57 Set pixel aspect ratio for libxvid wrapper.
benoit
parents: 6665
diff changeset
419 xvid_enc_frame.par_width = avctx->sample_aspect_ratio.num;
33d3c14d5a57 Set pixel aspect ratio for libxvid wrapper.
benoit
parents: 6665
diff changeset
420 xvid_enc_frame.par_height = avctx->sample_aspect_ratio.den;
33d3c14d5a57 Set pixel aspect ratio for libxvid wrapper.
benoit
parents: 6665
diff changeset
421
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
422 /* Quant Setting */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
423 if( x->qscale ) xvid_enc_frame.quant = picture->quality / FF_QP2LAMBDA;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
424 else xvid_enc_frame.quant = 0;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
425
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
426 /* Matrices */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
427 xvid_enc_frame.quant_intra_matrix = x->intra_matrix;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
428 xvid_enc_frame.quant_inter_matrix = x->inter_matrix;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
429
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
430 /* Encode */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
431 xerr = xvid_encore(x->encoder_handle, XVID_ENC_ENCODE,
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
432 &xvid_enc_frame, &xvid_enc_stats);
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
433
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
434 /* Two-pass log buffer swapping */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
435 avctx->stats_out = NULL;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
436 if( x->twopassbuffer ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
437 tmp = x->old_twopassbuffer;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
438 x->old_twopassbuffer = x->twopassbuffer;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
439 x->twopassbuffer = tmp;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
440 x->twopassbuffer[0] = 0;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
441 if( x->old_twopassbuffer[0] != 0 ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
442 avctx->stats_out = x->old_twopassbuffer;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
443 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
444 }
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
445
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
446 if( 0 <= xerr ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
447 p->quality = xvid_enc_stats.quant * FF_QP2LAMBDA;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
448 if( xvid_enc_stats.type == XVID_TYPE_PVOP )
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
449 p->pict_type = FF_P_TYPE;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
450 else if( xvid_enc_stats.type == XVID_TYPE_BVOP )
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
451 p->pict_type = FF_B_TYPE;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
452 else if( xvid_enc_stats.type == XVID_TYPE_SVOP )
2451
michael
parents: 2131
diff changeset
453 p->pict_type = FF_S_TYPE;
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
454 else
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
455 p->pict_type = FF_I_TYPE;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
456 if( xvid_enc_frame.out_flags & XVID_KEYFRAME ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
457 p->key_frame = 1;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
458 if( x->quicktime_format )
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
459 return xvid_strip_vol_header(avctx, frame,
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
460 xvid_enc_stats.hlength, xerr);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
461 } else
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
462 p->key_frame = 0;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
463
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
464 return xerr;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
465 } else {
6908
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
466 av_log(avctx, AV_LOG_ERROR, "Xvid: Encoding Error Occurred: %i\n", xerr);
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
467 return -1;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
468 }
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
469 }
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
470
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
471 /**
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
472 * Destroys the private context for the encoder.
6908
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
473 * All buffers are freed, and the Xvid encoder context is destroyed.
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
474 *
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
475 * @param avctx AVCodecContext pointer to context
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
476 * @return Returns 0, success guaranteed
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
477 */
11321
e0feb5fa4e97 Make the following functions static (and remove ff_), they are only used
cehoyos
parents: 10146
diff changeset
478 static av_cold int xvid_encode_close(AVCodecContext *avctx) {
8315
7ccdcc976edd Do not invade _t POSIX namespace.
diego
parents: 8250
diff changeset
479 struct xvid_context *x = avctx->priv_data;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
480
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
481 xvid_encore(x->encoder_handle, XVID_ENC_DESTROY, NULL, NULL);
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
482
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
483 if( avctx->extradata != NULL )
11543
965eca23972e libxvid: Clear extradata pointer when freeing it.
ramiro
parents: 11468
diff changeset
484 av_freep(&avctx->extradata);
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
485 if( x->twopassbuffer != NULL ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
486 av_free(x->twopassbuffer);
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
487 av_free(x->old_twopassbuffer);
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
488 }
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
489 if( x->twopassfile != NULL )
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
490 av_free(x->twopassfile);
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
491 if( x->intra_matrix != NULL )
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
492 av_free(x->intra_matrix);
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
493 if( x->inter_matrix != NULL )
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
494 av_free(x->inter_matrix);
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
495
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
496 return 0;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
497 }
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
498
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
499 /**
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
500 * Routine to create a global VO/VOL header for MP4 container.
6908
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
501 * What we do here is extract the header from the Xvid bitstream
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
502 * as it is encoded. We also strip the repeated headers from the
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
503 * bitstream when a global header is requested for MPEG-4 ISO
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
504 * compliance.
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
505 *
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
506 * @param avctx AVCodecContext pointer to context
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
507 * @param frame Pointer to encoded frame data
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
508 * @param header_len Length of header to search
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
509 * @param frame_len Length of encoded frame data
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
510 * @return Returns new length of frame data
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
511 */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
512 int xvid_strip_vol_header(AVCodecContext *avctx,
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
513 unsigned char *frame,
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
514 unsigned int header_len,
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
515 unsigned int frame_len) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
516 int vo_len = 0, i;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
517
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
518 for( i = 0; i < header_len - 3; i++ ) {
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
519 if( frame[i] == 0x00 &&
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
520 frame[i+1] == 0x00 &&
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
521 frame[i+2] == 0x01 &&
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
522 frame[i+3] == 0xB6 ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
523 vo_len = i;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
524 break;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
525 }
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
526 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
527
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
528 if( vo_len > 0 ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
529 /* We need to store the header, so extract it */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
530 if( avctx->extradata == NULL ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
531 avctx->extradata = av_malloc(vo_len);
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
532 memcpy(avctx->extradata, frame, vo_len);
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
533 avctx->extradata_size = vo_len;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
534 }
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
535 /* Less dangerous now, memmove properly copies the two
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
536 chunks of overlapping data */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
537 memmove(frame, &(frame[vo_len]), frame_len - vo_len);
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
538 return frame_len - vo_len;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
539 } else
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
540 return frame_len;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
541 }
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
542
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
543 /**
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
544 * Routine to correct a possibly erroneous framerate being fed to us.
6908
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
545 * Xvid currently chokes on framerates where the ticks per frame is
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
546 * extremely large. This function works to correct problems in this area
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
547 * by estimating a new framerate and taking the simpler fraction of
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
548 * the two presented.
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
549 *
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
550 * @param avctx Context that contains the framerate to correct.
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
551 */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
552 void xvid_correct_framerate(AVCodecContext *avctx) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
553 int frate, fbase;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
554 int est_frate, est_fbase;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
555 int gcd;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
556 float est_fps, fps;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
557
2637
ef44d24680d1 switch to native time bases
michael
parents: 2574
diff changeset
558 frate = avctx->time_base.den;
ef44d24680d1 switch to native time bases
michael
parents: 2574
diff changeset
559 fbase = avctx->time_base.num;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
560
8611
a637db9f59b1 export gcd function as av_gcd()
aurel
parents: 8590
diff changeset
561 gcd = av_gcd(frate, fbase);
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
562 if( gcd > 1 ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
563 frate /= gcd;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
564 fbase /= gcd;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
565 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
566
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
567 if( frate <= 65000 && fbase <= 65000 ) {
2637
ef44d24680d1 switch to native time bases
michael
parents: 2574
diff changeset
568 avctx->time_base.den = frate;
ef44d24680d1 switch to native time bases
michael
parents: 2574
diff changeset
569 avctx->time_base.num = fbase;
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
570 return;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
571 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
572
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
573 fps = (float)frate / (float)fbase;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
574 est_fps = roundf(fps * 1000.0) / 1000.0;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
575
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
576 est_frate = (int)est_fps;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
577 if( est_fps > (int)est_fps ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
578 est_frate = (est_frate + 1) * 1000;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
579 est_fbase = (int)roundf((float)est_frate / est_fps);
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
580 } else
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
581 est_fbase = 1;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
582
8611
a637db9f59b1 export gcd function as av_gcd()
aurel
parents: 8590
diff changeset
583 gcd = av_gcd(est_frate, est_fbase);
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
584 if( gcd > 1 ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
585 est_frate /= gcd;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
586 est_fbase /= gcd;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
587 }
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
588
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
589 if( fbase > est_fbase ) {
2637
ef44d24680d1 switch to native time bases
michael
parents: 2574
diff changeset
590 avctx->time_base.den = est_frate;
ef44d24680d1 switch to native time bases
michael
parents: 2574
diff changeset
591 avctx->time_base.num = est_fbase;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
592 av_log(avctx, AV_LOG_DEBUG,
6908
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
593 "Xvid: framerate re-estimated: %.2f, %.3f%% correction\n",
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
594 est_fps, (((est_fps - fps)/fps) * 100.0));
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
595 } else {
2637
ef44d24680d1 switch to native time bases
michael
parents: 2574
diff changeset
596 avctx->time_base.den = frate;
ef44d24680d1 switch to native time bases
michael
parents: 2574
diff changeset
597 avctx->time_base.num = fbase;
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
598 }
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
599 }
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
600
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
601 /*
6908
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
602 * Xvid 2-Pass Kludge Section
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
603 *
6908
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
604 * Xvid's default 2-pass doesn't allow us to create data as we need to, so
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
605 * this section spends time replacing the first pass plugin so we can write
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
606 * statistic information as libavcodec requests in. We have another kludge
6908
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
607 * that allows us to pass data to the second pass in Xvid without a custom
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
608 * rate-control plugin.
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
609 */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
610
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
611 /**
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
612 * Initializes the two-pass plugin and context.
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
613 *
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
614 * @param param Input construction parameter structure
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
615 * @param handle Private context handle
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
616 * @return Returns XVID_ERR_xxxx on failure, or 0 on success.
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
617 */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
618 static int xvid_ff_2pass_create(xvid_plg_create_t * param,
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
619 void ** handle) {
8315
7ccdcc976edd Do not invade _t POSIX namespace.
diego
parents: 8250
diff changeset
620 struct xvid_ff_pass1 *x = (struct xvid_ff_pass1 *)param->param;
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
621 char *log = x->context->twopassbuffer;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
622
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
623 /* Do a quick bounds check */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
624 if( log == NULL )
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
625 return XVID_ERR_FAIL;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
626
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
627 /* We use snprintf() */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
628 /* This is because we can safely prevent a buffer overflow */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
629 log[0] = 0;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
630 snprintf(log, BUFFER_REMAINING(log),
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
631 "# ffmpeg 2-pass log file, using xvid codec\n");
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
632 snprintf(BUFFER_CAT(log), BUFFER_REMAINING(log),
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
633 "# Do not modify. libxvidcore version: %d.%d.%d\n\n",
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
634 XVID_VERSION_MAJOR(XVID_VERSION),
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
635 XVID_VERSION_MINOR(XVID_VERSION),
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
636 XVID_VERSION_PATCH(XVID_VERSION));
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
637
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
638 *handle = x->context;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
639 return 0;
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
640 }
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
641
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
642 /**
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
643 * Destroys the two-pass plugin context.
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
644 *
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
645 * @param ref Context pointer for the plugin
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
646 * @param param Destrooy context
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
647 * @return Returns 0, success guaranteed
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
648 */
8315
7ccdcc976edd Do not invade _t POSIX namespace.
diego
parents: 8250
diff changeset
649 static int xvid_ff_2pass_destroy(struct xvid_context *ref,
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
650 xvid_plg_destroy_t *param) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
651 /* Currently cannot think of anything to do on destruction */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
652 /* Still, the framework should be here for reference/use */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
653 if( ref->twopassbuffer != NULL )
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
654 ref->twopassbuffer[0] = 0;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
655 return 0;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
656 }
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
657
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
658 /**
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
659 * Enables fast encode mode during the first pass.
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
660 *
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
661 * @param ref Context pointer for the plugin
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
662 * @param param Frame data
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
663 * @return Returns 0, success guaranteed
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
664 */
8315
7ccdcc976edd Do not invade _t POSIX namespace.
diego
parents: 8250
diff changeset
665 static int xvid_ff_2pass_before(struct xvid_context *ref,
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
666 xvid_plg_data_t *param) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
667 int motion_remove;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
668 int motion_replacements;
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
669 int vop_remove;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
670
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
671 /* Nothing to do here, result is changed too much */
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
672 if( param->zone && param->zone->mode == XVID_ZONE_QUANT )
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
673 return 0;
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
674
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
675 /* We can implement a 'turbo' first pass mode here */
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
676 param->quant = 2;
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
677
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
678 /* Init values */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
679 motion_remove = ~XVID_ME_CHROMA_PVOP &
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
680 ~XVID_ME_CHROMA_BVOP &
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
681 ~XVID_ME_EXTSEARCH16 &
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
682 ~XVID_ME_ADVANCEDDIAMOND16;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
683 motion_replacements = XVID_ME_FAST_MODEINTERPOLATE |
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
684 XVID_ME_SKIP_DELTASEARCH |
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
685 XVID_ME_FASTREFINE16 |
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
686 XVID_ME_BFRAME_EARLYSTOP;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
687 vop_remove = ~XVID_VOP_MODEDECISION_RD &
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
688 ~XVID_VOP_FAST_MODEDECISION_RD &
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
689 ~XVID_VOP_TRELLISQUANT &
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
690 ~XVID_VOP_INTER4V &
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
691 ~XVID_VOP_HQACPRED;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
692
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
693 param->vol_flags &= ~XVID_VOL_GMC;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
694 param->vop_flags &= vop_remove;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
695 param->motion_flags &= motion_remove;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
696 param->motion_flags |= motion_replacements;
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
697
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
698 return 0;
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
699 }
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
700
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
701 /**
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
702 * Captures statistic data and writes it during first pass.
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
703 *
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
704 * @param ref Context pointer for the plugin
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
705 * @param param Statistic data
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
706 * @return Returns XVID_ERR_xxxx on failure, or 0 on success
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
707 */
8315
7ccdcc976edd Do not invade _t POSIX namespace.
diego
parents: 8250
diff changeset
708 static int xvid_ff_2pass_after(struct xvid_context *ref,
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
709 xvid_plg_data_t *param) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
710 char *log = ref->twopassbuffer;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
711 char *frame_types = " ipbs";
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
712 char frame_type;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
713
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
714 /* Quick bounds check */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
715 if( log == NULL )
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
716 return XVID_ERR_FAIL;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
717
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
718 /* Convert the type given to us into a character */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
719 if( param->type < 5 && param->type > 0 ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
720 frame_type = frame_types[param->type];
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
721 } else {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
722 return XVID_ERR_FAIL;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
723 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
724
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
725 snprintf(BUFFER_CAT(log), BUFFER_REMAINING(log),
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
726 "%c %d %d %d %d %d %d\n",
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
727 frame_type, param->stats.quant, param->stats.kblks, param->stats.mblks,
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
728 param->stats.ublks, param->stats.length, param->stats.hlength);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
729
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
730 return 0;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
731 }
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
732
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
733 /**
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
734 * Dispatch function for our custom plugin.
6908
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
735 * This handles the dispatch for the Xvid plugin. It passes data
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
736 * on to other functions for actual processing.
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
737 *
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
738 * @param ref Context pointer for the plugin
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
739 * @param cmd The task given for us to complete
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
740 * @param p1 First parameter (varies)
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
741 * @param p2 Second parameter (varies)
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
742 * @return Returns XVID_ERR_xxxx on failure, or 0 on success
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
743 */
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
744 int xvid_ff_2pass(void *ref, int cmd, void *p1, void *p2) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
745 switch( cmd ) {
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
746 case XVID_PLG_INFO:
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
747 case XVID_PLG_FRAME:
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
748 return 0;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
749
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
750 case XVID_PLG_BEFORE:
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
751 return xvid_ff_2pass_before(ref, p1);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
752
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
753 case XVID_PLG_CREATE:
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
754 return xvid_ff_2pass_create(p1, p2);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
755
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
756 case XVID_PLG_AFTER:
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
757 return xvid_ff_2pass_after(ref, p1);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
758
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
759 case XVID_PLG_DESTROY:
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
760 return xvid_ff_2pass_destroy(ref, p1);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2821
diff changeset
761
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
762 default:
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
763 return XVID_ERR_FAIL;
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
764 }
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
765 }
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
766
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
767 /**
6908
25dcd46b8160 cosmetics: XviD is now called Xvid.
diego
parents: 6788
diff changeset
768 * Xvid codec definition for libavcodec.
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
769 */
5103
1deb3e53da27 Consistent naming and lib prefixes for x264, xvid and mp3lame within the code.
diego
parents: 5101
diff changeset
770 AVCodec libxvid_encoder = {
1deb3e53da27 Consistent naming and lib prefixes for x264, xvid and mp3lame within the code.
diego
parents: 5101
diff changeset
771 "libxvid",
11560
8a4984c5cacc Define AVMediaType enum, and use it instead of enum CodecType, which
stefano
parents: 11543
diff changeset
772 AVMEDIA_TYPE_VIDEO,
11468
67786aecf351 libxvid is producing standard mpeg4 so it don't need its own codec id
aurel
parents: 11321
diff changeset
773 CODEC_ID_MPEG4,
8315
7ccdcc976edd Do not invade _t POSIX namespace.
diego
parents: 8250
diff changeset
774 sizeof(struct xvid_context),
11321
e0feb5fa4e97 Make the following functions static (and remove ff_), they are only used
cehoyos
parents: 10146
diff changeset
775 xvid_encode_init,
e0feb5fa4e97 Make the following functions static (and remove ff_), they are only used
cehoyos
parents: 10146
diff changeset
776 xvid_encode_frame,
e0feb5fa4e97 Make the following functions static (and remove ff_), they are only used
cehoyos
parents: 10146
diff changeset
777 xvid_encode_close,
10146
38cfe222e1a4 Mark all pix_fmts and supported_framerates compound literals as const.
reimar
parents: 8718
diff changeset
778 .pix_fmts= (const enum PixelFormat[]){PIX_FMT_YUV420P, PIX_FMT_NONE},
7040
e943e1409077 Make AVCodec long_names definition conditional depending on CONFIG_SMALL.
stefano
parents: 7034
diff changeset
779 .long_name= NULL_IF_CONFIG_SMALL("libxvidcore MPEG-4 part 2"),
2131
060053df9538 XviD Support patch by (Adam Thayer <krevnik at comcast dot net>)
michael
parents:
diff changeset
780 };