1 /*
2 * Xvid rate control wrapper for lavc video encoders
3 *
4 * Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
5 *
6 * This file is part of FFmpeg.
7 *
8 * FFmpeg is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * FFmpeg is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with FFmpeg; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 */
22
23 #include "config.h"
24 #include <xvid.h>
25 #include <unistd.h>
31
32 #undef NDEBUG
33 #include <assert.h>
34
36 {
37 char *tmp_name;
38 int fd, i;
39 xvid_plg_create_t xvid_plg_create = { 0 };
40 xvid_plugin_2pass2_t xvid_2pass2 = { 0 };
41
43 if (fd == -1) {
45 return -1;
46 }
47
49 static const char frame_types[] = " ipbs";
50 char tmp[256];
52
54
55 snprintf(tmp,
sizeof(tmp),
"%c %d %d %d %d %d %d\n",
58
59 if (write(fd, tmp, strlen(tmp)) < 0) {
64 }
65 }
66
68
69 xvid_2pass2.version= XVID_MAKE_VERSION(1,1,0);
70 xvid_2pass2.filename= tmp_name;
75
76 xvid_plg_create.version= XVID_MAKE_VERSION(1,1,0);
79 xvid_plg_create.param= &xvid_2pass2;
80
83 return -1;
84 }
85 return 0;
86 }
87
89 xvid_plg_data_t xvid_plg_data = { 0 };
90
91 xvid_plg_data.version= XVID_MAKE_VERSION(1,1,0);
92 xvid_plg_data.width = s->
width;
93 xvid_plg_data.height= s->
height;
94 xvid_plg_data.mb_width = s->
mb_width;
98 xvid_plg_data.min_quant[0]= s->
avctx->
qmin;
99 xvid_plg_data.min_quant[1]= s->
avctx->
qmin;
100 xvid_plg_data.min_quant[2]= s->
avctx->
qmin;
//FIXME i/b factor & offset
101 xvid_plg_data.max_quant[0]= s->
avctx->
qmax;
102 xvid_plg_data.max_quant[1]= s->
avctx->
qmax;
103 xvid_plg_data.max_quant[2]= s->
avctx->
qmax;
//FIXME i/b factor & offset
104 xvid_plg_data.bquant_offset = 0; // 100 * s->avctx->b_quant_offset;
105 xvid_plg_data.bquant_ratio = 100; // * s->avctx->b_quant_factor;
106
109 xvid_plg_data.length=
110 xvid_plg_data.stats.length= (s->
frame_bits + 7)/8;
112 xvid_plg_data.quant= s->
qscale;
113
117 return -1;
118 }
119 }
122 xvid_plg_data.quant= 0;
125 return -1;
126 }
128 }
130 if(!dry_run)
132
135 else
137 }
138
140 {
141 xvid_plg_destroy_t xvid_plg_destroy;
142
144 }