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