182b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON/*
282b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON* Copyright (c) 2009-2011 Intel Corporation.  All rights reserved.
382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON*
482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON* Licensed under the Apache License, Version 2.0 (the "License");
582b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON* you may not use this file except in compliance with the License.
682b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON* You may obtain a copy of the License at
782b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON*
882b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON* http://www.apache.org/licenses/LICENSE-2.0
982b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON*
1082b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON* Unless required by applicable law or agreed to in writing, software
1182b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON* distributed under the License is distributed on an "AS IS" BASIS,
1282b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON* See the License for the specific language governing permissions and
1482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON* limitations under the License.
1582b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON*/
1682b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
1782b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON#ifndef VIDEO_DECODER_DEFS_H_
1882b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON#define VIDEO_DECODER_DEFS_H_
1982b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
2082b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON#include <va/va.h>
2182b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON#include <stdint.h>
2282b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
2382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON// format specific data, for future extension.
2482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTONstruct VideoExtensionBuffer {
2582b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t extType;
2682b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t extSize;
2782b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    uint8_t *extData;
2882b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON};
2982b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
3082b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTONtypedef enum {
3182b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    PACKED_FRAME_TYPE,
3282b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON} VIDEO_EXTENSION_TYPE;
3382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
3482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTONstruct VideoFrameRawData {
3582b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t width;
3682b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t height;
3782b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t pitch[3];
3882b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t offset[3];
3982b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    uint32_t fourcc;  //NV12
4082b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t size;
4182b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    uint8_t *data;
4282b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    bool own; // own data or derived from surface. If true, the library will release the memory during clearnup
4382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON};
4482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
4582b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTONstruct PackedFrameData {
4682b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int64_t timestamp;
4782b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t offSet;
4882b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON};
4982b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
5082b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON// flags for VideoDecodeBuffer, VideoConfigBuffer and VideoRenderBuffer
5182b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTONtypedef enum {
5282b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    // indicates if sample has discontinuity in time stamp (happen after seeking usually)
5382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    HAS_DISCONTINUITY = 0x01,
5482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
5582b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    // indicates wheter the sample contains a complete frame or end of frame.
5682b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    HAS_COMPLETE_FRAME = 0x02,
5782b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
5882b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    // indicate whether surfaceNumber field  in the VideoConfigBuffer is valid
5982b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    HAS_SURFACE_NUMBER = 0x04,
6082b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
6182b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    // indicate whether profile field in the VideoConfigBuffer is valid
6282b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    HAS_VA_PROFILE = 0x08,
6382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
6482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    // indicate whether output order will be the same as decoder order
6582b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    WANT_LOW_DELAY = 0x10, // make display order same as decoding order
6682b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
6782b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    // indicates whether error concealment algorithm should be enabled to automatically conceal error.
6882b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    WANT_ERROR_CONCEALMENT = 0x20,
6982b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
7082b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    // indicate wheter raw data should be output.
7182b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    WANT_RAW_OUTPUT = 0x40,
7282b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
7382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    // indicate sample is decoded but should not be displayed.
7482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    WANT_DECODE_ONLY = 0x80,
7582b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
7682b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    // indicate surfaceNumber field is valid and it contains minimum surface number to allocate.
7782b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    HAS_MINIMUM_SURFACE_NUMBER = 0x100,
7882b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
7982b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    // indicates surface created will be protected
8082b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    WANT_SURFACE_PROTECTION = 0x400,
8182b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
8282b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    // indicates if extra data is appended at end of buffer
8382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    HAS_EXTRADATA = 0x800,
8482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
8582b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    // indicates if buffer contains codec data
8682b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    HAS_CODECDATA = 0x1000,
8782b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
8882b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    // indicate if it use graphic buffer.
8982b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    USE_NATIVE_GRAPHIC_BUFFER = 0x2000,
9082b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
9182b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    // indicate whether it is a sync frame in container
9282b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    IS_SYNC_FRAME = 0x4000,
9382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
9482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    // indicate whether video decoder buffer contains secure data
9582b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    IS_SECURE_DATA = 0x8000,
9682b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
9782b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    // indicate it's the last output frame of the sequence
9882b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    IS_EOS = 0x10000,
9982b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
10082b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    // indicate should allocate tiling surfaces
10182b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    USE_TILING_MEMORY = 0x20000,
10282b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
10382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON     // indicate the frame has resolution change
10482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    IS_RESOLUTION_CHANGE = 0x40000,
10582b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
10682b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    // indicate whether video decoder buffer contains only one field
10782b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    IS_SINGLE_FIELD = 0x80000,
10882b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
10982b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    // indicate adaptive playback mode
11082b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    WANT_ADAPTIVE_PLAYBACK = 0x100000,
11182b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
11282b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    // indicate the modular drm type
11382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    IS_SUBSAMPLE_ENCRYPTION = 0x200000,
11482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
1151175ce579a69e847027026f615a053af76b792d5Tianmi Chen    // indicate meta data mode
1161175ce579a69e847027026f615a053af76b792d5Tianmi Chen    WANT_STORE_META_DATA = 0x400000,
11782b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON} VIDEO_BUFFER_FLAG;
11882b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
11982b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTONtypedef enum
12082b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON{
12182b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON        DecodeHeaderError   = 0,
12282b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON        DecodeMBError       = 1,
12382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON        DecodeSliceMissing  = 2,
12482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON        DecodeRefMissing    = 3,
12582b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON} VideoDecodeErrorType;
12682b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
12782b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON#define MAX_ERR_NUM 10
12882b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
12982b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTONstruct VideoDecodeBuffer {
13082b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    uint8_t *data;
13182b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t size;
13282b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int64_t timeStamp;
13382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    uint32_t flag;
13482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    uint32_t rotationDegrees;
13582b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    VideoExtensionBuffer *ext;
13682b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON};
13782b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
13882b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
13982b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON//#define MAX_GRAPHIC_BUFFER_NUM  (16 + 1 + 11)  // max DPB + 1 + AVC_EXTRA_NUM
14082b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON#define MAX_GRAPHIC_BUFFER_NUM 64 // extended for VPP
14182b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
14282b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTONstruct VideoConfigBuffer {
14382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    uint8_t *data;
14482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t size;
14582b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t width;
14682b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t height;
14782b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    uint32_t surfaceNumber;
14882b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    VAProfile profile;
14982b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    uint32_t flag;
15082b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    void *graphicBufferHandler[MAX_GRAPHIC_BUFFER_NUM];
151bb7b551f976e85040c4ddfb92100830c8c36d479Alistair Strachan    uint32_t graphicBufferHStride;
152bb7b551f976e85040c4ddfb92100830c8c36d479Alistair Strachan    uint32_t graphicBufferVStride;
15382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    uint32_t graphicBufferColorFormat;
15482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    uint32_t graphicBufferWidth;
15582b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    uint32_t graphicBufferHeight;
15682b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    VideoExtensionBuffer *ext;
15782b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    void* nativeWindow;
15882b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    uint32_t rotationDegrees;
159a6ebfeb41f53933b4a4882aab2b625b74204527dXigui Wang#ifdef TARGET_HAS_ISV
16082b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    uint32_t vppBufferNum;
16182b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON#endif
16282b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON};
16382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
16482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTONstruct VideoErrorInfo {
16582b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    VideoDecodeErrorType type;
16682b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    uint32_t num_mbs;
16782b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    union {
16882b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON        struct {uint32_t start_mb; uint32_t end_mb;} mb_pos;
16982b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    } error_data;
17082b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON};
17182b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
17282b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTONstruct VideoErrorBuffer {
17382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    uint32_t errorNumber;   // Error number should be no more than MAX_ERR_NUM
17482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON	int64_t timeStamp;      // presentation time stamp
17582b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    VideoErrorInfo errorArray[MAX_ERR_NUM];
17682b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON};
17782b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
17882b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTONstruct VideoRenderBuffer {
17982b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    VASurfaceID surface;
18082b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    VADisplay display;
18182b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t scanFormat;  //progressive,  top-field first, or bottom-field first
18282b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int64_t timeStamp;  // presentation time stamp
18382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    mutable volatile bool renderDone;  // indicated whether frame is rendered, this must be set to false by the client of this library once
18482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON                                        // surface is rendered. Not setting this flag will lead to DECODE_NO_SURFACE error.
18582b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    void * graphicBufferHandle;
18682b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t graphicBufferIndex;  //the index in graphichandle array
18782b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    uint32_t flag;
18882b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    mutable volatile bool driverRenderDone;
18982b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    VideoFrameRawData *rawData;
19082b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
19182b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    VideoErrorBuffer errBuf;
19282b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON};
19382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
19482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTONstruct VideoSurfaceBuffer {
19582b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    VideoRenderBuffer renderBuffer;
19682b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t pictureOrder;  // picture order count, valid only for AVC format
19782b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    bool referenceFrame;  // indicated whether frame associated with this surface is a reference I/P frame
19882b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    bool asReferernce; // indicated wheter frame is used as reference (as a result surface can not be used for decoding)
19982b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    VideoFrameRawData *mappedData;
20082b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    VideoSurfaceBuffer *next;
20182b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON};
20282b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
20382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTONstruct VideoFormatInfo {
20482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    bool valid;  // indicates whether format info is valid. MimeType is always valid.
20582b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    char *mimeType;
20682b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    uint32_t width;
20782b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    uint32_t height;
20882b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    uint32_t surfaceWidth;
20982b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    uint32_t surfaceHeight;
21082b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    uint32_t surfaceNumber;
21182b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    VASurfaceID *ctxSurfaces;
21282b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t aspectX;
21382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t aspectY;
21482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t cropLeft;
21582b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t cropRight;
21682b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t cropTop;
21782b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t cropBottom;
21882b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t colorMatrix;
21982b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t videoRange;
22082b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t bitrate;
22182b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t framerateNom;
22282b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t framerateDenom;
22382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    uint32_t actualBufferNeeded;
22482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    int32_t flags; // indicate whether current picture is field or frame
22582b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    VideoExtensionBuffer *ext;
22682b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON};
22782b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
22882b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON// TODO: categorize the follow errors as fatal and non-fatal.
22982b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTONtypedef enum {
23082b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    DECODE_NOT_STARTED = -10,
23182b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    DECODE_NEED_RESTART = -9,
23282b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    DECODE_NO_CONFIG = -8,
23382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    DECODE_NO_SURFACE = -7,
23482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    DECODE_NO_REFERENCE = -6,
23582b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    DECODE_NO_PARSER = -5,
23682b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    DECODE_INVALID_DATA = -4,
23782b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    DECODE_DRIVER_FAIL = -3,
23882b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    DECODE_PARSER_FAIL = -2,
23982b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    DECODE_MEMORY_FAIL = -1,
24082b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    DECODE_FAIL = 0,
24182b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    DECODE_SUCCESS = 1,
24282b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    DECODE_FORMAT_CHANGE = 2,
24382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    DECODE_FRAME_DROPPED = 3,
24482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    DECODE_MULTIPLE_FRAME = 4,
24582b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON} VIDEO_DECODE_STATUS;
24682b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
24782b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTONtypedef int32_t Decode_Status;
24882b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
24982b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON#ifndef NULL
25082b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON#define NULL 0
25182b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON#endif
25282b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
25382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTONinline bool checkFatalDecoderError(Decode_Status status) {
25482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    if (status == DECODE_NOT_STARTED ||
25582b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON        status == DECODE_NEED_RESTART ||
25682b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON        status == DECODE_NO_PARSER ||
25782b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON        status == DECODE_INVALID_DATA ||
25882b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON        status == DECODE_MEMORY_FAIL ||
25982b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON        status == DECODE_FAIL) {
26082b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON        return true;
26182b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    } else {
26282b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON        return false;
26382b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON    }
26482b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON}
26582b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON
26682b428e49a70ddc051a36d2b3a25d90db79770dcGuilhem IMBERTON#endif  // VIDEO_DECODER_DEFS_H_
267