/*
|
*
|
* Copyright 2015 Rockchip Electronics Co. LTD
|
*
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
* you may not use this file except in compliance with the License.
|
* You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing, software
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
* limitations under the License.
|
*/
|
|
#ifndef __HAL_DEC_TASK__
|
#define __HAL_DEC_TASK__
|
|
#include "hal_task.h"
|
#include "mpp_callback.h"
|
|
#define MAX_DEC_REF_NUM 17
|
|
/*
|
* modified by parser and encoder
|
*
|
* number : the number of the data pointer array element
|
* data : the address of the pointer array, parser will add its data here
|
*/
|
typedef struct MppSyntax_t {
|
RK_U32 number;
|
void *data;
|
} MppSyntax;
|
|
typedef union HalDecTaskFlag_t {
|
RK_U32 val;
|
struct {
|
RK_U32 eos : 1;
|
RK_U32 info_change : 1;
|
|
/*
|
* Different error flags for task
|
*
|
* parse_err :
|
* When set it means fatal error happened at parsing stage
|
* This task should not enable hardware just output a empty frame with
|
* error flag.
|
*
|
* ref_err :
|
* When set it means current task is ok but it contains reference frame
|
* with error which will introduce error pixels to this frame.
|
*
|
* used_for_ref :
|
* When set it means this output frame will be used as reference frame
|
* for further decoding. When there is error on decoding this frame
|
* if used_for_ref is set then the frame will set errinfo flag
|
* if used_for_ref is cleared then the frame will set discard flag.
|
*/
|
RK_U32 parse_err : 1;
|
RK_U32 ref_err : 1;
|
RK_U32 used_for_ref : 1;
|
|
RK_U32 wait_done : 1;
|
};
|
} HalDecTaskFlag;
|
|
typedef struct HalDecTask_t {
|
// set by parser to signal that it is valid
|
RK_U32 valid;
|
HalDecTaskFlag flags;
|
|
// current tesk protocol syntax information
|
MppSyntax syntax;
|
|
// packet need to be copied to hardware buffer
|
// parser will create this packet and mpp_dec will copy it to hardware bufffer
|
MppPacket input_packet;
|
|
// current task input slot index
|
RK_S32 input;
|
|
RK_S32 reg_index;
|
// for test purpose
|
// current tesk output slot index
|
RK_S32 output;
|
|
// current task reference slot index, -1 for unused
|
RK_S32 refer[MAX_DEC_REF_NUM];
|
} HalDecTask;
|
|
typedef union HalDecVprocTaskFlag_t {
|
RK_U32 val;
|
|
struct {
|
RK_U32 eos : 1;
|
RK_U32 info_change : 1;
|
};
|
} HalDecVprocTaskFlag;
|
|
typedef struct HalDecVprocTask_t {
|
// input slot index for post-process
|
HalDecVprocTaskFlag flags;
|
|
RK_S32 input;
|
} HalDecVprocTask;
|
|
typedef union HalTask_u {
|
HalDecTask dec;
|
HalDecVprocTask dec_vproc;
|
} HalTaskInfo;
|
|
#endif /* __HAL_DEC_TASK__ */
|