11b362b15af34006e6a11974088a46d42b903418eJohann/*
21b362b15af34006e6a11974088a46d42b903418eJohann *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
31b362b15af34006e6a11974088a46d42b903418eJohann *
41b362b15af34006e6a11974088a46d42b903418eJohann *  Use of this source code is governed by a BSD-style license
51b362b15af34006e6a11974088a46d42b903418eJohann *  that can be found in the LICENSE file in the root of the source
61b362b15af34006e6a11974088a46d42b903418eJohann *  tree. An additional intellectual property rights grant can be found
71b362b15af34006e6a11974088a46d42b903418eJohann *  in the file PATENTS.  All contributing project authors may
81b362b15af34006e6a11974088a46d42b903418eJohann *  be found in the AUTHORS file in the root of the source tree.
91b362b15af34006e6a11974088a46d42b903418eJohann */
101b362b15af34006e6a11974088a46d42b903418eJohann
111b362b15af34006e6a11974088a46d42b903418eJohann
122ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian#ifndef VP8_COMMON_ONYX_H_
132ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian#define VP8_COMMON_ONYX_H_
141b362b15af34006e6a11974088a46d42b903418eJohann
151b362b15af34006e6a11974088a46d42b903418eJohann#ifdef __cplusplus
161b362b15af34006e6a11974088a46d42b903418eJohannextern "C"
171b362b15af34006e6a11974088a46d42b903418eJohann{
181b362b15af34006e6a11974088a46d42b903418eJohann#endif
191b362b15af34006e6a11974088a46d42b903418eJohann
201b362b15af34006e6a11974088a46d42b903418eJohann#include "vpx_config.h"
211b362b15af34006e6a11974088a46d42b903418eJohann#include "vpx/internal/vpx_codec_internal.h"
221b362b15af34006e6a11974088a46d42b903418eJohann#include "vpx/vp8cx.h"
231b362b15af34006e6a11974088a46d42b903418eJohann#include "vpx/vpx_encoder.h"
241b362b15af34006e6a11974088a46d42b903418eJohann#include "vpx_scale/yv12config.h"
251b362b15af34006e6a11974088a46d42b903418eJohann#include "ppflags.h"
261b362b15af34006e6a11974088a46d42b903418eJohann
271b362b15af34006e6a11974088a46d42b903418eJohann    struct VP8_COMP;
281b362b15af34006e6a11974088a46d42b903418eJohann
291b362b15af34006e6a11974088a46d42b903418eJohann    /* Create/destroy static data structures. */
301b362b15af34006e6a11974088a46d42b903418eJohann
311b362b15af34006e6a11974088a46d42b903418eJohann    typedef enum
321b362b15af34006e6a11974088a46d42b903418eJohann    {
331b362b15af34006e6a11974088a46d42b903418eJohann        NORMAL      = 0,
341b362b15af34006e6a11974088a46d42b903418eJohann        FOURFIVE    = 1,
351b362b15af34006e6a11974088a46d42b903418eJohann        THREEFIVE   = 2,
361b362b15af34006e6a11974088a46d42b903418eJohann        ONETWO      = 3
371b362b15af34006e6a11974088a46d42b903418eJohann
381b362b15af34006e6a11974088a46d42b903418eJohann    } VPX_SCALING;
391b362b15af34006e6a11974088a46d42b903418eJohann
401b362b15af34006e6a11974088a46d42b903418eJohann    typedef enum
411b362b15af34006e6a11974088a46d42b903418eJohann    {
422ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian        USAGE_LOCAL_FILE_PLAYBACK   = 0x0,
432ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian        USAGE_STREAM_FROM_SERVER    = 0x1,
441184aebb761cbeac9124c37189a80a1a58f04b6bhkuang        USAGE_CONSTRAINED_QUALITY   = 0x2,
451184aebb761cbeac9124c37189a80a1a58f04b6bhkuang        USAGE_CONSTANT_QUALITY      = 0x3
461b362b15af34006e6a11974088a46d42b903418eJohann    } END_USAGE;
471b362b15af34006e6a11974088a46d42b903418eJohann
481b362b15af34006e6a11974088a46d42b903418eJohann
491b362b15af34006e6a11974088a46d42b903418eJohann    typedef enum
501b362b15af34006e6a11974088a46d42b903418eJohann    {
511b362b15af34006e6a11974088a46d42b903418eJohann        MODE_REALTIME       = 0x0,
521b362b15af34006e6a11974088a46d42b903418eJohann        MODE_GOODQUALITY    = 0x1,
531b362b15af34006e6a11974088a46d42b903418eJohann        MODE_BESTQUALITY    = 0x2,
541b362b15af34006e6a11974088a46d42b903418eJohann        MODE_FIRSTPASS      = 0x3,
551b362b15af34006e6a11974088a46d42b903418eJohann        MODE_SECONDPASS     = 0x4,
561b362b15af34006e6a11974088a46d42b903418eJohann        MODE_SECONDPASS_BEST = 0x5
571b362b15af34006e6a11974088a46d42b903418eJohann    } MODE;
581b362b15af34006e6a11974088a46d42b903418eJohann
591b362b15af34006e6a11974088a46d42b903418eJohann    typedef enum
601b362b15af34006e6a11974088a46d42b903418eJohann    {
611b362b15af34006e6a11974088a46d42b903418eJohann        FRAMEFLAGS_KEY    = 1,
621b362b15af34006e6a11974088a46d42b903418eJohann        FRAMEFLAGS_GOLDEN = 2,
631b362b15af34006e6a11974088a46d42b903418eJohann        FRAMEFLAGS_ALTREF = 4
641b362b15af34006e6a11974088a46d42b903418eJohann    } FRAMETYPE_FLAGS;
651b362b15af34006e6a11974088a46d42b903418eJohann
661b362b15af34006e6a11974088a46d42b903418eJohann
671b362b15af34006e6a11974088a46d42b903418eJohann#include <assert.h>
682263fc984bdc858ee931d3e35c87c404de923950Johann    static INLINE void Scale2Ratio(int mode, int *hr, int *hs)
691b362b15af34006e6a11974088a46d42b903418eJohann    {
701b362b15af34006e6a11974088a46d42b903418eJohann        switch (mode)
711b362b15af34006e6a11974088a46d42b903418eJohann        {
721b362b15af34006e6a11974088a46d42b903418eJohann        case    NORMAL:
731b362b15af34006e6a11974088a46d42b903418eJohann            *hr = 1;
741b362b15af34006e6a11974088a46d42b903418eJohann            *hs = 1;
751b362b15af34006e6a11974088a46d42b903418eJohann            break;
761b362b15af34006e6a11974088a46d42b903418eJohann        case    FOURFIVE:
771b362b15af34006e6a11974088a46d42b903418eJohann            *hr = 4;
781b362b15af34006e6a11974088a46d42b903418eJohann            *hs = 5;
791b362b15af34006e6a11974088a46d42b903418eJohann            break;
801b362b15af34006e6a11974088a46d42b903418eJohann        case    THREEFIVE:
811b362b15af34006e6a11974088a46d42b903418eJohann            *hr = 3;
821b362b15af34006e6a11974088a46d42b903418eJohann            *hs = 5;
831b362b15af34006e6a11974088a46d42b903418eJohann            break;
841b362b15af34006e6a11974088a46d42b903418eJohann        case    ONETWO:
851b362b15af34006e6a11974088a46d42b903418eJohann            *hr = 1;
861b362b15af34006e6a11974088a46d42b903418eJohann            *hs = 2;
871b362b15af34006e6a11974088a46d42b903418eJohann            break;
881b362b15af34006e6a11974088a46d42b903418eJohann        default:
891b362b15af34006e6a11974088a46d42b903418eJohann            *hr = 1;
901b362b15af34006e6a11974088a46d42b903418eJohann            *hs = 1;
911b362b15af34006e6a11974088a46d42b903418eJohann            assert(0);
921b362b15af34006e6a11974088a46d42b903418eJohann            break;
931b362b15af34006e6a11974088a46d42b903418eJohann        }
941b362b15af34006e6a11974088a46d42b903418eJohann    }
951b362b15af34006e6a11974088a46d42b903418eJohann
961b362b15af34006e6a11974088a46d42b903418eJohann    typedef struct
971b362b15af34006e6a11974088a46d42b903418eJohann    {
981b362b15af34006e6a11974088a46d42b903418eJohann        /* 4 versions of bitstream defined:
991b362b15af34006e6a11974088a46d42b903418eJohann         *   0 best quality/slowest decode, 3 lowest quality/fastest decode
1001b362b15af34006e6a11974088a46d42b903418eJohann         */
1011b362b15af34006e6a11974088a46d42b903418eJohann        int Version;
1021b362b15af34006e6a11974088a46d42b903418eJohann        int Width;
1031b362b15af34006e6a11974088a46d42b903418eJohann        int Height;
1041b362b15af34006e6a11974088a46d42b903418eJohann        struct vpx_rational  timebase;
1051b362b15af34006e6a11974088a46d42b903418eJohann        unsigned int target_bandwidth;    /* kilobits per second */
1061b362b15af34006e6a11974088a46d42b903418eJohann
107ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        /* Parameter used for applying denoiser.
108ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian         * For temporal denoiser: noise_sensitivity = 0 means off,
109ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian         * noise_sensitivity = 1 means temporal denoiser on for Y channel only,
110ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian         * noise_sensitivity = 2 means temporal denoiser on for all channels.
111da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian         * noise_sensitivity = 3 means aggressive denoising mode.
112da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian         * noise_sensitivity >= 4 means adaptive denoising mode.
113ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian         * Temporal denoiser is enabled via the configuration option:
114ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian         * CONFIG_TEMPORAL_DENOISING.
115ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian         * For spatial denoiser: noise_sensitivity controls the amount of
116ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian         * pre-processing blur: noise_sensitivity = 0 means off.
117ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian         * Spatial denoiser invoked under !CONFIG_TEMPORAL_DENOISING.
118ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian         */
1191b362b15af34006e6a11974088a46d42b903418eJohann        int noise_sensitivity;
1201b362b15af34006e6a11974088a46d42b903418eJohann
1211b362b15af34006e6a11974088a46d42b903418eJohann        /* parameter used for sharpening output: recommendation 0: */
1221b362b15af34006e6a11974088a46d42b903418eJohann        int Sharpness;
1231b362b15af34006e6a11974088a46d42b903418eJohann        int cpu_used;
1241b362b15af34006e6a11974088a46d42b903418eJohann        unsigned int rc_max_intra_bitrate_pct;
125da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        unsigned int screen_content_mode;
1261b362b15af34006e6a11974088a46d42b903418eJohann
1271b362b15af34006e6a11974088a46d42b903418eJohann        /* mode ->
1281b362b15af34006e6a11974088a46d42b903418eJohann         *(0)=Realtime/Live Encoding. This mode is optimized for realtim
1291b362b15af34006e6a11974088a46d42b903418eJohann         *    encoding (for example, capturing a television signal or feed
1301b362b15af34006e6a11974088a46d42b903418eJohann         *    from a live camera). ( speed setting controls how fast )
1311b362b15af34006e6a11974088a46d42b903418eJohann         *(1)=Good Quality Fast Encoding. The encoder balances quality with
1321b362b15af34006e6a11974088a46d42b903418eJohann         *    the amount of time it takes to encode the output. ( speed
1331b362b15af34006e6a11974088a46d42b903418eJohann         *    setting controls how fast )
1341b362b15af34006e6a11974088a46d42b903418eJohann         *(2)=One Pass - Best Quality. The encoder places priority on the
1351b362b15af34006e6a11974088a46d42b903418eJohann         *    quality of the output over encoding speed. The output is
1361b362b15af34006e6a11974088a46d42b903418eJohann         *    compressed at the highest possible quality. This option takes
1371b362b15af34006e6a11974088a46d42b903418eJohann         *    the longest amount of time to encode. ( speed setting ignored
1381b362b15af34006e6a11974088a46d42b903418eJohann         *    )
1391b362b15af34006e6a11974088a46d42b903418eJohann         *(3)=Two Pass - First Pass. The encoder generates a file of
1401b362b15af34006e6a11974088a46d42b903418eJohann         *    statistics for use in the second encoding pass. ( speed
1411b362b15af34006e6a11974088a46d42b903418eJohann         *    setting controls how fast )
1421b362b15af34006e6a11974088a46d42b903418eJohann         *(4)=Two Pass - Second Pass. The encoder uses the statistics that
1431b362b15af34006e6a11974088a46d42b903418eJohann         *    were generated in the first encoding pass to create the
1441b362b15af34006e6a11974088a46d42b903418eJohann         *    compressed output. ( speed setting controls how fast )
1451b362b15af34006e6a11974088a46d42b903418eJohann         *(5)=Two Pass - Second Pass Best.  The encoder uses the statistics
1461b362b15af34006e6a11974088a46d42b903418eJohann         *    that were generated in the first encoding pass to create the
1471b362b15af34006e6a11974088a46d42b903418eJohann         *    compressed output using the highest possible quality, and
1481b362b15af34006e6a11974088a46d42b903418eJohann         *    taking a longer amount of time to encode.. ( speed setting
1491b362b15af34006e6a11974088a46d42b903418eJohann         *    ignored )
1501b362b15af34006e6a11974088a46d42b903418eJohann         */
1511b362b15af34006e6a11974088a46d42b903418eJohann        int Mode;
1521b362b15af34006e6a11974088a46d42b903418eJohann
1531b362b15af34006e6a11974088a46d42b903418eJohann        /* Key Framing Operations */
1541b362b15af34006e6a11974088a46d42b903418eJohann        int auto_key;       /* automatically detect cut scenes */
1551b362b15af34006e6a11974088a46d42b903418eJohann        int key_freq;       /* maximum distance to key frame. */
1561b362b15af34006e6a11974088a46d42b903418eJohann
1571b362b15af34006e6a11974088a46d42b903418eJohann        /* lagged compression (if allow_lag == 0 lag_in_frames is ignored) */
1581b362b15af34006e6a11974088a46d42b903418eJohann        int allow_lag;
1591b362b15af34006e6a11974088a46d42b903418eJohann        int lag_in_frames; /* how many frames lag before we start encoding */
1601b362b15af34006e6a11974088a46d42b903418eJohann
1611b362b15af34006e6a11974088a46d42b903418eJohann        /*
1621b362b15af34006e6a11974088a46d42b903418eJohann         * DATARATE CONTROL OPTIONS
1631b362b15af34006e6a11974088a46d42b903418eJohann         */
1641b362b15af34006e6a11974088a46d42b903418eJohann
1651b362b15af34006e6a11974088a46d42b903418eJohann        int end_usage; /* vbr or cbr */
1661b362b15af34006e6a11974088a46d42b903418eJohann
1671b362b15af34006e6a11974088a46d42b903418eJohann        /* buffer targeting aggressiveness */
1681b362b15af34006e6a11974088a46d42b903418eJohann        int under_shoot_pct;
1691b362b15af34006e6a11974088a46d42b903418eJohann        int over_shoot_pct;
1701b362b15af34006e6a11974088a46d42b903418eJohann
1711b362b15af34006e6a11974088a46d42b903418eJohann        /* buffering parameters */
1721b362b15af34006e6a11974088a46d42b903418eJohann        int64_t starting_buffer_level;
1731b362b15af34006e6a11974088a46d42b903418eJohann        int64_t optimal_buffer_level;
1741b362b15af34006e6a11974088a46d42b903418eJohann        int64_t maximum_buffer_size;
1751b362b15af34006e6a11974088a46d42b903418eJohann
1761b362b15af34006e6a11974088a46d42b903418eJohann        int64_t starting_buffer_level_in_ms;
1771b362b15af34006e6a11974088a46d42b903418eJohann        int64_t optimal_buffer_level_in_ms;
1781b362b15af34006e6a11974088a46d42b903418eJohann        int64_t maximum_buffer_size_in_ms;
1791b362b15af34006e6a11974088a46d42b903418eJohann
1801b362b15af34006e6a11974088a46d42b903418eJohann        /* controlling quality */
1811b362b15af34006e6a11974088a46d42b903418eJohann        int fixed_q;
1821b362b15af34006e6a11974088a46d42b903418eJohann        int worst_allowed_q;
1831b362b15af34006e6a11974088a46d42b903418eJohann        int best_allowed_q;
1841b362b15af34006e6a11974088a46d42b903418eJohann        int cq_level;
1851b362b15af34006e6a11974088a46d42b903418eJohann
1861b362b15af34006e6a11974088a46d42b903418eJohann        /* allow internal resizing */
1871b362b15af34006e6a11974088a46d42b903418eJohann        int allow_spatial_resampling;
1881b362b15af34006e6a11974088a46d42b903418eJohann        int resample_down_water_mark;
1891b362b15af34006e6a11974088a46d42b903418eJohann        int resample_up_water_mark;
1901b362b15af34006e6a11974088a46d42b903418eJohann
1911b362b15af34006e6a11974088a46d42b903418eJohann        /* allow internal frame rate alterations */
1921b362b15af34006e6a11974088a46d42b903418eJohann        int allow_df;
1931b362b15af34006e6a11974088a46d42b903418eJohann        int drop_frames_water_mark;
1941b362b15af34006e6a11974088a46d42b903418eJohann
1951b362b15af34006e6a11974088a46d42b903418eJohann        /* two pass datarate control */
1961b362b15af34006e6a11974088a46d42b903418eJohann        int two_pass_vbrbias;
1971b362b15af34006e6a11974088a46d42b903418eJohann        int two_pass_vbrmin_section;
1981b362b15af34006e6a11974088a46d42b903418eJohann        int two_pass_vbrmax_section;
1991b362b15af34006e6a11974088a46d42b903418eJohann
2001b362b15af34006e6a11974088a46d42b903418eJohann        /*
2011b362b15af34006e6a11974088a46d42b903418eJohann         * END DATARATE CONTROL OPTIONS
2021b362b15af34006e6a11974088a46d42b903418eJohann         */
2031b362b15af34006e6a11974088a46d42b903418eJohann
2041b362b15af34006e6a11974088a46d42b903418eJohann        /* these parameters aren't to be used in final build don't use!!! */
2051b362b15af34006e6a11974088a46d42b903418eJohann        int play_alternate;
2061b362b15af34006e6a11974088a46d42b903418eJohann        int alt_freq;
2071b362b15af34006e6a11974088a46d42b903418eJohann        int alt_q;
2081b362b15af34006e6a11974088a46d42b903418eJohann        int key_q;
2091b362b15af34006e6a11974088a46d42b903418eJohann        int gold_q;
2101b362b15af34006e6a11974088a46d42b903418eJohann
2111b362b15af34006e6a11974088a46d42b903418eJohann
2121b362b15af34006e6a11974088a46d42b903418eJohann        int multi_threaded;   /* how many threads to run the encoder on */
2131b362b15af34006e6a11974088a46d42b903418eJohann        int token_partitions; /* how many token partitions to create */
2141b362b15af34006e6a11974088a46d42b903418eJohann
2151b362b15af34006e6a11974088a46d42b903418eJohann        /* early breakout threshold: for video conf recommend 800 */
2161b362b15af34006e6a11974088a46d42b903418eJohann        int encode_breakout;
2171b362b15af34006e6a11974088a46d42b903418eJohann
2181b362b15af34006e6a11974088a46d42b903418eJohann        /* Bitfield defining the error resiliency features to enable.
2191b362b15af34006e6a11974088a46d42b903418eJohann         * Can provide decodable frames after losses in previous
2201b362b15af34006e6a11974088a46d42b903418eJohann         * frames and decodable partitions after losses in the same frame.
2211b362b15af34006e6a11974088a46d42b903418eJohann         */
2221b362b15af34006e6a11974088a46d42b903418eJohann        unsigned int error_resilient_mode;
2231b362b15af34006e6a11974088a46d42b903418eJohann
2241b362b15af34006e6a11974088a46d42b903418eJohann        int arnr_max_frames;
2251b362b15af34006e6a11974088a46d42b903418eJohann        int arnr_strength;
2261b362b15af34006e6a11974088a46d42b903418eJohann        int arnr_type;
2271b362b15af34006e6a11974088a46d42b903418eJohann
228da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian        vpx_fixed_buf_t        two_pass_stats_in;
2291b362b15af34006e6a11974088a46d42b903418eJohann        struct vpx_codec_pkt_list  *output_pkt_list;
2301b362b15af34006e6a11974088a46d42b903418eJohann
2311b362b15af34006e6a11974088a46d42b903418eJohann        vp8e_tuning tuning;
2321b362b15af34006e6a11974088a46d42b903418eJohann
2331b362b15af34006e6a11974088a46d42b903418eJohann        /* Temporal scaling parameters */
2341b362b15af34006e6a11974088a46d42b903418eJohann        unsigned int number_of_layers;
2351b362b15af34006e6a11974088a46d42b903418eJohann        unsigned int target_bitrate[VPX_TS_MAX_PERIODICITY];
2361b362b15af34006e6a11974088a46d42b903418eJohann        unsigned int rate_decimator[VPX_TS_MAX_PERIODICITY];
2371b362b15af34006e6a11974088a46d42b903418eJohann        unsigned int periodicity;
2381b362b15af34006e6a11974088a46d42b903418eJohann        unsigned int layer_id[VPX_TS_MAX_PERIODICITY];
2391b362b15af34006e6a11974088a46d42b903418eJohann
2401b362b15af34006e6a11974088a46d42b903418eJohann#if CONFIG_MULTI_RES_ENCODING
2411b362b15af34006e6a11974088a46d42b903418eJohann        /* Number of total resolutions encoded */
2421b362b15af34006e6a11974088a46d42b903418eJohann        unsigned int mr_total_resolutions;
2431b362b15af34006e6a11974088a46d42b903418eJohann
2441b362b15af34006e6a11974088a46d42b903418eJohann        /* Current encoder ID */
2451b362b15af34006e6a11974088a46d42b903418eJohann        unsigned int mr_encoder_id;
2461b362b15af34006e6a11974088a46d42b903418eJohann
2471b362b15af34006e6a11974088a46d42b903418eJohann        /* Down-sampling factor */
2481b362b15af34006e6a11974088a46d42b903418eJohann        vpx_rational_t mr_down_sampling_factor;
2491b362b15af34006e6a11974088a46d42b903418eJohann
2501b362b15af34006e6a11974088a46d42b903418eJohann        /* Memory location to store low-resolution encoder's mode info */
2511b362b15af34006e6a11974088a46d42b903418eJohann        void* mr_low_res_mode_info;
2521b362b15af34006e6a11974088a46d42b903418eJohann#endif
2531b362b15af34006e6a11974088a46d42b903418eJohann    } VP8_CONFIG;
2541b362b15af34006e6a11974088a46d42b903418eJohann
2551b362b15af34006e6a11974088a46d42b903418eJohann
2561b362b15af34006e6a11974088a46d42b903418eJohann    void vp8_initialize();
2571b362b15af34006e6a11974088a46d42b903418eJohann
2581b362b15af34006e6a11974088a46d42b903418eJohann    struct VP8_COMP* vp8_create_compressor(VP8_CONFIG *oxcf);
2591b362b15af34006e6a11974088a46d42b903418eJohann    void vp8_remove_compressor(struct VP8_COMP* *comp);
2601b362b15af34006e6a11974088a46d42b903418eJohann
2611b362b15af34006e6a11974088a46d42b903418eJohann    void vp8_init_config(struct VP8_COMP* onyx, VP8_CONFIG *oxcf);
2621b362b15af34006e6a11974088a46d42b903418eJohann    void vp8_change_config(struct VP8_COMP* onyx, VP8_CONFIG *oxcf);
2631b362b15af34006e6a11974088a46d42b903418eJohann
2641b362b15af34006e6a11974088a46d42b903418eJohann    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);
2651b362b15af34006e6a11974088a46d42b903418eJohann    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);
2661b362b15af34006e6a11974088a46d42b903418eJohann    int vp8_get_preview_raw_frame(struct VP8_COMP* comp, YV12_BUFFER_CONFIG *dest, vp8_ppflags_t *flags);
2671b362b15af34006e6a11974088a46d42b903418eJohann
2681b362b15af34006e6a11974088a46d42b903418eJohann    int vp8_use_as_reference(struct VP8_COMP* comp, int ref_frame_flags);
2691b362b15af34006e6a11974088a46d42b903418eJohann    int vp8_update_reference(struct VP8_COMP* comp, int ref_frame_flags);
2701b362b15af34006e6a11974088a46d42b903418eJohann    int vp8_get_reference(struct VP8_COMP* comp, enum vpx_ref_frame_type ref_frame_flag, YV12_BUFFER_CONFIG *sd);
2711b362b15af34006e6a11974088a46d42b903418eJohann    int vp8_set_reference(struct VP8_COMP* comp, enum vpx_ref_frame_type ref_frame_flag, YV12_BUFFER_CONFIG *sd);
2721b362b15af34006e6a11974088a46d42b903418eJohann    int vp8_update_entropy(struct VP8_COMP* comp, int update);
2731b362b15af34006e6a11974088a46d42b903418eJohann    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]);
2741b362b15af34006e6a11974088a46d42b903418eJohann    int vp8_set_active_map(struct VP8_COMP* comp, unsigned char *map, unsigned int rows, unsigned int cols);
2751b362b15af34006e6a11974088a46d42b903418eJohann    int vp8_set_internal_size(struct VP8_COMP* comp, VPX_SCALING horiz_mode, VPX_SCALING vert_mode);
2761b362b15af34006e6a11974088a46d42b903418eJohann    int vp8_get_quantizer(struct VP8_COMP* c);
2771b362b15af34006e6a11974088a46d42b903418eJohann
2781b362b15af34006e6a11974088a46d42b903418eJohann#ifdef __cplusplus
2791b362b15af34006e6a11974088a46d42b903418eJohann}
2801b362b15af34006e6a11974088a46d42b903418eJohann#endif
2811b362b15af34006e6a11974088a46d42b903418eJohann
2822ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian#endif  // VP8_COMMON_ONYX_H_
283