Thu, 15 Jan 2015 15:59:08 +0100
Implement a real Private Browsing Mode condition by changing the API/ABI;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.
1 /*
2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
12 #ifndef __INC_VP8_H
13 #define __INC_VP8_H
15 #ifdef __cplusplus
16 extern "C"
17 {
18 #endif
20 #include "vpx_config.h"
21 #include "vpx/internal/vpx_codec_internal.h"
22 #include "vpx/vp8cx.h"
23 #include "vpx/vpx_encoder.h"
24 #include "vpx_scale/yv12config.h"
25 #include "ppflags.h"
27 struct VP8_COMP;
29 /* Create/destroy static data structures. */
31 typedef enum
32 {
33 NORMAL = 0,
34 FOURFIVE = 1,
35 THREEFIVE = 2,
36 ONETWO = 3
38 } VPX_SCALING;
40 typedef enum
41 {
42 USAGE_STREAM_FROM_SERVER = 0x0,
43 USAGE_LOCAL_FILE_PLAYBACK = 0x1,
44 USAGE_CONSTRAINED_QUALITY = 0x2,
45 USAGE_CONSTANT_QUALITY = 0x3
46 } END_USAGE;
49 typedef enum
50 {
51 MODE_REALTIME = 0x0,
52 MODE_GOODQUALITY = 0x1,
53 MODE_BESTQUALITY = 0x2,
54 MODE_FIRSTPASS = 0x3,
55 MODE_SECONDPASS = 0x4,
56 MODE_SECONDPASS_BEST = 0x5
57 } MODE;
59 typedef enum
60 {
61 FRAMEFLAGS_KEY = 1,
62 FRAMEFLAGS_GOLDEN = 2,
63 FRAMEFLAGS_ALTREF = 4
64 } FRAMETYPE_FLAGS;
67 #include <assert.h>
68 static void Scale2Ratio(int mode, int *hr, int *hs)
69 {
70 switch (mode)
71 {
72 case NORMAL:
73 *hr = 1;
74 *hs = 1;
75 break;
76 case FOURFIVE:
77 *hr = 4;
78 *hs = 5;
79 break;
80 case THREEFIVE:
81 *hr = 3;
82 *hs = 5;
83 break;
84 case ONETWO:
85 *hr = 1;
86 *hs = 2;
87 break;
88 default:
89 *hr = 1;
90 *hs = 1;
91 assert(0);
92 break;
93 }
94 }
96 typedef struct
97 {
98 /* 4 versions of bitstream defined:
99 * 0 best quality/slowest decode, 3 lowest quality/fastest decode
100 */
101 int Version;
102 int Width;
103 int Height;
104 struct vpx_rational timebase;
105 unsigned int target_bandwidth; /* kilobits per second */
107 /* parameter used for applying pre processing blur: recommendation 0 */
108 int noise_sensitivity;
110 /* parameter used for sharpening output: recommendation 0: */
111 int Sharpness;
112 int cpu_used;
113 unsigned int rc_max_intra_bitrate_pct;
115 /* mode ->
116 *(0)=Realtime/Live Encoding. This mode is optimized for realtim
117 * encoding (for example, capturing a television signal or feed
118 * from a live camera). ( speed setting controls how fast )
119 *(1)=Good Quality Fast Encoding. The encoder balances quality with
120 * the amount of time it takes to encode the output. ( speed
121 * setting controls how fast )
122 *(2)=One Pass - Best Quality. The encoder places priority on the
123 * quality of the output over encoding speed. The output is
124 * compressed at the highest possible quality. This option takes
125 * the longest amount of time to encode. ( speed setting ignored
126 * )
127 *(3)=Two Pass - First Pass. The encoder generates a file of
128 * statistics for use in the second encoding pass. ( speed
129 * setting controls how fast )
130 *(4)=Two Pass - Second Pass. The encoder uses the statistics that
131 * were generated in the first encoding pass to create the
132 * compressed output. ( speed setting controls how fast )
133 *(5)=Two Pass - Second Pass Best. The encoder uses the statistics
134 * that were generated in the first encoding pass to create the
135 * compressed output using the highest possible quality, and
136 * taking a longer amount of time to encode.. ( speed setting
137 * ignored )
138 */
139 int Mode;
141 /* Key Framing Operations */
142 int auto_key; /* automatically detect cut scenes */
143 int key_freq; /* maximum distance to key frame. */
145 /* lagged compression (if allow_lag == 0 lag_in_frames is ignored) */
146 int allow_lag;
147 int lag_in_frames; /* how many frames lag before we start encoding */
149 /*
150 * DATARATE CONTROL OPTIONS
151 */
153 int end_usage; /* vbr or cbr */
155 /* buffer targeting aggressiveness */
156 int under_shoot_pct;
157 int over_shoot_pct;
159 /* buffering parameters */
160 int64_t starting_buffer_level;
161 int64_t optimal_buffer_level;
162 int64_t maximum_buffer_size;
164 int64_t starting_buffer_level_in_ms;
165 int64_t optimal_buffer_level_in_ms;
166 int64_t maximum_buffer_size_in_ms;
168 /* controlling quality */
169 int fixed_q;
170 int worst_allowed_q;
171 int best_allowed_q;
172 int cq_level;
174 /* allow internal resizing */
175 int allow_spatial_resampling;
176 int resample_down_water_mark;
177 int resample_up_water_mark;
179 /* allow internal frame rate alterations */
180 int allow_df;
181 int drop_frames_water_mark;
183 /* two pass datarate control */
184 int two_pass_vbrbias;
185 int two_pass_vbrmin_section;
186 int two_pass_vbrmax_section;
188 /*
189 * END DATARATE CONTROL OPTIONS
190 */
192 /* these parameters aren't to be used in final build don't use!!! */
193 int play_alternate;
194 int alt_freq;
195 int alt_q;
196 int key_q;
197 int gold_q;
200 int multi_threaded; /* how many threads to run the encoder on */
201 int token_partitions; /* how many token partitions to create */
203 /* early breakout threshold: for video conf recommend 800 */
204 int encode_breakout;
206 /* Bitfield defining the error resiliency features to enable.
207 * Can provide decodable frames after losses in previous
208 * frames and decodable partitions after losses in the same frame.
209 */
210 unsigned int error_resilient_mode;
212 int arnr_max_frames;
213 int arnr_strength;
214 int arnr_type;
216 struct vpx_fixed_buf two_pass_stats_in;
217 struct vpx_codec_pkt_list *output_pkt_list;
219 vp8e_tuning tuning;
221 /* Temporal scaling parameters */
222 unsigned int number_of_layers;
223 unsigned int target_bitrate[VPX_TS_MAX_PERIODICITY];
224 unsigned int rate_decimator[VPX_TS_MAX_PERIODICITY];
225 unsigned int periodicity;
226 unsigned int layer_id[VPX_TS_MAX_PERIODICITY];
228 #if CONFIG_MULTI_RES_ENCODING
229 /* Number of total resolutions encoded */
230 unsigned int mr_total_resolutions;
232 /* Current encoder ID */
233 unsigned int mr_encoder_id;
235 /* Down-sampling factor */
236 vpx_rational_t mr_down_sampling_factor;
238 /* Memory location to store low-resolution encoder's mode info */
239 void* mr_low_res_mode_info;
240 #endif
241 } VP8_CONFIG;
244 void vp8_initialize();
246 struct VP8_COMP* vp8_create_compressor(VP8_CONFIG *oxcf);
247 void vp8_remove_compressor(struct VP8_COMP* *comp);
249 void vp8_init_config(struct VP8_COMP* onyx, VP8_CONFIG *oxcf);
250 void vp8_change_config(struct VP8_COMP* onyx, VP8_CONFIG *oxcf);
252 int vp8_receive_raw_frame(struct VP8_COMP* comp, unsigned int frame_flags, YV12_BUFFER_CONFIG *sd, int64_t time_stamp, int64_t end_time_stamp);
253 int vp8_get_compressed_data(struct VP8_COMP* comp, unsigned int *frame_flags, unsigned long *size, unsigned char *dest, unsigned char *dest_end, int64_t *time_stamp, int64_t *time_end, int flush);
254 int vp8_get_preview_raw_frame(struct VP8_COMP* comp, YV12_BUFFER_CONFIG *dest, vp8_ppflags_t *flags);
256 int vp8_use_as_reference(struct VP8_COMP* comp, int ref_frame_flags);
257 int vp8_update_reference(struct VP8_COMP* comp, int ref_frame_flags);
258 int vp8_get_reference(struct VP8_COMP* comp, enum vpx_ref_frame_type ref_frame_flag, YV12_BUFFER_CONFIG *sd);
259 int vp8_set_reference(struct VP8_COMP* comp, enum vpx_ref_frame_type ref_frame_flag, YV12_BUFFER_CONFIG *sd);
260 int vp8_update_entropy(struct VP8_COMP* comp, int update);
261 int vp8_set_roimap(struct VP8_COMP* comp, unsigned char *map, unsigned int rows, unsigned int cols, int delta_q[4], int delta_lf[4], unsigned int threshold[4]);
262 int vp8_set_active_map(struct VP8_COMP* comp, unsigned char *map, unsigned int rows, unsigned int cols);
263 int vp8_set_internal_size(struct VP8_COMP* comp, VPX_SCALING horiz_mode, VPX_SCALING vert_mode);
264 int vp8_get_quantizer(struct VP8_COMP* c);
266 #ifdef __cplusplus
267 }
268 #endif
270 #endif