190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/*
2f71323e297a928af368937089d3ed71239786f86Andreas Huber *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber *
4f71323e297a928af368937089d3ed71239786f86Andreas Huber *  Use of this source code is governed by a BSD-style license
5f71323e297a928af368937089d3ed71239786f86Andreas Huber *  that can be found in the LICENSE file in the root of the source
6f71323e297a928af368937089d3ed71239786f86Andreas Huber *  tree. An additional intellectual property rights grant can be found
7f71323e297a928af368937089d3ed71239786f86Andreas Huber *  in the file PATENTS.  All contributing project authors may
8f71323e297a928af368937089d3ed71239786f86Andreas Huber *  be found in the AUTHORS file in the root of the source tree.
990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber */
1090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef __INC_VP8_H
1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define __INC_VP8_H
1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifdef __cplusplus
1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberextern "C"
1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif
1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
20f71323e297a928af368937089d3ed71239786f86Andreas Huber#include "vpx/internal/vpx_codec_internal.h"
2179f15823c34ae1e423108295e416213200bb280fAndreas Huber#include "vpx/vp8cx.h"
2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "vpx_scale/yv12config.h"
2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "type_aliases.h"
2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "ppflags.h"
2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    typedef int *VP8_PTR;
2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    /* Create/destroy static data structures. */
2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    typedef enum
3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    {
3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        NORMAL      = 0,
3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        FOURFIVE    = 1,
3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        THREEFIVE   = 2,
3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ONETWO      = 3
3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    } VPX_SCALING;
3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    typedef enum
3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    {
4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        VP8_LAST_FLAG = 1,
4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        VP8_GOLD_FLAG = 2,
4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        VP8_ALT_FLAG = 4
4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    } VP8_REFFRAME;
4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    typedef enum
4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    {
4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        USAGE_STREAM_FROM_SERVER    = 0x0,
4979f15823c34ae1e423108295e416213200bb280fAndreas Huber        USAGE_LOCAL_FILE_PLAYBACK   = 0x1,
5079f15823c34ae1e423108295e416213200bb280fAndreas Huber        USAGE_CONSTRAINED_QUALITY   = 0x2
5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    } END_USAGE;
5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    typedef enum
5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    {
5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        MODE_REALTIME       = 0x0,
5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        MODE_GOODQUALITY    = 0x1,
5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        MODE_BESTQUALITY    = 0x2,
5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        MODE_FIRSTPASS      = 0x3,
6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        MODE_SECONDPASS     = 0x4,
6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        MODE_SECONDPASS_BEST = 0x5,
6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    } MODE;
6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    typedef enum
6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    {
6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        FRAMEFLAGS_KEY    = 1,
6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        FRAMEFLAGS_GOLDEN = 2,
6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        FRAMEFLAGS_ALTREF = 4,
6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    } FRAMETYPE_FLAGS;
7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include <assert.h>
7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    static __inline void Scale2Ratio(int mode, int *hr, int *hs)
7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    {
7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        switch (mode)
7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        {
7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case    NORMAL:
7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            *hr = 1;
7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            *hs = 1;
8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            break;
8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case    FOURFIVE:
8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            *hr = 4;
8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            *hs = 5;
8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            break;
8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case    THREEFIVE:
8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            *hr = 3;
8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            *hs = 5;
8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            break;
8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        case    ONETWO:
9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            *hr = 1;
9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            *hs = 2;
9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            break;
9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        default:
9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            *hr = 1;
9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            *hs = 1;
9690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            assert(0);
9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            break;
9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        }
9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    }
10090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    typedef struct
10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    {
10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int Version;            // 4 versions of bitstream defined 0 best quality/slowest decode, 3 lowest quality/fastest decode
10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int Width;              // width of data passed to the compressor
10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int Height;             // height of data passed to the compressor
10690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        double frame_rate;       // set to passed in framerate
10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int target_bandwidth;    // bandwidth to be used in kilobits per second
10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int noise_sensitivity;   // parameter used for applying pre processing blur: recommendation 0
11090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int Sharpness;          // parameter used for sharpening output: recommendation 0:
11190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int cpu_used;
11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        // mode ->
11490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        //(0)=Realtime/Live Encoding. This mode is optimized for realtim encoding (for example, capturing
11590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        //    a television signal or feed from a live camera). ( speed setting controls how fast )
11690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        //(1)=Good Quality Fast Encoding. The encoder balances quality with the amount of time it takes to
11790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        //    encode the output. ( speed setting controls how fast )
11890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        //(2)=One Pass - Best Quality. The encoder places priority on the quality of the output over encoding
11990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        //    speed. The output is compressed at the highest possible quality. This option takes the longest
12090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        //    amount of time to encode. ( speed setting ignored )
12190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        //(3)=Two Pass - First Pass. The encoder generates a file of statistics for use in the second encoding
12290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        //    pass. ( speed setting controls how fast )
12390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        //(4)=Two Pass - Second Pass. The encoder uses the statistics that were generated in the first encoding
12490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        //    pass to create the compressed output. ( speed setting controls how fast )
12590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        //(5)=Two Pass - Second Pass Best.  The encoder uses the statistics that were generated in the first
12690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        //    encoding pass to create the compressed output using the highest possible quality, and taking a
12790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        //    longer amount of time to encode.. ( speed setting ignored )
12890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int Mode;               //
12990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
13090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        // Key Framing Operations
13190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int auto_key;            // automatically detect cut scenes and set the keyframes
13290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int key_freq;            // maximum distance to key frame.
13390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
13490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int allow_lag;           // allow lagged compression (if 0 lagin frames is ignored)
13590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int lag_in_frames;        // how many frames lag before we start encoding
13690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
13790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        //----------------------------------------------------------------
13890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        // DATARATE CONTROL OPTIONS
13990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
14090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int end_usage; // vbr or cbr
14190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
14290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        // shoot to keep buffer full at all times by undershooting a bit 95 recommended
14390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int under_shoot_pct;
14490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
14590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        // buffering parameters
14690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int starting_buffer_level;  // in seconds
14790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int optimal_buffer_level;
14890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int maximum_buffer_size;
14990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        // controlling quality
15190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int fixed_q;
15290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int worst_allowed_q;
15390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int best_allowed_q;
15479f15823c34ae1e423108295e416213200bb280fAndreas Huber        int cq_level;
15590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        // allow internal resizing ( currently disabled in the build !!!!!)
15790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int allow_spatial_resampling;
15890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int resample_down_water_mark;
15990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int resample_up_water_mark;
16090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        // allow internal frame rate alterations
16290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int allow_df;
16390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int drop_frames_water_mark;
16490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        // two pass datarate control
16690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int two_pass_vbrbias;        // two pass datarate control tweaks
16790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int two_pass_vbrmin_section;
16890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int two_pass_vbrmax_section;
16990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        // END DATARATE CONTROL OPTIONS
17090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        //----------------------------------------------------------------
17190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        // these parameters aren't to be used in final build don't use!!!
17490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int play_alternate;
17590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int alt_freq;
17690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int alt_q;
17790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int key_q;
17890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int gold_q;
17990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int multi_threaded;   // how many threads to run the encoder on
18290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int token_partitions; // how many token partitions to create for multi core decoding
18390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int encode_breakout;  // early breakout encode threshold : for video conf recommend 800
18490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int error_resilient_mode;  // if running over udp networks provides decodable frames after a
18690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        // dropped packet
18790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int arnr_max_frames;
18990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int arnr_strength ;
19090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int arnr_type     ;
19190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
19290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        struct vpx_fixed_buf         two_pass_stats_in;
19390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        struct vpx_codec_pkt_list  *output_pkt_list;
19479f15823c34ae1e423108295e416213200bb280fAndreas Huber
19579f15823c34ae1e423108295e416213200bb280fAndreas Huber        vp8e_tuning tuning;
19690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    } VP8_CONFIG;
19790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
19890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
19990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    void vp8_initialize();
20090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
20190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    VP8_PTR vp8_create_compressor(VP8_CONFIG *oxcf);
20290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    void vp8_remove_compressor(VP8_PTR *comp);
20390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
20490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    void vp8_init_config(VP8_PTR onyx, VP8_CONFIG *oxcf);
20590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    void vp8_change_config(VP8_PTR onyx, VP8_CONFIG *oxcf);
20690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
20790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber// receive a frames worth of data caller can assume that a copy of this frame is made
20890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber// and not just a copy of the pointer..
20990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int vp8_receive_raw_frame(VP8_PTR comp, unsigned int frame_flags, YV12_BUFFER_CONFIG *sd, INT64 time_stamp, INT64 end_time_stamp);
21090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int vp8_get_compressed_data(VP8_PTR comp, unsigned int *frame_flags, unsigned long *size, unsigned char *dest, INT64 *time_stamp, INT64 *time_end, int flush);
21179f15823c34ae1e423108295e416213200bb280fAndreas Huber    int vp8_get_preview_raw_frame(VP8_PTR comp, YV12_BUFFER_CONFIG *dest, vp8_ppflags_t *flags);
21290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
21390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int vp8_use_as_reference(VP8_PTR comp, int ref_frame_flags);
21490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int vp8_update_reference(VP8_PTR comp, int ref_frame_flags);
21590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int vp8_get_reference(VP8_PTR comp, VP8_REFFRAME ref_frame_flag, YV12_BUFFER_CONFIG *sd);
21690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int vp8_set_reference(VP8_PTR comp, VP8_REFFRAME ref_frame_flag, YV12_BUFFER_CONFIG *sd);
21790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int vp8_update_entropy(VP8_PTR comp, int update);
21890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int vp8_set_roimap(VP8_PTR comp, unsigned char *map, unsigned int rows, unsigned int cols, int delta_q[4], int delta_lf[4], unsigned int threshold[4]);
21990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int vp8_set_active_map(VP8_PTR comp, unsigned char *map, unsigned int rows, unsigned int cols);
22090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int vp8_set_internal_size(VP8_PTR comp, VPX_SCALING horiz_mode, VPX_SCALING vert_mode);
22190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int vp8_get_quantizer(VP8_PTR c);
22290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
22390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifdef __cplusplus
22490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
22590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif
22690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
22790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif
228