/**
 * @brief           PGP Manager Header
 * @author          AXELL CORPORATION
 * @description     PGP Manager Layer.
 * @note            none
 * @history         2017_02_22  初版
 * @history         2017_10_26  Ver2.0
 * @history         2018_01_24  [SDK2.1] 画像前処理の制限項目によるエラーチェックと説明文の追加 (#1773)
 * @history         2018_01_24  [SDK2.1] ディザリング機能を有効にしても適切なパイプラインが割当てられない不具合対応 (#1767)
 * @history         2018_01_24  [SDK2.1] パイプライン入力ポートに指定するデジタルビデオ入力ポートハンドルの型に誤り (#1757)
 * @history         2019_03_08  [SDK2.2] PGPでのMALLOC/FREEの定義にプレフィックスを追加 (#2432)
 * @history         2019_12_27  [SDK3.0] PGPのラベリング解析関数が確保したリソースを解放する関数を追加 (#1951)
*/
/* DOM-IGNORE-BEGIN */
/*
 * This program was created by AXELL CORPORATION.
 * Copyright (C) 2017-2019 AXELL CORPORATION, all rights reserved.
 */

#ifndef PGPMGRH
#define PGPMGRH
/* DOM-IGNORE-END */

#ifdef __cplusplus
extern "C" {
#endif

#include <stdint.h>
#include <stdbool.h>
#include "AG903_errno.h"

/* 
 * パイプラインの時分割動作を使用しない場合は以下の定義を有効にすることでリソースの削減ができます<p> 
 * 現状では、時分割動作は「Disanble」 で使用して下さい。
*/
#define AG903_PGP_MGR_TS_FORCE_DISABLE

#ifdef AG903_PGP_MGR_TS_FORCE_DISABLE
/** パイプラインハンドル数の最大値 */
#define AG903_PGP_MGR_MAX_PIPELINE_HANDLE       (6)
/** VRAM入力ハンドルの最大値 */
#define AG903_PGP_MGR_MAX_VRAMI_HANDLE          (4)
/** フレーム間演算ハンドルの最大値 */
#define AG903_PGP_MGR_MAX_FRAME_CALC_HANDLE     (2)
/** 濃度変換テーブルの最大値 */
#define AG903_PGP_MGR_MAX_DGC_LUT               (8)
#else
#define AG903_PGP_MGR_MAX_PIPELINE_HANDLE       (16)
#define AG903_PGP_MGR_MAX_VRAMI_HANDLE          (16)
#define AG903_PGP_MGR_MAX_FRAME_CALC_HANDLE     (16)
#define AG903_PGP_MGR_MAX_DGC_LUT               (16)
#endif

/** 物理的なパイプラインハンドルの数 */
#define AG903_PGP_MGR_PIPELINE_NUM              (6)
/** 物理的なVRAM入力の数 */
#define AG903_PGP_MGR_VRAMI_NUM                 (4)
/** 物理的な演算パイプラインの数 */
#define AG903_PGP_MGR_CALC_PIPELINE_NUM         (2)

/** 演算処理パイプライン0 */
#define AG903_PGP_MGR_CALC_PIPELINE0            (0)
/** 演算処理パイプライン1 */
#define AG903_PGP_MGR_CALC_PIPELINE1            (1)
/** 入力画像処理パイプライン0 */
#define AG903_PGP_MGR_INPUT_PIPELINE0           (2)
/** 入力画像処理パイプライン1 */
#define AG903_PGP_MGR_INPUT_PIPELINE1           (3)
/** フレーム保存パイプライン0 */
#define AG903_PGP_MGR_FRAME_PIPELINE0           (4)
/** フレーム保存パイプライン1 */
#define AG903_PGP_MGR_FRAME_PIPELINE1           (5)

/** パイプラインの実行コマンドを溜めるキューの最大値 */
#define AG903_PGP_MGR_PIPELINE_CMD_MAX_QUEUE    (4)
/** VRAM入力の実行コマンドを溜めるキューの最大値 */
#define AG903_PGP_MGR_VI_CMD_MAX_QUEUE          (4)
/** ラベリング実行コマンドを溜めるキューの最大値 */
#define AG903_PGP_MGR_LBL_CMD_MAX_QUEUE         (4)
/** ヒストグラム実行コマンドを溜めるキューの最大値 */
#define AG903_PGP_MGR_HGM_CMD_MAX_QUEUE         (4)

/** 前処理パイプラインハンドルを識別するID */
#define AG903_PGP_MGR_PIPELINE_HANDLE_ID        (0x11223344)
/** VRAM入力ハンドルを識別するID */
#define AG903_PGP_MGR_VRAM_INPUT_HANDLE_ID      (0x55667788)
/** フレーム間演算ハンドルを識別するID */
#define AG903_PGP_MGR_FRAME_CALC_HANDLE_ID      (0x99AABBCC)
/** 濃度変換テーブルを識別するID */
#define AG903_PGP_MGR_DGC_LUT_ID                (0xDDEEFF00)

/** パイプラインコマンド（何もしない） */
#define AG903_PGP_MGR_CMD_NONE                  (0x0)
/** パイプラインコマンド（1ショットキャプチャを実行） */
#define AG903_PGP_MGR_CMD_EXEC                      (0x1)
/** パイプラインコマンド（連続キャプチャを実行） */
#define AG903_PGP_MGR_CMD_EXEC_CONTINUE             (0x2)
/** パイプラインコマンド（トリガ起動キャプチャを実行） */
#define AG903_PGP_MGR_CMD_TRIG                      (0x3)
/** パイプラインコマンド（トリガ起動連続キャプチャを実行） */
#define AG903_PGP_MGR_CMD_TRIG_CONTINUE             (0x4)
/** パイプラインコマンド（アイドル状態へ移行、コマンドキュー削除） */
#define AG903_PGP_MGR_CMD_IDLE                      (0x8)
/** パイプラインコマンド（タイプスタンプカウンタリセット） */
#define AG903_PGP_MGR_CMD_RESET_TIMESTAMP_CNT       (0x9)
/** パイプラインコマンド（フレーム通し番号カウンタリセット） */
#define AG903_PGP_MGR_CMD_RESET_FRAME_CNT           (0xA)
/** パイプラインコマンド（割り込み用フレームカウンタリセット） */
#define AG903_PGP_MGR_CMD_RESET_INTR_CNT            (0xB)
/** パイプラインコマンド（キャプチャ強制終了（ハードリセット） */
#define AG903_PGP_MGR_CMD_FORCE_QUIT                (0xF)

/** VSYNC割り込みを発生するフィールドを奇数フィールドに設定 */
#define AG903_PGP_MGR_INTR_CTRL_FIELD_ODD       (0x1)
/** VSYNC割り込みを発生するフィールドを偶数フィールドに設定 */
#define AG903_PGP_MGR_INTR_CTRL_FIELD_EVEN      (0x2)
/** VSYNC割り込みを発生するフィールドを奇数・偶数フィールドに設定 */
#define AG903_PGP_MGR_INTR_CTRL_FIELD_ODD_EVEN  (0x3)

/** 入出力割り込みのフレームカウンタ最大値 */
#define AG903_PGP_MGR_INTR_CTRL_MAX_FRAME_CNT   (16)

/** 入力ライン割り込みを発生させるライン番号の最大値 */
#define AG903_PGP_MGR_INTR_CTRL_MAX_INPUT_LINE  (8191)
/** 出力ライン割り込みを発生させるライン番号の最大値 */
#define AG903_PGP_MGR_INTR_CTRL_MAX_OUTPUT_LINE (4095)

/** パイプラインステート（アイドル状態） */
#define AG903_PGP_MGR_STATE_IDLE                (0x0)
/** パイプラインステート（1ショットキャプチャが実行中） */
#define AG903_PGP_MGR_STATE_1SHOT               (0x1)
/** パイプラインステート（連続キャプチャが実行中） */
#define AG903_PGP_MGR_STATE_CONTINUE            (0x2)
/** パイプラインステート（トリガ起動キャプチャが実行中） */
#define AG903_PGP_MGR_STATE_TRIG                (0x3)
/** パイプラインステート（トリガ起動連続キャプチャが実行中） */
#define AG903_PGP_MGR_STATE_TRIG_CONTINUE       (0x4)
/** パイプラインステート（強制終了処理中） */
#define AG903_PGP_MGR_STATE_FORCE_QUIT          (0xF)
/** パイプラインサブステート（トリガ待ち） */
#define AG903_PGP_MGR_SUBSTATE_TRIG_WAIT        (0x1)
/** パイプラインサブステート（VSYNC待ち） */
#define AG903_PGP_MGR_SUBSTATE_VSYNC_WAIT       (0x2)
/** パイプラインサブステート（キャプチャ実行中） */
#define AG903_PGP_MGR_SUBSTATE_EXEC             (0x3)

/** VSYNCトリガを発生するフィールドを奇数フィールドに設定 */
#define AG903_PGP_MGR_TRIG_CTRL_FIELD_ODD       (0x1)
/** VSYNCトリガを発生するフィールドを偶数フィールドに設定 */
#define AG903_PGP_MGR_TRIG_CTRL_FIELD_EVEN      (0x2)
/** VSYNCトリガを発生するフィールドを奇数・偶数フィールドに設定 */
#define AG903_PGP_MGR_TRIG_CTRL_FIELD_ODD_EVEN  (0x3)

/** トリガのフレームカウンタ最大値 */
#define AG903_PGP_MGR_TRIG_CTRL_MAX_FRAME_CNT   (16)

/** 入力ライントリガを発生させるライン番号の最大値 */
#define AG903_PGP_MGR_TRIG_CTRL_MAX_INPUT_LINE  (8191)
/** 出力ライントリガを発生させるライン番号の最大値 */
#define AG903_PGP_MGR_TRIG_CTRL_MAX_OUTPUT_LINE (4095)

/** キャプチャ入力のHSYNCに対する遅延の最大値 */
#define AG903_PGP_MGR_MAX_INPUT_HSYNC_DELAY     (0x7)

/** キャプチャ開始・終了をVSYNCを基準 */
#define AG903_PGP_MGR_INPUT_MD_VSYNC            (0)
/** キャプチャ開始・終了をODDフィールドのVSYNCを基準 */
#define AG903_PGP_MGR_INPUT_MD_ODD_VSYNC        (1)

/** タイムスタンプ生成にクロックソース0を用いる */
#define AG903_PGP_MGR_INPUT_TIME_CLK0           (0)
/** タイムスタンプ生成にクロックソース1を用いる */
#define AG903_PGP_MGR_INPUT_TIME_CLK1           (1)

/** トリガ起動時タイマモジュールのチャンネル番号 */
#define AG903_PGP_MGR_MAX_TRIG_TIMER_CHANNEL    (7)

/** アナログ入力0 */
#define AG903_PGP_MGR_INPUT_PORT_VIA_0          (0)
/** アナログ入力1 */
#define AG903_PGP_MGR_INPUT_PORT_VIA_1          (1)
/** アナログ入力2 */
#define AG903_PGP_MGR_INPUT_PORT_VIA_2          (2)
/** アナログ入力3 */
#define AG903_PGP_MGR_INPUT_PORT_VIA_3          (3)
/** デジタル入力0 */
#define AG903_PGP_MGR_INPUT_PORT_VID_0          (4)
/** デジタル入力1 */
#define AG903_PGP_MGR_INPUT_PORT_VID_1          (5)
/** デジタル入力2 */
#define AG903_PGP_MGR_INPUT_PORT_VID_2          (6)
/** デジタル入力3 */
#define AG903_PGP_MGR_INPUT_PORT_VID_3          (7)
/** VRAM入力0 */
#define AG903_PGP_MGR_INPUT_PORT_VRAM_0         (8)
/** VRAM入力1 */
#define AG903_PGP_MGR_INPUT_PORT_VRAM_1         (9)

/** キャプチャフォーマットRGB888 */
#define AG903_PGP_MGR_INPUT_FMT_RGB888          (0x0)
/** キャプチャフォーマットRGB565 */
#define AG903_PGP_MGR_INPUT_FMT_RGB565          (0x1)
/** キャプチャフォーマットYCbCr444 */
#define AG903_PGP_MGR_INPUT_FMT_YCBCR444        (0x2)
/** キャプチャフォーマットYCbCr422 I/P変換なし */
#define AG903_PGP_MGR_INPUT_FMT_YCBCR422_WO_IP  (0x3)
/** キャプチャフォーマットYCbCr422 I/P変換あり */
#define AG903_PGP_MGR_INPUT_FMT_YCBCR422_W_IP   (0x4)
/** キャプチャフォーマットCLUT8 */
#define AG903_PGP_MGR_INPUT_FMT_CLUT8           (0x5)
/** キャプチャフォーマットCLUT1 */
#define AG903_PGP_MGR_INPUT_FMT_CLUT1           (0x6)

/** 演算処理パイプラインにおいて、フレーム間演算→演算処理の処理順で処理 */
#define AG903_PGP_MGR_IFCODR_FRAME_TO_OTHER     (0x0)
/** 演算処理パイプラインにおいて、演算処理→フレーム間演算の処理順で処理 */
#define AG903_PGP_MGR_IFCODR_OTHER_TO_FRAME     (0x1)

/** キャプチャサイズの最大値（垂直、水平サイズ） */
#define AG903_PGP_MGR_MAX_INPUT_SIZE            (4096)

/** キャプチャ開始座標の最大値（垂直位置、水平位置） */
#define AG903_PGP_MGR_MAX_INPUT_POS             (8191)

/** フレーム保存のパディング値の最大値 */
#define AG903_PGP_MGR_MAX_OUTPUT_PAD            (255)

/** リミット無し */
#define AG903_PGP_MGR_LIMIT_NONE                (0x0)
/** リミット動作を0〜255に制限 */
#define AG903_PGP_MGR_LIMIT_0_255               (0x0)
/** リミット動作を16〜235([23:16]), 240([15:8], [7:0])に制限 */
#define AG903_PGP_MGR_LIMIT_16_235_AND_240      (0x1)
/** リミット動作を-128〜127に制限 */
#define AG903_PGP_MGR_LIMIT_M128_127            (0x2)

/** フレーム走査方法プログレッシブ */
#define AG903_PGP_MGR_SCAN_PROGRESSIVE          (0x0)
/** フレーム走査方法インタレース */
#define AG903_PGP_MGR_SCAN_INTERLACE            (0x1)

/** アドレス指定に1次元アドレス */
#define AG903_PGP_MGR_ADDR_DIMENTION_1          (0x0)
/** アドレス指定に2次元アドレス */
#define AG903_PGP_MGR_ADDR_DIMENTION_2          (0x1)

/** 2次元アドレス時のストライドバイトの最大値 */
#define AG903_PGP_MGR_OUTPUT_MAX_STRIDE_BYTE    (16384)

/** インタレース入力のフレーム保存方法に奇数フレームのみを指定 */
#define AG903_PGP_MGR_OUTPUT_FRAME_SAVE_ODD             (0x0)
/** インタレース入力のフレーム保存方法に偶数フレームのみを指定 */
#define AG903_PGP_MGR_OUTPUT_FRAME_SAVE_EVEN            (0x1)
/** インタレース入力のフレーム保存方法にフィールド無視を指定 */
#define AG903_PGP_MGR_OUTPUT_FRAME_SAVE_IGNORE_FIELD    (0x2)
/** インタレース入力のフレーム保存方法にフィールドに従うを指定 */
#define AG903_PGP_MGR_OUTPUT_FRAME_SAVE_FIELD           (0x3)
/** インタレース入力のフレーム保存方法にWeaveを指定 */
#define AG903_PGP_MGR_OUTPUT_FRAME_SAVE_WEAVE           (0x4)

/** バッファ管理ユニット無効 */
#define AG903_PGP_MGR_OUTPUT_BMU_NONE           (0x0)
/** バッファ管理ユニット有効。フィールドに関係なく更新 */
#define AG903_PGP_MGR_OUTPUT_BMU_ENABLE         (0x1)
/** バッファ管理ユニット有効。EVENフィールド終了時開始時に更新 */
#define AG903_PGP_MGR_OUTPUT_BMU_ENABLE_EVEN    (0x2)

/** 出力フォーマットRGB888→RGB888（32bit） */
#define AG903_PGP_MGR_OUTPUT_FMT_RGB888_TO_RGB888_32BIT     (0x0)
/** 出力フォーマットRGB888→RGB888（24bit） */
#define AG903_PGP_MGR_OUTPUT_FMT_RGB888_TO_RGB888_24BIT     (0x1)
/** 出力フォーマットRGB888→RGB565 */
#define AG903_PGP_MGR_OUTPUT_FMT_RGB888_TO_RGB565           (0x2)
/** 出力フォーマットRGB888→ARGB1555 */
#define AG903_PGP_MGR_OUTPUT_FMT_RGB888_TO_ARGB1555         (0x3)
/** 出力フォーマットRGB888→ARGB4444 */
#define AG903_PGP_MGR_OUTPUT_FMT_RGB888_TO_ARGB4444         (0x4)
/** 出力フォーマットRGB888→RGB888 RGB分離 */
#define AG903_PGP_MGR_OUTPUT_FMT_RGB888_TO_RGB888_SEP       (0x5)
/** 出力フォーマットYCbCr444→YCbCr444（32bit） */
#define AG903_PGP_MGR_OUTPUT_FMT_YCBCR444_TO_YCBCR444_32BIT (0x8)
/** 出力フォーマットYCbCr444→YCbCr444（24bit） */
#define AG903_PGP_MGR_OUTPUT_FMT_YCBCR444_TO_YCBCR444_24BIT (0x9)
/** 出力フォーマットYCbCr444→YCbCr422 */
#define AG903_PGP_MGR_OUTPUT_FMT_YCBCR444_TO_YCBCR422       (0xA)
/** 出力フォーマットYCbCr444→YCbCr444 RGB分離 */
#define AG903_PGP_MGR_OUTPUT_FMT_YCBCR444_TO_YCBCR444_SEP   (0xB)
/** 出力フォーマットCLUT8→CLUT8 */
#define AG903_PGP_MGR_OUTPUT_FMT_CLUT8_TO_CLUT8             (0xE)
/** 出力フォーマットCLUT1→CLUT1 */
#define AG903_PGP_MGR_OUTPUT_FMT_CLUT1_TO_CLUT1             (0xF)

/** インタレースモードでのEVENフレームのVPOSをそのまま利用 */
#define AG903_PGP_MGR_INPUT_INTERLACE_EPOS_ZERO (0x0)
/** インタレースモードでのEVENフレームのVPOSを+1して利用 */
#define AG903_PGP_MGR_INPUT_INTERLACE_EPOS_ONE  (0x1)
/** インタレースモードでのODDフレームのVPOSをそのまま利用 */
#define AG903_PGP_MGR_INPUT_INTERLACE_OPOS_ZERO (0x0)
/** インタレースモードでのODDフレームのVPOSを+1して利用 */
#define AG903_PGP_MGR_INPUT_INTERLACE_OPOS_ONE  (0x1)

/** I/P変換回路のブランク期間の最大値 */
#define AG903_PGP_MGR_MAX_IP_BLANK              (255)

/** 色空間変換演算出力時のシフト量の最大値 */
#define AG903_PGP_MGR_MAX_COLOR_SPACE_SHIFT     (15)

/** 縮小フィルタ（ポイントサンプル） */
#define AG903_PGP_MGR_FILTER_NEAREST            (0x0)
/** 縮小フィルタ（リニアフィルタ） */
#define AG903_PGP_MGR_FILTER_LINEAR             (0x1)

/** スケーリング時の分子、分母に指定可能な最大値 */
#define AG903_PGP_MGR_MAX_SCALING_VALUE         (16)

/** YUV（BT.601 Full Range）→RGBの色空間変換のプリセット */
#define AG903_PGP_MGR_CSC_YUV_BT_601_FULL_TO_RGB    (0)
/** RGB→YUV（BT.601 Full Range）の色空間変換のプリセット */
#define AG903_PGP_MGR_CSC_RGB_TO_YUV_BT_601_FULL    (1)
/** YUV（BT.601 Limit Range）→RGBの色空間変換のプリセット */
#define AG903_PGP_MGR_CSC_YUV_BT_601_LIMIT_TO_RGB   (2)
/** RGB→YUV（BT.601 Limit Range）の色空間変換のプリセット */
#define AG903_PGP_MGR_CSC_RGB_TO_YUV_BT_601_LIMIT   (3)
/** YUV（BT.709 Full Range）→RGBの色空間変換のプリセット */
#define AG903_PGP_MGR_CSC_YUV_BT_709_FULL_TO_RGB    (4)
/** RGB→YUV（BT.709 Full Range）の色空間変換のプリセット */
#define AG903_PGP_MGR_CSC_RGB_TO_YUV_BT_709_FULL    (5)
/** YUV（BT.709 Limit Range）→RGBの色空間変換のプリセット */
#define AG903_PGP_MGR_CSC_YUV_BT_709_LIMIT_TO_RGB   (6)
/** RGB→YUV（BT.709 Limit Range）の色空間変換のプリセット */
#define AG903_PGP_MGR_CSC_RGB_TO_YUV_BT_709_LIMIT   (7)

/** 空間フィルタ時のシフト量の最大値 */
#define AG903_PGP_MGR_MAX_SPF_SHIFT             (15)

/** 境界処理に固定カラーを使用 */
#define AG903_PGP_MGR_SPF_BORDER_COLOR          (0x0)
/** 境界処理に最近傍ピクセルを使用 */
#define AG903_PGP_MGR_SPF_BORDER_NEIGHBOR       (0x1)

/** HSV、HLS変換回路の出力フォーマットにHSVを選択 */
#define AG903_PGP_MGR_CONVERT_HSV               (0x0)
/** HSV、HLS変換回路の出力フォーマットにHLSを選択 */
#define AG903_PGP_MGR_CONVERT_HLS               (0x1)

/** ヒストグラムコマンド（何もしません） */
#define AG903_PGP_MGR_HGM_CMD_NONE              (0x0)
/** ヒストグラムコマンド（ヒストグラム計測の実行（VRAMダンプあり）） */
#define AG903_PGP_MGR_HGM_CMD_EXEC              (0x1)
/** ヒストグラムコマンド（ヒストグラム計測の実行（VRAMダンプなし）） */
#define AG903_PGP_MGR_HGM_CMD_EXEC_WO_VRAM      (0x2)
/** ヒストグラムコマンド（キュー、未処理コマンドの削除） */
#define AG903_PGP_MGR_HGM_CMD_DELETE            (0x4)
/** ヒストグラムコマンド（回路リセット） */
#define AG903_PGP_MGR_HGM_CMD_RESET             (0x7)

/** ヒストグラム抽出時の値除外なし */
#define AG903_PGP_MGR_HGM_EXC_NONE              (0x0)
/** ヒストグラム抽出時に0を除外 */
#define AG903_PGP_MGR_HGM_EXC_0                 (0x1)
/** ヒストグラム抽出時に0〜16を除外 */
#define AG903_PGP_MGR_HGM_EXC_0_16              (0x2)
/** ヒストグラム抽出時に0を除外。ただしR要素（DATA[23:16]）は除外なし */
#define AG903_PGP_MGR_HGM_EXC_0_WO_R            (0x3)

/** ヒストグラムの出力無効期間の最大値 */
#define AG903_PGP_MGR_MAX_HGM_OUTPUT_INVALIDATE (15)

/** ヒストグラムレンジ抽出時の敷地の最大値 */
#define AG903_PGP_MGR_MAX_HGM_THR               (15)

/** ヒストグラム計測データ出力時のデータシフト量（右シフト）の最大値 */
#define AG903_PGP_MGR_MAX_HGM_SHIFT             (15)

/** ヒストグラム抽出時の間引き量の最大値 */
#define AG903_PGP_MGR_MAX_HGM_INC               (15)

/** ヒストグラム計測サイズの最大値 */
#define AG903_PGP_MGR_MAX_HGM_SIZE              (1024)

/** ヒストグラム計測開始座標の最大値 */
#define AG903_PGP_MGR_MAX_HGM_POS               (4095)

/** 閾値処理の出力に画像を選択 */
#define AG903_PGP_MGR_THR_OUT_SEL_RGB           (0x0)
/** 閾値処理の出力に8bitMUX出力を選択 */
#define AG903_PGP_MGR_THR_OUT_SEL_MUX8          (0x1)
/** 閾値処理の出力に1bit空間フィルタ出力を選択 */
#define AG903_PGP_MGR_THR_OUT_SEL_SPF1          (0x2)
/** 閾値処理の出力にラベリング出力を選択 */
#define AG903_PGP_MGR_THR_OUT_SEL_LBL           (0x3)

/** 閾値処理のCLUT8の出力にBlue要素（DATA[7:0]）を選択 */
#define AG903_PGP_MGR_THR_CLUT8_OUT_B           (0x0)
/** 閾値処理のCLUT8の出力にGreen要素（DATA[15:8]）を選択 */
#define AG903_PGP_MGR_THR_CLUT8_OUT_G           (0x1)
/** 閾値処理のCLUT8の出力にRed要素（DATA[23:16]）を選択 */
#define AG903_PGP_MGR_THR_CLUT8_OUT_R           (0x2)

/** 閾値処理の設定においてBlue要素（DATA[7:0]）のパラメータを設定対象に指定します */
#define AG903_PGP_MGR_THR_CHANNEL_B             (0)
/** 閾値処理の設定においてGreen要素（DATA[15:8]）のパラメータを設定対象に指定します */
#define AG903_PGP_MGR_THR_CHANNEL_G             (1)
/** 閾値処理の設定においてRed要素（DATA[23:16]）のパラメータを設定対象に指定します */
#define AG903_PGP_MGR_THR_CHANNEL_R             (2)

/** 8bit閾値処理の種類にThreshold Binaryを選択 */
#define AG903_PGP_MGR_THR_8BIT_TYPE_THR_BIN             (0x0)
/** 8bit閾値処理の種類にThreshold Binary, Invertedを選択 */
#define AG903_PGP_MGR_THR_8BIT_TYPE_THR_BIN_INV         (0x1)
/** 8bit閾値処理の種類にTruncateを選択 */
#define AG903_PGP_MGR_THR_8BIT_TYPE_TRU                 (0x2)
/** 8bit閾値処理の種類にThreshold to Zeroを選択 */
#define AG903_PGP_MGR_THR_8BIT_TYPE_THR_ZERO            (0x3)
/** 8bit閾値処理の種類にThreshold to Zero, Invertedを選択 */
#define AG903_PGP_MGR_THR_8BIT_TYPE_THR_ZERO_INV        (0x4)
/** 8bit閾値処理の種類にThreshold Binary, Extendedを選択 */
#define AG903_PGP_MGR_THR_8BIT_TYPE_THR_BIN_EXT         (0x8)
/** 8bit閾値処理の種類にThreshold Binary, Inverted, Extendedを選択 */
#define AG903_PGP_MGR_THR_8BIT_TYPE_THR_BIN_INV_EXT     (0x9)
/** 8bit閾値処理の種類にTruncate, Extendedを選択 */
#define AG903_PGP_MGR_THR_8BIT_TYPE_TRU_EXT             (0xA)
/** 8bit閾値処理の種類にThreshold to Zero, Extendedを選択 */
#define AG903_PGP_MGR_THR_8BIT_TYPE_THR_ZERO_EXT        (0xB)
/** 8bit閾値処理の種類にThreshold to Zero, Inverted, Extendedを選択 */
#define AG903_PGP_MGR_THR_8BIT_TYPE_THR_ZERO_INV_EXT    (0xC)

/** ラベリングコマンド（何もしません） */
#define AG903_PGP_MGR_LBL_CMD_NONE              (0x0)
/** ラベリングコマンド（ラベリング処理の実行） */
#define AG903_PGP_MGR_LBL_CMD_EXEC              (0x1)
/** ラベリングコマンド（キュー、未処理コマンドの削除） */
#define AG903_PGP_MGR_LBL_CMD_DELETE            (0x4)
/** ラベリングコマンド（回路リセット） */
#define AG903_PGP_MGR_LBL_CMD_RESET             (0x7)

/** ラベリング処理の出力有効期間の最大値 */
#define AG903_PGP_MGR_MAX_LBL_OUTPUT_VALIDATE   (16)
/** ラベリング処理の出力無効期間の最大値 */
#define AG903_PGP_MGR_MAX_LBL_OUTPUT_INVALIDATE (15)

/** ラベリングに連結判定に8連結を指定 */
#define AG903_PGP_MGR_LBL_CNCT_8                (0x0)
/** ラベリングに連結判定に4連結を指定 */
#define AG903_PGP_MGR_LBL_CNCT_4                (0x1)

/** ラベリング付加情報テーブルのフラッシュを行う閾値の最大値 */
#define AG903_PGP_MGR_MAX_LBL_FLUSH_THR         (255)

/** ラベリング付加情報テーブルID の最大値 */
#define AG903_PGP_MGR_MAX_LBL_ID                (255)

/** ラベリング処理の垂直サイズの最大値 */
#define AG903_PGP_MGR_MAX_LBL_VSIZE             (1024)

/** ラベリング処理の水平サイズの最大値 */
#define AG903_PGP_MGR_MAX_LBL_HSIZE             (640)

/** ラベリング処理開始座標の最大値 */
#define AG903_PGP_MGR_MAX_LBL_POS               (4095)

/** フレーム間演算のスレーブ入力にVRAM（8bit符号なし整数）を選択 */
#define AG903_PGP_MGR_IFC_SLAVE_VRAM_UI         (0x0)
/** フレーム間演算のスレーブ入力にVRAM（8bit符号つき整数）を選択 */
#define AG903_PGP_MGR_IFC_SLAVE_VRAM_I          (0x1)
/** フレーム間演算のスレーブ入力に演算処理パイプラインを選択 */
#define AG903_PGP_MGR_IFC_SLAVE_PIPELINE        (0x2)

/** フレーム間演算のゲイン演算結果出力時の最大シフト量 */
#define AG903_PGP_MGR_MAX_IFC_GAIN_SHIFT        (7)

/** フレーム間演算のリミット動作を0〜255に制限 */
#define AG903_PGP_MGR_IFC_LIMIT_0_255           (0x0)
/** フレーム間演算のリミット動作を16〜235([23:16]), 240([15:8], [7:0])に制限 */
#define AG903_PGP_MGR_IFC_LIMIT_16_235_AND_240  (0x1)
/** フレーム間演算のリミット動作を-128〜127に制限 */
#define AG903_PGP_MGR_IFC_LIMIT_M128_127        (0x2)

/** フレーム間演算方法にANDを選択 */
#define AG903_PGP_MGR_IFC_OP_AND                (0x0)
/** フレーム間演算方法にORを選択 */
#define AG903_PGP_MGR_IFC_OP_OR                 (0x1)
/** フレーム間演算方法にXORを選択 */
#define AG903_PGP_MGR_IFC_OP_XOR                (0x2)
/** フレーム間演算方法にADDを選択 */
#define AG903_PGP_MGR_IFC_OP_ADD                (0x3)
/** フレーム間演算方法にABSを選択 */
#define AG903_PGP_MGR_IFC_OP_ABS                (0x4)

/** VRAM入力コマンド（何もしません） */
#define AG903_PGP_MGR_VI_CMD_NONE               (0x0)
/** VRAM入力コマンド（1ショットの読み出しを実行） */
#define AG903_PGP_MGR_VI_CMD_EXEC               (0x1)
/** VRAM入力コマンド（連続での読み出しを実行） */
#define AG903_PGP_MGR_VI_CMD_EXEC_CONTINUE      (0x2)
/** VRAM入力コマンド（アイドル状態へ遷移） */
#define AG903_PGP_MGR_VI_CMD_IDLE               (0x8)
/** VRAM入力コマンド（回路リセット） */
#define AG903_PGP_MGR_VI_CMD_RESET              (0xF)
/** VRAM入力コマンド（強制終了処理） */
#define AG903_PGP_MGR_VI_CMD_FORCE_QUIT         (0xF)

/** バッファ管理ユニット無効 */
#define AG903_PGP_MGR_VI_BMU_NONE               (0x0)
/** バッファ管理ユニット有効。フィールドに関係なく更新 */
#define AG903_PGP_MGR_VI_BMU_ENABLE             (0x1)
/** バッファ管理ユニット有効。ODDフィールド開始時に更新 */
#define AG903_PGP_MGR_VI_BMU_ENABLE_ODD         (0x2)

/** インタレースフレームの読み出し方法に奇数フレームのみを指定 */
#define AG903_PGP_MGR_VI_FRAME_READ_ODD         (0x0)
/** インタレースフレームの読み出し方法に偶数フレームのみを指定 */
#define AG903_PGP_MGR_VI_FRAME_READ_EVEN        (0x1)
/** インタレースフレームの読み出し方法にフィールド分離を指定 */
#define AG903_PGP_MGR_VI_FRAME_READ_FIELD       (0x2)
/** インタレースフレームの読み出し方法にWeaveを指定 */
#define AG903_PGP_MGR_VI_FRAME_READ_WEAVE       (0x4)

/** VRAM出力期間の引き延ばしの最大値 */
#define AG903_PGP_MGR_MAX_VI_DIV                (256)

/** VRAM出力有効期間の最大値 */
#define AG903_PGP_MGR_MAX_VI_VALIDATE           (16)
/** VRAM出力無効期間の最大値 */
#define AG903_PGP_MGR_MAX_VI_INVALIDATE         (15)

/** VRAM入力フォーマットRGB888（32bit） */
#define AG903_PGP_MGR_VI_FMT_RGB888_32          (0x0)
/** VRAM入力フォーマットRGB888（24bit） */
#define AG903_PGP_MGR_VI_FMT_RGB888_24          (0x1)
/** VRAM入力フォーマットRGB565 */
#define AG903_PGP_MGR_VI_FMT_RGB565             (0x2)
/** VRAM入力フォーマットYCbCr444（32bit） */
#define AG903_PGP_MGR_VI_FMT_YCBCR444_32        (0x8)
/** YCbCr444（24bit） */
#define AG903_PGP_MGR_VI_FMT_YCBCR444_24        (0x9)
/** YCbCr422 */
#define AG903_PGP_MGR_VI_FMT_YCBCR422           (0xA)
/** CLUT8 */
#define AG903_PGP_MGR_VI_FMT_CLUT8              (0xE)
/** CLUT1 */
#define AG903_PGP_MGR_VI_FMT_CLUT1              (0xF)

/** VRAMが2次元アドレスの場合のストライドバイト */
#define AG903_PGP_MGR_VI_MAX_STRIDE_BYTE        (16384)

/** VRAM入力の水平同期信号パルス幅の最大値 */
#define AG903_PGP_MGR_MAX_VI_H_PULES_WIDTH      (4096)

/** VRAM入力の水平フロントポーチの最大値 */
#define AG903_PGP_MGR_MAX_VI_H_FRONT_PORCH      (4096)

/** VRAM入力の水平バックポーチの最大値 */
#define AG903_PGP_MGR_MAX_VI_H_BACK_PORCH       (4096)

/** VRAM入力の垂直同期信号パルス幅の最大値 */
#define AG903_PGP_MGR_MAX_VI_V_PULES_WIDTH      (4096)

/** VRAM入力の垂直フロントポーチの最大値 */
#define AG903_PGP_MGR_MAX_VI_V_FRONT_PORCH      (4096)

/** VRAM入力の垂直バックポーチの最大値 */
#define AG903_PGP_MGR_MAX_VI_V_BACK_PORCH       (4096)

/** VRAM入力の水平サイズの最大値 */
#define AG903_PGP_MGR_MAX_VI_H_SIZE             (4096)
/** VRAM入力の垂直サイズの最大値 */
#define AG903_PGP_MGR_MAX_VI_V_SIZE             (4096)

/** 入力割り込み */
#define AG903_PGP_MGR_INTR_INPUT                (0)
/** 出力割り込み */
#define AG903_PGP_MGR_INTR_OUTPUT               (1)
/** パイプラインの完了割り込み */
#define AG903_PGP_MGR_INTR_DONE                 (2)
/** VRAM出力のエラー割り込み */
#define AG903_PGP_MGR_INTR_VRAM_ERROR           (3)
/** ラベリングのエラー割り込み */
#define AG903_PGP_MGR_INTR_LBL_ERROR            (4)
/** ヒストグラムのエラー割り込み */
#define AG903_PGP_MGR_INTR_HGM_ERROR            (5)
/** 同期信号無検出割り込み */
#define AG903_PGP_MGR_INTR_ND                   (6)
/** フレーム間演算オーバーフロー割り込み */
#define AG903_PGP_MGR_INTR_IFC_OVF              (7)
/** 入力ライン割り込み */
#define AG903_PGP_MGR_INTR_INPUT_LINE           (8)
/** 出力ライン割り込み */
#define AG903_PGP_MGR_INTR_OUTPUT_LINE          (9)
/** ラベリング完了割り込み */
#define AG903_PGP_MGR_INTR_LBL_DONE             (10)
/** ヒストグラム完了割り込み */
#define AG903_PGP_MGR_INTR_HGM_DONE             (11)

/** パイプラインのパラメータ設定関数がコールされたことを管理するフラグ数 */
#define AG903_PGP_MGR_CONFIG_DIRTY_NUM          (29)
/** パイプラインの入出力割り込みの設定フラグ */
#define AG903_PGP_MGR_CONFIG_INTR_CTRL          (0)
/** ビデオ入力、フレーム出力トリガの設定フラグ */
#define AG903_PGP_MGR_CONFIG_TRIG_CTRL          (1)
/** トリガ起動のタイマモジュールのチャンネル番号の設定フラグ */
#define AG903_PGP_MGR_CONFIG_INPUT_TRIG_CH      (2)
/** フレーム保存時のパディング値の設定フラグ */
#define AG903_PGP_MGR_CONFIG_OUTPUT_CTRL        (3)
/** パイプライン出力時のカラーマスクの設定フラグ */
#define AG903_PGP_MGR_CONFIG_OUTPUT_COLOR_MASK  (4)
/** パイプラインの出力先ベースアドレスの設定フラグ */
#define AG903_PGP_MGR_CONFIG_OUTPUT_BASE_ADDR   (5)
/** I/P変換回路のパラメータの設定フラグ */
#define AG903_PGP_MGR_CONFIG_IP_CONV            (6)
/** 色空間変換を制御するパラメータの設定フラグ */
#define AG903_PGP_MGR_CONFIG_COLOR_SPACE        (7)
/** スケーリングのパラメータの設定フラグ */
#define AG903_PGP_MGR_CONFIG_SCALING            (8)
/** 空間フィルタを制御するパラメータの設定フラグ */
#define AG903_PGP_MGR_CONFIG_SP_FILTER          (9)
/** HSV、HLS変換回路の出力フォーマットの設定フラグ */
#define AG903_PGP_MGR_CONFIG_HSVHSL_CONV        (10)
/** ヒストグラム制御のパラメータの設定フラグ */
#define AG903_PGP_MGR_CONFIG_HGM_PARAM          (11)
/** ヒストグラム制御のパラメータの設定フラグ */
#define AG903_PGP_MGR_CONFIG_HGM_SIZE           (12)
/** ヒストグラム計測開始座標の設定フラグ */
#define AG903_PGP_MGR_CONFIG_HGM_POS            (13)
/** ヒストグラム計測出力先ベースアドレスの設定フラグ */
#define AG903_PGP_MGR_CONFIG_HGM_BASE_ADDR      (14)
/** 閾値処理の機能の設定フラグ */
#define AG903_PGP_MGR_CONFIG_THR                (15)
/** 閾値処理のHSV、HLS変換回路の出力フォーマット機能の設定フラグ */
#define AG903_PGP_MGR_CONFIG_THR_HSCHLS_CONV    (16)
/** 閾値処理の色空間変換を制御するパラメータの設定フラグ */
#define AG903_PGP_MGR_CONFIG_THR_COLOR_SPACE    (17)
/** 閾値処理のマスク生成の設定フラグ */
#define AG903_PGP_MGR_CONFIG_THR_MASK           (18)
/** 閾値処理の8bit閾値処理のパラメータマスクの設定フラグ */
#define AG903_PGP_MGR_CONFIG_THR_8BIT           (19)
/** 閾値処理の1bit閾値処理の設定フラグ */
#define AG903_PGP_MGR_CONFIG_THR_1BIT           (20)
/** 閾値処理の1bit空間フィルタの設定フラグ */
#define AG903_PGP_MGR_CONFIG_THR_SP_FILTER_1BIT (21)
/** ラベリングの出力有効無効期間パラメータの設定フラグ */
#define AG903_PGP_MGR_CONFIG_LBL_PARAM          (22)
/** ラベリング処理サイズの設定フラグ */
#define AG903_PGP_MGR_CONFIG_LBL_SIZE           (23)
/** ラベリング処理開始座標の設定フラグ */
#define AG903_PGP_MGR_CONFIG_LBL_POS            (24)
/** ラベリング付加情報出力先のベースアドレスの設定フラグ */
#define AG903_PGP_MGR_CONFIG_LBL_BASE_ADDR      (25)
/** フレーム間演算パラメータの設定フラグ */
#define AG903_PGP_MGR_CONFIG_IFC_PARAM          (26)
/** フレーム間演算のゲインパラメータの設定フラグ */
#define AG903_PGP_MGR_CONFIG_IFC_GAIN           (27)
/** 割り込みのコールバック関数の登録フラグ */
#define AG903_PGP_MGR_CONFIG_INTR_ENABLE        (28)
/** VRAM入力のパラメータ設定関数がコールされたことを管理するフラグ数 */
#define AG903_PGP_MGR_CONFIG_VI_DIRTY_NUM       (4)
/** VRAM入力のデータスワップの設定フラグ */
#define AG903_PGP_MGR_CONFIG_VI_CTRL            (0)
/** VRAM入力の出力有効無効期間パラメータの設定フラグ */
#define AG903_PGP_MGR_CONFIG_VI_CTRL1           (1)
/** VRAM入力の出力先ベースアドレスの設定フラグ */
#define AG903_PGP_MGR_CONFIG_VI_BASE            (2)
/** VRAM入力のインタレースモードでのEVEN/ODDフレームの調整フラグ */
#define AG903_PGP_MGR_CONFIG_VI_ADJUST_FRAME    (3)

/** コールバック関数のタイプ */
typedef void (*PGPMGRCALLBACK) (int32_t id, void *handle);

/**
 * 濃度変換テーブルハンドル
 */
typedef struct _AG903_PgpMgrDGCLookupTable {
    uint32_t  id;                           /** 濃度変換テーブルを識別する為のID */
    _Bool     is_used;                      /** テーブルが取得状態であることを確認するフラグ */
    uint32_t  ref_cnt;                      /** リファレンスカウント */
    uint8_t   lut_data[3][256];             /** 濃度変換テーブルのレジスタデータを保持する領域 */
} AG903_PgpMgrDGCLookupTable;


/**
 * パイプラインハンドル
 */
typedef struct _AG903_PgpMgrPipelineHandle {
    uint32_t  id;                           /** 前処理パイプラインハンドルを識別する為のID */
    int32_t   pipeline_no;                  /** 物理的に割り当てられたパイプラインの番号 */
    _Bool     is_used;                      /** ハンドルが取得状態であることを確認するフラグ */
    _Bool     is_assign;                    /** パイプラインハンドルが割り当て済みであることを判定するフラグ */
    _Bool     is_dirty;                     /** パイプラインハンドルに対する設定が変更された状態であることを判定するフラグ */
    _Bool     is_config_dirty[AG903_PGP_MGR_CONFIG_DIRTY_NUM];  /** パイプラインハンドルに対してConfigの設定関数によりパラメータが更新されたことを管理するフラグ */
    _Bool     is_used_frame_calc;           /** パイプラインハンドルがフレーム間演算に使用されていることを判定するフラグ */
    _Bool     dgc_lut_dirty;                /** 濃度変換テーブルが変更されたことを管理するフラグ */
    AG903_PgpMgrDGCLookupTable *dgc_lut;    /** 関連付けされている濃度変換テーブル */
    void      *input_handle;                /** 入力ソースハンドル */
    uint32_t  input_intr_field;             /** 入力割り込み制御におけるVSYNC割り込みを出力するフィールド */
    uint32_t  input_intr_fcnt;              /** 入力割り込み制御におけるフレームカウンタの最大値 */
    uint32_t  input_intr_line;              /** 入力割り込み制御におけるライン割り込みを発生させるライン番号 */
    uint32_t  output_intr_field;            /** 出力割り込み制御におけるVSYNC割り込みを出力するフィールド */
    uint32_t  output_intr_fcnt;             /** 出力割り込み制御におけるフレームカウンタの最大値 */
    uint32_t  output_intr_line;             /** 出力割り込み制御におけるライン割り込みを発生させるライン番号 */
    _Bool     intr_nd_enable;               /** 同期信号無検出割り込み有効無効フラグ */
    _Bool     intr_voicpl_enable;           /** VRAM出力未完了割り込み有効無効フラグ */
    _Bool     intr_vooflw_enable;           /** VRAM出力オーバーフロー割り込み有効無効フラグ */
    _Bool     intr_ifcofs_enable;           /** フレーム間演算スレーブオーバフロー割り込み有効無効フラグ */
    _Bool     intr_ifcofm_enable;           /** フレーム間演算マスタオーバーフロー割り込み有効無効フラグ */
    _Bool     intr_lblcrpt_enable;          /** ラベリングデータ破損割り込み有効無効フラグ */
    _Bool     intr_lblcpl_enable;           /** ラベリングデータ出力完了割り込み有効無効フラグ */
    _Bool     intr_hgmicpl_enable;          /** ヒストグラム出力未完了割り込み有効無効フラグ */
    _Bool     intr_hgmcpl_enable;           /** ヒストグラム出力完了割り込み有効無効フラグ */
    _Bool     intr_vsynco_enable;           /** フレーム出力回路の垂直同期割り込み有効無効フラグ */
    _Bool     intr_vlineo_enable;           /** フレーム出力回路のライン割り込み有効無効フラグ */
    _Bool     intr_vsynci_enable;           /** 入力段の垂直同期割り込み有効無効フラグ */
    _Bool     intr_vlinei_enable;           /** 入力段のライン割り込み有効無効フラグ */
    uint32_t  input_trig_field;             /** ビデオ入力トリガ制御におけるVSYNCトリガを出力するフィールド */
    uint32_t  input_trig_fcnt;              /** ビデオ入力トリガ制御におけるフレームカウンタの最大値 */
    uint32_t  input_trig_line;              /** ビデオ入力トリガ制御におけるライントリガを発生させるライン番号 */
    uint32_t  output_trig_field;            /** フレーム出力トリガ制御におけるVSYNCトリガを出力するフィールド */
    uint32_t  output_trig_fcnt;             /** フレーム出力トリガ制御におけるフレームカウンタの最大値 */
    uint32_t  output_trig_line;             /** フレーム出力トリガ制御におけるライントリガを発生させるライン番号 */
    _Bool     trig_vsynco_enable;           /** フレーム出力回路の垂直同期トリガ有効無効フラグ */
    _Bool     trig_vlineo_enable;           /** フレーム出力回路のライントリガ有効無効フラグ */
    _Bool     trig_vsynci_enable;           /** ビデオ入力の垂直同期トリガ有効無効フラグ */
    _Bool     trig_vlinei_enable;           /** ビデオ入力のライントリガ有効無効フラグ */
    uint32_t  input_hsync_delay;            /** キャプチャ入力のHSYNCに対する遅延 */
    uint32_t  input_mode;                   /** キャプチャ入力の動作モード */
    uint32_t  input_timer_clk;              /** キャプチャ入力のタイムスタンプ生成のクロックソース */
    uint32_t  input_trig_timer_ch;          /** トリガとして利用するタイマモジュールのチャンネル番号 */
    uint32_t  input_port;                   /** パイプラインの入力ポート */
    uint32_t  input_format;                 /** キャプチャ入力のフォーマット */
    _Bool     frame_out_enable;             /** フレーム出力機能の有効無効フラグ */
    uint32_t  ifc_order;                    /** フレーム間演算の処理順序 */
    _Bool     ifc_enable;                   /** フレーム間演算の有効無効フラグ */
    _Bool     thr_enable;                   /** 閾値処理の有効無効フラグ */
    _Bool     dgc_enable;                   /** 濃度変換の有効無効フラグ */
    _Bool     hsv1_enable;                  /** HLS、HSV変換1の有効無効フラグ */
    _Bool     spf_enable;                   /** 空間フィルタの有効無効フラグ */
    _Bool     scale_enable;                 /** スケーリング回路の有効無効フラグ */
    _Bool     csc1_enable;                  /** 色空間変換1の有効無効フラグ */
    _Bool     nrf_enable;                   /** 3タップノイズフィルタの有効無効フラグ */
    _Bool     hgm_enable;                   /** ヒストグラムの有効無効フラグ */
    _Bool     lbl_enable;                   /** ラベリングの有効無効フラグ */
    uint32_t  input_vsize;                  /** キャプチャの垂直サイズ */
    uint32_t  input_hsize;                  /** キャプチャの入力サイズ */
    _Bool     input_epos;                   /** インタレースモード時のEVENフレーム調整を行う・行わないのフラグ */
    _Bool     input_opos;                   /** インタレースモード時のODDフレーム調整を行う・行わないのフラグ */
    uint32_t  input_scan;                   /** キャプチャのフレーム操作方法 */
    uint32_t  input_vpos;                   /** キャプチャの垂直位置 */
    uint32_t  input_hpos;                   /** キャプチャの水平位置 */
    uint32_t  output_pad;                   /** フレーム保存のパディング値 */
    uint32_t  output_limit;                 /** 24bit入力値のリミット動作 */
    _Bool     output_fai_enable;            /** フレーム付加情報の出力有効無効フラグ */
    _Bool     output_dither_enable;         /** ディザリング処理の有効無効フラグ */
    uint32_t  output_bmu;                   /** バッファ管理ユニットの設定 */
    uint32_t  output_scan;                  /** フレーム操作方法 */
    uint32_t  output_dim;                   /** アドレス指定方法 */
    _Bool     output_word_swap_enable;      /** 出力データのワードデータのスワップ有効無効フラグ */
    _Bool     output_hword_swap_enable;     /** 出力データのハーフワードデータのスワップ有効無効フラグ */
    _Bool     output_1bit_swap_enable;      /** 出力データの4bitデータのスワップ有効無効フラグ */
    _Bool     output_4bit_swap_enable;      /** 出力データの1bitデータのスワップ有効無効フラグ */
    uint32_t  output_md;                    /** インタレース入力のフレーム保存方法 */
    uint32_t  output_format;                /** 出力フォーマット */
    _Bool     output_red_enable;            /** R要素の出力有効無効フラグ */
    _Bool     output_green_enable;          /** G要素の出力有効無効フラグ */
    _Bool     output_blue_enable;           /** B要素の出力有効無効フラグ */
    uint32_t  output_base_addr;             /** 出力先のベースアドレス */
    uint32_t  output_vram_stride;           /** 出力先のVRAM水平サイズ（ストライドバイト） */
    uint32_t  ipc_limit;                    /** I/P変換回路の出力値リミット動作 */
    uint32_t  ipc_blk_y;                    /** I/P変換回路のブランク期間Yの出力値 */
    uint32_t  ipc_blk_c;                    /** I/P変換回路のブランク期間Cb、Crの出力値 */
    uint32_t  csc1_limit;                   /** 色空間変換1の出力値リミット動作 */
    uint32_t  csc1_shift;                   /** 色空間変換1の演算出力時のシフト量 */
    int32_t   csc1_matrix[3][4];            /** 色空間変換1のMatrix値 */
    uint32_t  scale_limit;                  /** スケーリング出力値のリミット動作 */
    uint32_t  scale_mtd;                    /** スケーリング縮小方法 */
    uint32_t  scale_v_nmr;                  /** スケーリング垂直縮小率の分子 */
    uint32_t  scale_v_dnm;                  /** スケーリング垂直縮小率の分母 */
    uint32_t  scale_h_nmr;                  /** スケーリング水平縮小率の分子 */
    uint32_t  scale_h_dnm;                  /** スケーリング水平縮小率の分母 */
    uint32_t  spf_shift;                    /** 空間フィルタの演算出力時のシフト量 */
    uint32_t  spf_border_sel;               /** 空間フィルタの境界値カラーの選択 */
    uint32_t  spf_border_red;               /** 空間フィルタの境界固定カラー値（赤） */
    uint32_t  spf_border_green;             /** 空間フィルタの境界固定カラー値（緑） */
    uint32_t  spf_border_blue;              /** 空間フィルタの境界固定カラー値（青） */
    int32_t   spf_coeff[9];                 /** 空間フィルタの係数 */
    int32_t   spf_offset;                   /** 空間フィルタパラメータのオフセット値 */
    uint32_t  hsv_hls_sel;                  /** HSV、HLS変換回路の出力フォーマット */
    uint32_t  hgm_invalidate;               /** ヒストグラム出力無効期間 */
    _Bool     hgm_bmu;                      /** ヒストグラムのバッファ管理ユニット使用の有効無効フラグ */
    uint32_t  hgm_exc;                      /** ヒストグラム計測の最頻値、最大最小値抽出時の値除外方法 */
    uint32_t  hgm_thr;                      /** ヒストグラム計測の最大最小値の閾値 */
    uint32_t  hgm_shift;                    /** ヒストグラム計算データ出力時のデータシフト量 */
    uint32_t  hgm_vinc;                     /** ヒストグラム計算時の垂直方向間引き設定 */
    uint32_t  hgm_hinc;                     /** ヒストグラム計算時の水平方向間引き設定 */
    uint32_t  hgm_vsize;                    /** ヒストグラム計測垂直サイズ */
    uint32_t  hgm_hsize;                    /** ヒストグラム計測水平サイズ */
    uint32_t  hgm_vpos;                     /** ヒストグラム計測開始垂直座標 */
    uint32_t  hgm_hpos;                     /** ヒストグラム計測水平座標 */
    uint32_t  hgm_addr;                     /** ヒストグラム出力先アドレス */
    uint32_t  thr_limit;                    /** 閾値処理の出力値リミットを設定 */
    _Bool     thr_spf1_enable;              /** 閾値処理の1bit空間フィルタの有効無効フラグ */
    _Bool     thr_msk_enable;               /** 閾値処理の画像切り出しの有効無効フラグ */
    _Bool     thr_csc2_enable;              /** 閾値処理の色空間変換2の有効無効フラグ */
    _Bool     thr_hsv2_enable;              /** 閾値処理のHSV、HLS変換2の有効無効フラグ */
    _Bool     thr_thr8bit_enable;           /** 閾値処理の8bit閾値処理の有効無効フラグ */
    uint32_t  thr_out_sel;                  /** 閾値処理の出力セレクタのソースを選択 */
    uint32_t  thr_clut8_sel;                /** 閾値処理のCLUT8出力のソースを選択 */
    uint32_t  thr_hsv_hls_sel;              /** 閾値処理のHLS、HSV変換回路の出力フォーマットを選択 */
    uint32_t  thr_csc2_limit;               /** 閾値処理の色空間変換2の出力値リミット動作 */
    uint32_t  thr_csc2_shift;               /** 閾値処理の色空間変換2の演算出力時のシフト量 */
    int32_t   thr_csc2_matrix[3][4];        /** 閾値処理の色空間変換2のMatrix値 */
    uint32_t  thr_msk_h[3];                 /** 閾値処理のマスク生成0〜2のH値 */
    uint32_t  thr_msk_l[3];                 /** 閾値処理のマスク生成0〜2のL値 */
    uint32_t  thr_msk_x[3];                 /** 閾値処理のマスク生成0〜2のX値 */
    uint32_t  thr_msk_hmax[3];              /** 閾値処理のマスク生成0〜2のHMAX値 */
    uint32_t  thr_msk_hmin[3];              /** 閾値処理のマスク生成0〜2のHMIN値 */
    uint32_t  thr_msk_lmax[3];              /** 閾値処理のマスク生成0〜2のLMAX値 */
    uint32_t  thr_msk_lmin[3];              /** 閾値処理のマスク生成0〜2のLMIN値 */
    uint32_t  thr_thr8_prm_type[3];         /** 閾値処理の8bit閾値処理パラメータ0〜2のタイプ */
    uint32_t  thr_thr8_prm_maxval[3];       /** 閾値処理の8bit閾値処理パラメータ0〜2のmaxValue */
    uint32_t  thr_thr8_prm_maxthr[3];       /** 閾値処理の8bit閾値処理パラメータ0〜2のmaxThreshold */
    uint32_t  thr_thr8_prm_minthr[3];       /** 閾値処理の8bit閾値処理パラメータ0〜2のminThreshold */
    uint32_t  thr_thr1_h;                   /** 閾値処理の1bit閾値処理のH値 */
    uint32_t  thr_thr1_l;                   /** 閾値処理の1bit閾値処理のL値 */
    uint32_t  thr_thr1_x;                   /** 閾値処理の1bit閾値処理のX値 */
    uint32_t  thr_thr1_hmax;                /** 閾値処理の1bit閾値処理のHMAX値 */
    uint32_t  thr_thr1_hmin;                /** 閾値処理の1bit閾値処理のHMIN値 */
    uint32_t  thr_thr1_lmax;                /** 閾値処理の1bit閾値処理のLMAX値 */
    uint32_t  thr_thr1_lmin;                /** 閾値処理の1bit閾値処理のLMIN値 */
    int32_t   thr_spf1_coeff[9];            /** 閾値処理の1bit空間フィルタ処理の係数 */
    int32_t   thr_spf1_thr;                 /** 閾値処理の1bit空間フィルタ処理の閾値 */
    uint32_t  lbl_valid;                    /** ラベリングの出力有効期間 */
    uint32_t  lbl_invalid;                  /** ラベリングの出力無効期間 */
    uint32_t  lbl_connect;                  /** ラベリングの連結判定方法 */
    _Bool     lbl_bmu;                      /** ラベリングのバッファ管理ユニット使用の有効無効フラグ */
    uint32_t  lbl_flush_thr;                /** ラベリングの付加情報テーブルのフラッシュを行う閾値 */
    uint32_t  lbl_maxid;                    /** ラベリングの付加情報テーブルIDの最大値 */
    uint32_t  lbl_vsize;                    /** ラベリングの垂直サイズ */
    uint32_t  lbl_hsize;                    /** ラベリングの水平サイズ */
    uint32_t  lbl_vpos;                     /** ラベリング開始位置の垂直座標 */
    uint32_t  lbl_hpos;                     /** ラベリング開始位置の水平座標 */
    uint32_t  lbl_addr;                     /** ラベリング付加情報出力先アドレス */
    uint32_t  ifc_scan;                     /** フレーム間演算のフレーム走査方法 */
    uint32_t  ifc_limit;                    /** フレーム間演算の出力値のリミット動作 */
    uint32_t  ifc_slave_src;                /** フレーム間演算のスレーブ入力ソースの選択 */
    uint32_t  ifc_operation;                /** フレーム間演算の演算方法 */
    uint32_t  ifc_slave_shift;              /** フレーム間演算のスレーブ入力のゲイン演算後のシフト量 */
    uint32_t  ifc_master_shift;             /** フレーム間演算のマスタ入力のゲイン演算後のシフト量 */
    int32_t   ifc_slave_gain;               /** フレーム間演算のスレーブ入力のゲイン */
    int32_t   ifc_master_gain;              /** フレーム間演算のマスタ入力のゲイン */
    PGPMGRCALLBACK intr_input_func;         /** 入力割り込みのコールバック関数 */
    PGPMGRCALLBACK intr_output_func;        /** 出力割り込みのコールバック関数 */
    PGPMGRCALLBACK intr_done_func;          /** パイプライン完了割り込みのコールバック関数 */
    PGPMGRCALLBACK intr_vram_error_func;    /** VRAM出力エラー割り込みのコールバック関数 */
    PGPMGRCALLBACK intr_lbl_error_func;     /** ラベリングエラー割り込みのコールバック関数 */
    PGPMGRCALLBACK intr_hgm_error_func;     /** ヒストグラムエラー割り込みのコールバック関数 */
    PGPMGRCALLBACK intr_nd_func;            /** 同期信号無検出割り込みのコールバック関数 */
    PGPMGRCALLBACK intr_ifc_ovf_func;       /** フレーム間演算オーバーフロー割り込みのコールバック関数 */
    PGPMGRCALLBACK intr_input_line_func;    /** 入力ライン割り込みのコールバック関数 */
    PGPMGRCALLBACK intr_output_line_func;   /** 出力ライン割り込みのコールバック関数 */
    PGPMGRCALLBACK intr_lbl_done_func;      /** ラベリング完了割り込みのコールバック関数 */
    PGPMGRCALLBACK intr_hgm_done_func;      /** ヒストグラム完了割り込みのコールバック関数 */
} AG903_PgpMgrPipelineHandle;


/**
 * VRAM入力ハンドル
 */
typedef struct _AG903_PgpMgrVRAMInputHandle {
    uint32_t  id;                           /** VRAM入力ハンドルを識別する為のID */
    uint32_t  ref_cnt;                      /** VRAM入力ハンドルのリファレンスカウント */
    int32_t   port_no;                      /** 割り当てられているVRAM入力ポートの番号 */
    _Bool     is_used;                      /** ハンドルが取得状態であることを確認するフラグ */
    _Bool     is_dirty;                     /** VRAM入力ハンドルに対する設定が変更された状態であることを判定するフラグ */
    _Bool     is_config_dirty[AG903_PGP_MGR_CONFIG_VI_DIRTY_NUM];   /** VRAM入力ハンドルに対してConfigの設定関数によりパラメータが更新されたことを管理するフラグ */
    _Bool     fai_enable;                   /** フレーム付加情報の領域スキップ機能の有効無効フラグ */
    uint32_t  bmu;                          /** バッファ管理ユニットの選択 */
    uint32_t  scan;                         /** フレーム走査方法 */
    uint32_t  dim;                          /** アドレスの指定方法 */
    _Bool     vram_word_swap_enable;        /** ワードデータのスワップを選択 */
    _Bool     vram_hword_swap_enable;       /** ハーフワードデータのスワップを選択 */
    _Bool     vram_1bit_swap_enable;        /** 1bitデータのスワップを選択 */
    _Bool     vram_4bit_swap_enable;        /** 4bitデータのスワップを選択 */
    uint32_t  md;                           /** インタレースフレームの読み出し方法 */
    uint32_t  format;                       /** VRAM上の格納フォーマット */
    uint32_t  div;                          /** 出力期間引き延ばし */
    uint32_t  valid;                        /** 出力有効期間 */
    uint32_t  invalid;                      /** 出力無効期間 */
    uint32_t  addr;                         /** ベースアドレス */
    uint32_t  stride;                       /** 2次元アドレス時のVRAM水平バイトサイズ */
    uint32_t  h_pulse_width;                /** 水平同期信号パルス幅 */
    uint32_t  h_front_porch;                /** 水平フロントポーチ */
    uint32_t  h_back_porch;                 /** 水平バックポーチ */
    uint32_t  h_frame_size;                 /** 水平フレームサイズ */
    _Bool     adjust_even_vbp;              /** インタレースモードでのEvenフレームのVBP調整 */
    _Bool     adjust_even_vfp;              /** インタレースモードでのEvenフレームのVFP調整 */
    _Bool     adjust_odd_vbp;               /** インタレースモードでのOddフレームのVBP調整 */
    _Bool     adjust_odd_vfp;               /** インタレースモードでのOddフレームのVFP調整 */
    uint32_t  v_pulse_width;                /** 垂直同期信号パルス幅 */
    uint32_t  v_front_porch;                /** 垂直フロントポーチ */
    uint32_t  v_back_porch;                 /** 垂直フロントポーチ */
    uint32_t  v_frame_size;                 /** 垂直フレームサイズ */
    _Bool     adjust_odd_vsize;             /** インタレースモードでのOddフレームのVSIZE調整 */
} AG903_PgpMgrVRAMInputHandle;


/**
 * フレーム間演算ハンドル
 */
typedef struct _AG903_PgpMgrFrameCalcHandle {
    uint32_t             id;                    /** フレーム間演算ハンドルを識別する為のID */
    _Bool                is_used;               /** ハンドルが取得状態であることを確認するフラグ */
    AG903_PgpMgrPipelineHandle *master_handle;  /** マスタのハンドル */
    void                 *slave_handle;         /** スレーブのハンドル */
    _Bool                slave_pipeline;        /** スレーブがパイプライハンドルであるか確認するためのフラグ */
} AG903_PgpMgrFrameCalcHandle;


/* 標準ライブラリ等をラップするマクロを定義します */
#ifndef AG903_PGP_COMMON_MALLOC
/** 
 * @brief       動的メモリ確保インタフェース
 * @param       size [in] 確保するサイズ
 * @return      確保したアドレス
 * @description ラべリング解析時にメモリ確保を行います.<p>
 * @note        確保したメモリは, 8バイト境界に配置されている必要があります.
 * @seealso     AG903_PgpMgrAnalyzeLabelingTable ag903_pgp_common_free
 */
extern void *ag903_pgp_common_malloc(uint32_t size);
/** メモリ確保関数定義 */
#define AG903_PGP_COMMON_MALLOC ag903_pgp_common_malloc
#endif

#ifndef AG903_PGP_COMMON_FREE
/** @brief       動的メモリ解放インタフェース
 *  @description ラべリング解析時に確保したメモリを開放します.<p>
 *               標準関数free相当の動作を期待しています.
 *  @seealso     AG903_PgpMgrAnalyzeLabelingTable ag903_pgp_common_malloc
 */
extern void ag903_pgp_common_free(void *ptr);
/** メモリ解放関数定義 */
#define AG903_PGP_COMMON_FREE   ag903_pgp_common_free
#endif

#ifndef AG903_PGP_MGR_TS_FORCE_DISABLE
int32_t AG903_PgpMgrEnableTimeSharingPipeline(_Bool enable);
#endif
int32_t AG903_PgpMgrGetPipelineHandle(int32_t num, AG903_PgpMgrPipelineHandle **handles);
int32_t AG903_PgpMgrReleasePipelineHandle(AG903_PgpMgrPipelineHandle *handle);
int32_t AG903_PgpMgrAssignPipeline(void *handle);
int32_t AG903_PgpMgrForceAssignPipeline(void *handle, uint32_t pipeline);
int32_t AG903_PgpMgrReleaseAssignment(void *handle);
int32_t AG903_PgpMgrCheckFunctionValidation(AG903_PgpMgrPipelineHandle *handle, uint32_t pipeline);
int32_t AG903_PgpMgrExecPipeline(void *handle, uint32_t cmd);
int32_t AG903_PgpMgrSetIntrCallbackFunc(AG903_PgpMgrPipelineHandle *handle, uint32_t type, void (*func)(int32_t id, void *handle));
int32_t AG903_PgpMgrSetConfigIntrCtrl(AG903_PgpMgrPipelineHandle *handle, uint32_t input_field, uint32_t input_fcnt, uint32_t input_line, uint32_t output_field, uint32_t output_fcnt, uint32_t output_line);
int32_t AG903_PgpMgrGetPipelineStatus(AG903_PgpMgrPipelineHandle *handle, uint32_t *blank, _Bool *is_vram_out, uint32_t *queue_cnt, uint32_t *sub_status, uint32_t *status);
int32_t AG903_PgpMgrEnableParamTrigCtrl(AG903_PgpMgrPipelineHandle *handle, _Bool vlinei_enable, _Bool vsynci_enable, _Bool vlineo_enable, _Bool vsynco_enable);
int32_t AG903_PgpMgrSetConfigTrigCtrl(AG903_PgpMgrPipelineHandle *handle, uint32_t input_field, uint32_t input_fcnt, uint32_t input_line, uint32_t output_field, uint32_t output_fcnt, uint32_t output_line);
int32_t AG903_PgpMgrSetParamInputHSyncDelay(AG903_PgpMgrPipelineHandle *handle, uint32_t h_delay);
int32_t AG903_PgpMgrSetParamInputMode(AG903_PgpMgrPipelineHandle *handle, uint32_t md);
int32_t AG903_PgpMgrSetParamInputTimeCLK(AG903_PgpMgrPipelineHandle *handle, uint32_t tick);
int32_t AG903_PgpMgrSetConfigInputTrigChannel(AG903_PgpMgrPipelineHandle *handle, uint32_t timer_ch);
int32_t AG903_PgpMgrSetInputPort(AG903_PgpMgrPipelineHandle *handle, void *src);
int32_t AG903_PgpMgrSetParamInputFormat(AG903_PgpMgrPipelineHandle *handle, uint32_t format);
int32_t AG903_PgpMgrSetParamInputSize(AG903_PgpMgrPipelineHandle *handle, uint32_t vsize, uint32_t hsize);
int32_t AG903_PgpMgrSetParamInputPosition(AG903_PgpMgrPipelineHandle *handle, uint32_t vpos, uint32_t hpos);
int32_t AG903_PgpMgrSetParamInputScan(AG903_PgpMgrPipelineHandle *handle, uint32_t scan, _Bool epos,_Bool opos);
int32_t AG903_PgpMgrSetConfigOutputFramePadding(AG903_PgpMgrPipelineHandle *handle, uint32_t pad);
int32_t AG903_PgpMgrSetConfigOutputLimit(AG903_PgpMgrPipelineHandle *handle, uint32_t limit);
int32_t AG903_PgpMgrEnableConfigOutputFrameInfo(AG903_PgpMgrPipelineHandle *handle, _Bool enable);
int32_t AG903_PgpMgrEnableConfigOutputDither(AG903_PgpMgrPipelineHandle *handle, _Bool enable);
int32_t AG903_PgpMgrSetParamOutputScan(AG903_PgpMgrPipelineHandle *handle, uint32_t scan);
int32_t AG903_PgpMgrSetParamOutputAddrDim(AG903_PgpMgrPipelineHandle *handle, uint32_t dim);
int32_t AG903_PgpMgrSetConfigOutputDataSwap(AG903_PgpMgrPipelineHandle *handle, _Bool word, _Bool hword, _Bool four_bit, _Bool one_bit);
int32_t AG903_PgpMgrSetConfigOutputInterlaceFrame(AG903_PgpMgrPipelineHandle *handle, uint32_t frame_save);
int32_t AG903_PgpMgrSetParamOutputBMU(AG903_PgpMgrPipelineHandle *handle, uint32_t bmu);
int32_t AG903_PgpMgrSetParamOutputFormat(AG903_PgpMgrPipelineHandle *handle, uint32_t format);
int32_t AG903_PgpMgrEnableConfigOutputColorMask(AG903_PgpMgrPipelineHandle *handle, _Bool red, _Bool green, _Bool blue);
int32_t AG903_PgpMgrSetConfigOutputBaseAddr(AG903_PgpMgrPipelineHandle *handle, void *addr);
int32_t AG903_PgpMgrSetParamOutputStride(AG903_PgpMgrPipelineHandle *handle, uint32_t stride);
int32_t AG903_PgpMgrGetFrameInfo(AG903_PgpMgrPipelineHandle *handle, uint32_t *tmstmp, uint32_t *field, uint32_t *port, uint32_t *fnum);
int32_t AG903_PgpMgrSetParamFrameCalcOrder(AG903_PgpMgrPipelineHandle *handle, uint32_t order);
int32_t AG903_PgpMgrEnableParamThresholdOp(AG903_PgpMgrPipelineHandle *handle, _Bool enable);
int32_t AG903_PgpMgrEnableParamDGC(AG903_PgpMgrPipelineHandle *handle, _Bool enable);
int32_t AG903_PgpMgrEnableParamHSV(AG903_PgpMgrPipelineHandle *handle, _Bool enable);
int32_t AG903_PgpMgrEnableParamSpatialFilter(AG903_PgpMgrPipelineHandle *handle, _Bool enable);
int32_t AG903_PgpMgrEnableParamScaling(AG903_PgpMgrPipelineHandle *handle, _Bool enable);
int32_t AG903_PgpMgrEnableParamColorSpace(AG903_PgpMgrPipelineHandle *handle, _Bool enable);
int32_t AG903_PgpMgrEnableParamNRF(AG903_PgpMgrPipelineHandle *handle, _Bool enable);
int32_t AG903_PgpMgrEnableParamHistogram(AG903_PgpMgrPipelineHandle *handle, _Bool enable);
int32_t AG903_PgpMgrEnableParamLabeling(AG903_PgpMgrPipelineHandle *handle, _Bool enable);
int32_t AG903_PgpMgrSetConfigIPConversion(AG903_PgpMgrPipelineHandle *handle, uint32_t limit, uint32_t blky, uint32_t blkc);
int32_t AG903_PgpMgrSetConfigColorSpace(AG903_PgpMgrPipelineHandle *handle, uint32_t limit, uint32_t shift, int32_t mtx[3][4]);
int32_t AG903_PgpMgrSetConfigPresetColorSpace(AG903_PgpMgrPipelineHandle *handle, uint32_t format);
int32_t AG903_PgpMgrSetConfigScaling(AG903_PgpMgrPipelineHandle *handle, uint32_t limit, uint32_t filter, uint32_t nmr_v, uint32_t dnm_v, uint32_t nmr_h, uint32_t dnm_h);
int32_t AG903_PgpMgrSetConfigSpatialFilter(AG903_PgpMgrPipelineHandle *handle, uint32_t shift, uint32_t border, uint32_t border_red, uint32_t border_green, uint32_t border_blue, int32_t coeff[9], int32_t offset);
int32_t AG903_PgpMgrSetConfigHSVHLSConversion(AG903_PgpMgrPipelineHandle *handle, uint32_t sel);
int32_t AG903_PgpMgrExecHistogram(AG903_PgpMgrPipelineHandle *handle, uint32_t cmd);
int32_t AG903_PgpMgrSetConfigHistogramParameter(AG903_PgpMgrPipelineHandle *handle, uint32_t inv, uint32_t exc, uint32_t thr, uint32_t shift, uint32_t v_inc, uint32_t h_inc);
int32_t AG903_PgpMgrSetConfigHistogramSize(AG903_PgpMgrPipelineHandle *handle, uint32_t vsize, uint32_t hsize);
int32_t AG903_PgpMgrSetConfigHistogramPosition(AG903_PgpMgrPipelineHandle *handle, uint32_t vpos, uint32_t hpos);
int32_t AG903_PgpMgrSetConfigHistogramBaseAddr(AG903_PgpMgrPipelineHandle *handle, void *addr);
int32_t AG903_PgpMgrEnableParamHistogramBMU(AG903_PgpMgrPipelineHandle *handle, _Bool enable);
int32_t AG903_PgpMgrGetHistogramParameter(AG903_PgpMgrPipelineHandle *handle, uint32_t *most_r, uint32_t *max_r, uint32_t *min_r, uint32_t *most_g, uint32_t *max_g, uint32_t *min_g, uint32_t *most_b, uint32_t *max_b, uint32_t *min_b);
int32_t AG903_PgpMgrGetHistogramStatus(AG903_PgpMgrPipelineHandle *handle, _Bool *is_init, _Bool *is_vram_out, _Bool *is_act, uint32_t *queue_cnt, uint32_t *exec_cmd);
int32_t AG903_PgpMgrSetConfigThreshold(AG903_PgpMgrPipelineHandle *handle, uint32_t limit, _Bool spf, _Bool mask, _Bool csc, _Bool hsv_hls, _Bool thr8, uint32_t sel_out, uint32_t sel_clut8);
int32_t AG903_PgpMgrSetConfigThresholdHSVHLSConversion(AG903_PgpMgrPipelineHandle *handle, uint32_t sel);
int32_t AG903_PgpMgrSetConfigThresholdColorSpace(AG903_PgpMgrPipelineHandle *handle, uint32_t limit, uint32_t shift, int32_t mtx[3][4]);
int32_t AG903_PgpMgrSetConfigThresholdPresetColorSpace(AG903_PgpMgrPipelineHandle *handle, uint32_t format);
int32_t AG903_PgpMgrSetConfigThresholdMask(AG903_PgpMgrPipelineHandle *handle, uint32_t ch, uint32_t h, uint32_t l, uint32_t x, uint32_t hmax, uint32_t hmin, uint32_t lmax, uint32_t lmin);
int32_t AG903_PgpMgrSetConfigThreshold8Bit(AG903_PgpMgrPipelineHandle *handle, uint32_t ch, uint32_t type, uint32_t maxval, uint32_t maxthr, uint32_t minthr);
int32_t AG903_PgpMgrSetConfigThreshold1Bit(AG903_PgpMgrPipelineHandle *handle, uint32_t h, uint32_t l, uint32_t x, uint32_t hmax, uint32_t hmin, uint32_t lmax, uint32_t lmin);
int32_t AG903_PgpMgrSetConfigThresholdSpatialFilter1Bit(AG903_PgpMgrPipelineHandle *handle, int32_t coeff[9], int32_t thr);
int32_t AG903_PgpMgrExecLabeling(AG903_PgpMgrPipelineHandle *handle, uint32_t cmd);
int32_t AG903_PgpMgrSetConfigLabelingValidTime(AG903_PgpMgrPipelineHandle *handle, uint32_t vld, uint32_t inv);
int32_t AG903_PgpMgrSetConfigLabelingParameter(AG903_PgpMgrPipelineHandle *handle, uint32_t connect, uint32_t flush_thr, uint32_t max_id);
int32_t AG903_PgpMgrSetConfigLabelingSize(AG903_PgpMgrPipelineHandle *handle, uint32_t vsize, uint32_t hsize);
int32_t AG903_PgpMgrSetConfigLabelingPosition(AG903_PgpMgrPipelineHandle *handle, uint32_t vpos, uint32_t hpos);
int32_t AG903_PgpMgrSetConfigLabelingBaseAddr(AG903_PgpMgrPipelineHandle *handle, void *addr);
int32_t AG903_PgpMgrEnableParamLabelingBMU(AG903_PgpMgrPipelineHandle *handle, _Bool enable);
int32_t AG903_PgpMgrGetLabelingStatus(AG903_PgpMgrPipelineHandle *handle, uint32_t *id, _Bool *is_vram_out, _Bool *is_act, uint32_t *queue_cnt, uint32_t *exec_cmd);
int32_t AG903_PgpMgrAnalyzeLabelingTable(void *src, uint32_t tbl_num, void **dst);
int32_t AG903_PgpMgrReleaseLabelingTable(void *dst);
int32_t AG903_PgpMgrGetFrameCalcHandle(AG903_PgpMgrFrameCalcHandle **handle, AG903_PgpMgrPipelineHandle *master, void *slave);
int32_t AG903_PgpMgrReleaseFrameCalcHandle(AG903_PgpMgrFrameCalcHandle *handle);
int32_t AG903_PgpMgrSetConfigFrameCalcParameter(AG903_PgpMgrFrameCalcHandle *handle, uint32_t scan, uint32_t limit, uint32_t slave_src, uint32_t operation);
int32_t AG903_PgpMgrSetConfigFrameCalcGain(AG903_PgpMgrFrameCalcHandle *handle, int32_t master_gain, int32_t slave_gain, uint32_t master_shift, uint32_t slave_shift);
int32_t AG903_PgpMgrGetVRAMInputHandle(int32_t num, AG903_PgpMgrVRAMInputHandle **handles);
int32_t AG903_PgpMgrReleaseVRAMInputHandle(AG903_PgpMgrVRAMInputHandle *handle);
int32_t AG903_PgpMgrExecVRAMInput(AG903_PgpMgrVRAMInputHandle *handle, uint32_t cmd);
int32_t AG903_PgpMgrGetVRAMStatus(AG903_PgpMgrVRAMInputHandle *handle, _Bool *is_vram_out, uint32_t *queue_cnt, uint32_t *exec_cmd);
int32_t AG903_PgpMgrSetParamVRAMInputBMU(AG903_PgpMgrVRAMInputHandle *handle, uint32_t bmu);
int32_t AG903_PgpMgrSetParamVRAMInputScan(AG903_PgpMgrVRAMInputHandle *handle, uint32_t scan);
int32_t AG903_PgpMgrSetParamVRAMInputAddrDim(AG903_PgpMgrVRAMInputHandle *handle, uint32_t dim);
int32_t AG903_PgpMgrSetConfigVRAMDataSwap(AG903_PgpMgrVRAMInputHandle *handle, _Bool word, _Bool hword, _Bool four_bit, _Bool one_bit);
int32_t AG903_PgpMgrSetConfigVRAMInterlaceFrame(AG903_PgpMgrVRAMInputHandle *handle, uint32_t frame_read, _Bool fai);
int32_t AG903_PgpMgrSetConfigVRAMValidTime(AG903_PgpMgrVRAMInputHandle *handle, uint32_t div, uint32_t vld, uint32_t inv);
int32_t AG903_PgpMgrSetParamVRAMFormat(AG903_PgpMgrVRAMInputHandle *handle, uint32_t format);
int32_t AG903_PgpMgrSetConfigVRAMBaseAddr(AG903_PgpMgrVRAMInputHandle *handle, void *addr);
int32_t AG903_PgpMgrSetParamVRAMStride(AG903_PgpMgrVRAMInputHandle *handle, uint32_t stride);
int32_t AG903_PgpMgrSetParamVRAMSyncSignal(AG903_PgpMgrVRAMInputHandle *handle, uint32_t h_pw, uint32_t h_fp, uint32_t h_bp, uint32_t v_pw, uint32_t v_fp, uint32_t v_bp);
int32_t AG903_PgpMgrSetParamVRAMSize(AG903_PgpMgrVRAMInputHandle *handle, uint32_t h_size, uint32_t v_size);
int32_t AG903_PgpMgrAdjustVRAMFrame(AG903_PgpMgrVRAMInputHandle *handle, _Bool e_vbp, _Bool e_vfp, _Bool o_vbp, _Bool o_vfp, _Bool o_vsize);
int32_t AG903_PgpMgrCheckVRAMParameter(AG903_PgpMgrVRAMInputHandle *vram, AG903_PgpMgrPipelineHandle *pipeline);
int32_t AG903_PgpMgrSetJPEG(AG903_PgpMgrPipelineHandle *handle);
int32_t AG903_PgpMgrEnableJPEG(_Bool enable);
int32_t AG903_PgpMgrGetDGCLUT(uint8_t red[256], uint8_t green[256], uint8_t blue[256], AG903_PgpMgrDGCLookupTable **table);
int32_t AG903_PgpMgrReleaseDGCLUT(AG903_PgpMgrDGCLookupTable *table);
int32_t AG903_PgpMgrSetConfigDGCLUT(AG903_PgpMgrPipelineHandle *pipeline, AG903_PgpMgrDGCLookupTable *dgc_lut);


#ifdef __cplusplus
}
#endif


#endif

