annotate divx4_vbr.c @ 3955:ceab3c2f261e

hotfix for ac3 aid<0x20 (VDR)
author arpi
date Wed, 02 Jan 2002 19:18:11 +0000
parents 649c50457a99
children 92c59012249d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2641
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
1 /*
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
2 * divx4_vbr.c
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
3 *
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
4 * Copyright (C) Thomas Östreich - June 2001
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
5 *
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
6 * 2-pass code OpenDivX port:
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
7 * Copyright (C) 2001 Christoph Lampert <gruel@gmx.de>
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
8 *
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
9 * This file is part of transcode, a linux video stream processing tool
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
10 *
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
11 * transcode is free software; you can redistribute it and/or modify
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
12 * it under the terms of the GNU General Public License as published by
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
13 * the Free Software Foundation; either version 2, or (at your option)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
14 * any later version.
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
15 *
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
16 * transcode is distributed in the hope that it will be useful,
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
19 * GNU General Public License for more details.
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
20 *
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
21 * You should have received a copy of the GNU General Public License
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
22 * along with GNU Make; see the file COPYING. If not, write to
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
23 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
24 *
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
25 */
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
26
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
27
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
28 /**********************************************************
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
29 * Two-pass-code from OpenDivX *
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
30 * *
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
31 * Large parts of this code were taken from VbrControl() *
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
32 * from the OpenDivX project, (C) divxnetworks, *
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
33 * this code is published under DivX Open license, which *
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
34 * can be found... somewhere... oh, whatever... *
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
35 **********************************************************/
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
36
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
37 #include <stdio.h>
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
38 #include <stdlib.h>
2642
0e6e13261d79 divx4_vbr -> mplayer integration
arpi
parents: 2641
diff changeset
39 #include <string.h>
2641
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
40 #include <sys/stat.h>
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
41 #include <unistd.h>
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
42 #include <fcntl.h>
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
43 #include <dlfcn.h>
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
44 #include <math.h>
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
45
3919
649c50457a99 small fixes (=> HAVE_STDINT_H is now defined)
pl
parents: 3917
diff changeset
46 #include "config.h"
649c50457a99 small fixes (=> HAVE_STDINT_H is now defined)
pl
parents: 3917
diff changeset
47
649c50457a99 small fixes (=> HAVE_STDINT_H is now defined)
pl
parents: 3917
diff changeset
48 #ifdef HAVE_STDINT_H
2641
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
49 #include <stdint.h>
3917
33d34fe981ec <stdint.h> doesn't exist in FreeBSD
nexus
parents: 2642
diff changeset
50 #endif
2641
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
51
2642
0e6e13261d79 divx4_vbr -> mplayer integration
arpi
parents: 2641
diff changeset
52
0e6e13261d79 divx4_vbr -> mplayer integration
arpi
parents: 2641
diff changeset
53 #include "divx4_vbr.h"
0e6e13261d79 divx4_vbr -> mplayer integration
arpi
parents: 2641
diff changeset
54
0e6e13261d79 divx4_vbr -> mplayer integration
arpi
parents: 2641
diff changeset
55 //#include "transcode.h"
2641
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
56
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
57 #define FALSE 0
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
58 #define TRUE 1
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
59
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
60 /* Absolute maximum and minimum quantizers used in VBR modes */
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
61 static const int min_quantizer=1;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
62 static const int max_quantizer=31;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
63
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
64 /* Limits on frame-level deviation of quantizer ( higher values
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
65 correspond to frames with more changes and vice versa ) */
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
66 static const float min_quant_delta=-10.f;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
67 static const float max_quant_delta=5.f;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
68 /* Limits on stream-level deviation of quantizer ( used to make
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
69 overall bitrate of stream close to requested value ) */
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
70 static const float min_rc_quant_delta=.6f;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
71 static const float max_rc_quant_delta=1.5f;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
72
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
73 /* Crispness parameter controls threshold for decision whether
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
74 to skip the frame or to code it. */
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
75 //static const float max_crispness=100.f;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
76 /* Maximum allowed number of skipped frames in a line. */
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
77 //static const int max_drops_line=0; // CHL We don't drop frames at the moment!
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
78
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
79
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
80 typedef struct entry_s
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
81 /* max 28 bytes/frame or 5 Mb for 2-hour movie */
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
82 {
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
83 int quant;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
84 int text_bits;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
85 int motion_bits;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
86 int total_bits;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
87 float mult;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
88 short is_key_frame;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
89 short drop;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
90 } entry;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
91
2642
0e6e13261d79 divx4_vbr -> mplayer integration
arpi
parents: 2641
diff changeset
92 static int m_iCount;
0e6e13261d79 divx4_vbr -> mplayer integration
arpi
parents: 2641
diff changeset
93 static int m_iQuant;
0e6e13261d79 divx4_vbr -> mplayer integration
arpi
parents: 2641
diff changeset
94 static int m_iCrispness;
0e6e13261d79 divx4_vbr -> mplayer integration
arpi
parents: 2641
diff changeset
95 static short m_bDrop;
0e6e13261d79 divx4_vbr -> mplayer integration
arpi
parents: 2641
diff changeset
96 static float m_fQuant;
2641
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
97
2642
0e6e13261d79 divx4_vbr -> mplayer integration
arpi
parents: 2641
diff changeset
98 static int64_t m_lEncodedBits;
0e6e13261d79 divx4_vbr -> mplayer integration
arpi
parents: 2641
diff changeset
99 static int64_t m_lExpectedBits;
2641
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
100
2642
0e6e13261d79 divx4_vbr -> mplayer integration
arpi
parents: 2641
diff changeset
101 static FILE *m_pFile;
2641
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
102
2642
0e6e13261d79 divx4_vbr -> mplayer integration
arpi
parents: 2641
diff changeset
103 static entry vFrame;
0e6e13261d79 divx4_vbr -> mplayer integration
arpi
parents: 2641
diff changeset
104 static entry *m_vFrames;
0e6e13261d79 divx4_vbr -> mplayer integration
arpi
parents: 2641
diff changeset
105 static long lFrameStart;
2641
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
106
2642
0e6e13261d79 divx4_vbr -> mplayer integration
arpi
parents: 2641
diff changeset
107 static int iNumFrames;
0e6e13261d79 divx4_vbr -> mplayer integration
arpi
parents: 2641
diff changeset
108 static int dummy;
2641
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
109
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
110
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
111 void VbrControl_init_1pass_vbr(int quality, int crispness)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
112 {
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
113 m_fQuant=min_quantizer+((max_quantizer-min_quantizer)/6.)*(6-quality);
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
114 m_iCount=0;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
115 m_bDrop=FALSE;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
116 VbrControl_update_1pass_vbr();
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
117 }
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
118
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
119 int VbrControl_init_2pass_vbr_analysis(const char *filename, int quality)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
120 {
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
121 m_pFile=fopen(filename, "wb");
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
122 if(m_pFile==0)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
123 return -1;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
124 m_iCount=0;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
125 m_bDrop=FALSE;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
126 fprintf(m_pFile, "##version 1\n");
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
127 fprintf(m_pFile, "quality %d\n", quality);
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
128 return 0;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
129 }
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
130
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
131 int VbrControl_init_2pass_vbr_encoding(const char *filename, int bitrate, double framerate, int crispness, int quality)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
132 {
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
133 int i;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
134
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
135 int64_t text_bits=0;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
136 int64_t total_bits=0;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
137 int64_t complexity=0;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
138 int64_t new_complexity=0;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
139 int64_t motion_bits=0;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
140 int64_t denominator=0;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
141 float qual_multiplier=1.;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
142 char head[20];
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
143
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
144 int64_t desired_bits;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
145 int64_t non_text_bits;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
146
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
147 float average_complexity;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
148
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
149 m_pFile=fopen(filename, "rb");
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
150 if(m_pFile==0)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
151 return -1;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
152 m_bDrop=FALSE;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
153 m_iCount=0;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
154
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
155 fread(head, 10, 1, m_pFile);
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
156 if(!strncmp("##version ", head, 10))
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
157 {
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
158 int version;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
159 int iOldQual;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
160 float old_qual, new_qual;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
161 fscanf(m_pFile, "%d\n", &version);
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
162 fscanf(m_pFile, "quality %d\n", &iOldQual);
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
163 switch(iOldQual)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
164 {
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
165 case 5:
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
166 old_qual=1.f;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
167 break;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
168 case 4:
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
169 old_qual=1.1f;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
170 break;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
171 case 3:
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
172 old_qual=1.25f;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
173 break;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
174 case 2:
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
175 old_qual=1.4f;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
176 break;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
177 case 1:
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
178 old_qual=2.f;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
179 break;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
180 }
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
181 switch(quality)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
182 {
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
183 case 5:
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
184 new_qual=1.f;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
185 break;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
186 case 4:
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
187 new_qual=1.1f;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
188 break;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
189 case 3:
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
190 new_qual=1.25f;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
191 break;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
192 case 2:
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
193 new_qual=1.4f;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
194 break;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
195 case 1:
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
196 new_qual=2.f;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
197 break;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
198 }
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
199 qual_multiplier=new_qual/old_qual;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
200 }
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
201 else
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
202 fseek(m_pFile, 0, SEEK_SET);
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
203
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
204 lFrameStart=ftell(m_pFile); // save current position
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
205
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
206 /* removed C++ dependencies, now read file twice :-( */
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
207
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
208
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
209 while(!feof(m_pFile))
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
210 { fscanf(m_pFile, "Frame %d: intra %d, quant %d, texture %d, motion %d, total %d\n",
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
211 &iNumFrames, &(vFrame.is_key_frame), &(vFrame.quant), &(vFrame.text_bits), &(vFrame.motion_bits), &(vFrame.total_bits));
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
212
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
213 vFrame.total_bits+=vFrame.text_bits*(qual_multiplier-1);
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
214 vFrame.text_bits*=qual_multiplier;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
215 text_bits +=(int64_t)vFrame.text_bits;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
216 motion_bits += (int64_t)vFrame.motion_bits;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
217 total_bits +=(int64_t)vFrame.total_bits;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
218 complexity +=(int64_t)vFrame.text_bits*vFrame.quant;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
219
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
220 // printf("Frames %d, texture %d, motion %d, quant %d total %d ",
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
221 // iNumFrames, vFrame.text_bits, vFrame.motion_bits, vFrame.quant, vFrame.total_bits);
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
222 // printf("texture %d, total %d, complexity %lld \n",vFrame.text_bits,vFrame.total_bits, complexity);
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
223 }
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
224 iNumFrames++;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
225 average_complexity=complexity/iNumFrames;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
226
2642
0e6e13261d79 divx4_vbr -> mplayer integration
arpi
parents: 2641
diff changeset
227 // if (verbose & TC_DEBUG) {
0e6e13261d79 divx4_vbr -> mplayer integration
arpi
parents: 2641
diff changeset
228 // fprintf(stderr, "(%s) frames %d, texture %lld, motion %lld, total %lld, complexity %lld\n", __FILE__, iNumFrames, text_bits, motion_bits, total_bits, complexity);
0e6e13261d79 divx4_vbr -> mplayer integration
arpi
parents: 2641
diff changeset
229 // }
2641
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
230
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
231 m_vFrames = (entry*)malloc(iNumFrames*sizeof(entry));
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
232 if (!m_vFrames)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
233 { printf("out of memory");
2642
0e6e13261d79 divx4_vbr -> mplayer integration
arpi
parents: 2641
diff changeset
234 return -2; //TC_EXPORT_ERROR;
2641
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
235 }
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
236
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
237 fseek(m_pFile, lFrameStart, SEEK_SET); // start again
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
238
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
239 for (i=0;i<iNumFrames;i++)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
240 { fscanf(m_pFile, "Frame %d: intra %d, quant %d, texture %d, motion %d, total %d\n",
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
241 &dummy, &(m_vFrames[i].is_key_frame), &(m_vFrames[i].quant),
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
242 &(m_vFrames[i].text_bits), &(m_vFrames[i].motion_bits),
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
243 &(m_vFrames[i].total_bits));
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
244
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
245 m_vFrames[i].total_bits += m_vFrames[i].text_bits*(qual_multiplier-1);
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
246 m_vFrames[i].text_bits *= qual_multiplier;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
247 }
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
248
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
249 if (m_pFile)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
250 { fclose(m_pFile);
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
251 m_pFile=NULL;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
252 }
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
253
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
254 desired_bits=(int64_t)bitrate*(int64_t)iNumFrames/framerate;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
255 non_text_bits=total_bits-text_bits;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
256
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
257 if(desired_bits<=non_text_bits)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
258 {
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
259 char s[200];
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
260 printf("Specified bitrate is too low for this clip.\n"
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
261 "Minimum possible bitrate for the clip is %.0f kbps. Overriding\n"
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
262 "user-specified value.\n",
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
263 (float)(non_text_bits*framerate/(int64_t)iNumFrames));
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
264
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
265 desired_bits=non_text_bits*3/2;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
266 /*
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
267 m_fQuant=max_quantizer;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
268 for(int i=0; i<iNumFrames; i++)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
269 {
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
270 m_vFrames[i].drop=0;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
271 m_vFrames[i].mult=1;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
272 }
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
273 VbrControl_set_quant(m_fQuant);
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
274 return 0;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
275 */
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
276 }
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
277
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
278 desired_bits -= non_text_bits;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
279 /**
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
280 BRIEF EXPLANATION OF WHAT'S GOING ON HERE.
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
281 We assume that
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
282 text_bits=complexity / quantizer
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
283 total_bits-text_bits = const(complexity)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
284 where 'complexity' is a characteristic of the frame
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
285 and does not depend much on quantizer dynamics.
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
286 Using this equation, we calculate 'average' quantizer
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
287 to be used for encoding ( 1st order effect ).
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
288 Having constant quantizer for the entire stream is not
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
289 very convenient - reconstruction errors are
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
290 more noticeable in low-motion scenes. To compensate
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
291 this effect, we multiply quantizer for each frame by
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
292 (complexity/average_complexity)^k,
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
293 ( k - parameter of adjustment ). k=0 means 'no compensation'
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
294 and k=1 is 'constant bitrate mode'. We choose something in
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
295 between, like 0.5 ( 2nd order effect ).
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
296 **/
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
297
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
298 average_complexity=complexity/iNumFrames;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
299
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
300 for(i=0; i<iNumFrames; i++)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
301 {
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
302 float mult;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
303 if(m_vFrames[i].is_key_frame)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
304 {
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
305 if((i+1<iNumFrames) && (m_vFrames[i+1].is_key_frame))
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
306 mult=1.25;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
307 else
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
308 mult=.75;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
309 }
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
310 else
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
311 {
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
312 mult=m_vFrames[i].text_bits*m_vFrames[i].quant;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
313 mult=(float)sqrt(mult/average_complexity);
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
314
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
315 // if(i && m_vFrames[i-1].is_key_frame)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
316 // mult *= 0.75;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
317 if(mult<0.5)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
318 mult=0.5;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
319 if(mult>1.5)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
320 mult=1.5;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
321 }
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
322
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
323 m_vFrames[i].mult=mult;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
324 m_vFrames[i].drop=FALSE;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
325 new_complexity+=m_vFrames[i].text_bits*m_vFrames[i].quant;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
326
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
327 denominator+=desired_bits*m_vFrames[i].mult/iNumFrames;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
328 }
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
329
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
330 m_fQuant=((double)new_complexity)/(double)denominator;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
331
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
332 if(m_fQuant<min_quantizer) m_fQuant=min_quantizer;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
333 if(m_fQuant>max_quantizer) m_fQuant=max_quantizer;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
334 m_pFile=fopen("analyse.log", "wb");
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
335 if(m_pFile)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
336 {
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
337 fprintf(m_pFile, "Total frames: %d Avg quantizer: %f\n",
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
338 iNumFrames, m_fQuant);
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
339 fprintf(m_pFile, "Expecting %12lld bits\n", desired_bits+non_text_bits);
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
340 fflush(m_pFile);
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
341 }
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
342 VbrControl_set_quant(m_fQuant*m_vFrames[0].mult);
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
343 m_lEncodedBits=m_lExpectedBits=0;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
344 return 0;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
345 }
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
346
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
347 int VbrControl_get_intra()
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
348 {
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
349 return m_vFrames[m_iCount].is_key_frame;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
350 }
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
351
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
352 short VbrControl_get_drop()
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
353 {
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
354 return m_bDrop;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
355 }
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
356
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
357 int VbrControl_get_quant()
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
358 {
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
359 return m_iQuant;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
360 }
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
361
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
362 void VbrControl_set_quant(float quant)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
363 {
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
364 m_iQuant=quant;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
365 if((rand() % 10)<((quant-m_iQuant) * 10))
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
366 m_iQuant++;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
367 if(m_iQuant<min_quantizer) m_iQuant=min_quantizer;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
368 if(m_iQuant>max_quantizer) m_iQuant=max_quantizer;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
369 }
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
370
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
371 void VbrControl_update_1pass_vbr()
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
372 {
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
373 VbrControl_set_quant(m_fQuant);
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
374 m_iCount++;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
375 }
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
376
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
377 void VbrControl_update_2pass_vbr_analysis(int is_key_frame, int motion_bits, int texture_bits, int total_bits, int quant)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
378 {
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
379 if(!m_pFile)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
380 return;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
381 fprintf(m_pFile, "Frame %d: intra %d, quant %d, texture %d, motion %d, total %d\n",
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
382 m_iCount, is_key_frame, quant, texture_bits, motion_bits, total_bits);
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
383 m_iCount++;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
384 }
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
385
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
386 void VbrControl_update_2pass_vbr_encoding(int motion_bits, int texture_bits, int total_bits)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
387 {
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
388 double q;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
389 double dq;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
390
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
391 if(m_iCount>=iNumFrames)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
392 return;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
393
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
394 m_lExpectedBits+=(m_vFrames[m_iCount].total_bits-m_vFrames[m_iCount].text_bits)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
395 + m_vFrames[m_iCount].text_bits*m_vFrames[m_iCount].quant/m_fQuant;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
396 m_lEncodedBits+=(int64_t)total_bits;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
397
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
398 if(m_pFile)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
399 fprintf(m_pFile, "Frame %d: PRESENT, complexity %d, quant multiplier %f, texture %d, total %d ",
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
400 m_iCount, m_vFrames[m_iCount].text_bits*m_vFrames[m_iCount].quant,
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
401 m_vFrames[m_iCount].mult, texture_bits, total_bits);
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
402
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
403 m_iCount++;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
404
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
405 q = m_fQuant * m_vFrames[m_iCount].mult;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
406 if(q<m_fQuant+min_quant_delta) q=m_fQuant+min_quant_delta;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
407 if(q>m_fQuant+max_quant_delta) q=m_fQuant+max_quant_delta;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
408
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
409 dq = (double)m_lEncodedBits/(double)m_lExpectedBits;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
410 dq*=dq;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
411 if(dq<min_rc_quant_delta)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
412 dq=min_rc_quant_delta;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
413 if(dq>max_rc_quant_delta)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
414 dq=max_rc_quant_delta;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
415 if(m_iCount<20) // no framerate corrections in first frames
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
416 dq=1;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
417 if(m_pFile)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
418 fprintf(m_pFile, "Progress: expected %12lld, achieved %12lld, dq %f",
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
419 m_lExpectedBits, m_lEncodedBits, dq);
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
420 q *= dq;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
421 VbrControl_set_quant(q);
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
422 if(m_pFile)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
423 fprintf(m_pFile, ", new quant %d\n", m_iQuant);
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
424 }
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
425
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
426 void VbrControl_close()
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
427 {
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
428 if(m_pFile)
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
429 {
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
430 fclose(m_pFile);
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
431 m_pFile=NULL;
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
432 }
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
433 free(m_vFrames);
41b67e5e5d38 initial import from transcode
arpi
parents:
diff changeset
434 }