| /* |
| * Copyright (C) 2008 The Android Open Source Project |
| * |
| * 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. |
| */ |
| |
| /* ---- includes ----------------------------------------------------------- */ |
| |
| #include "b_APIEm/DCR.h" |
| #include "b_BasicEm/Functions.h" |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| /* ========================================================================= */ |
| /* */ |
| /* ---- \ghd{ auxiliary functions } ---------------------------------------- */ |
| /* */ |
| /* ========================================================================= */ |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| /* ========================================================================= */ |
| /* */ |
| /* ---- \ghd{ constructor / destructor } ----------------------------------- */ |
| /* */ |
| /* ========================================================================= */ |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| void bpi_DCR_init( struct bbs_Context* cpA, |
| struct bpi_DCR* ptrA ) |
| { |
| ptrA->maxImageWidthE = 0; |
| ptrA->maxImageHeightE = 0; |
| ptrA->imageDataPtrE = NULL; |
| ptrA->imageWidthE = 0; |
| ptrA->imageHeightE = 0; |
| bts_Int16Vec2D_init( &ptrA->offsE ); |
| bts_IdCluster2D_init( cpA, &ptrA->mainClusterE ); |
| bts_IdCluster2D_init( cpA, &ptrA->sdkClusterE ); |
| ptrA->confidenceE = 0; |
| ptrA->approvedE = FALSE; |
| ptrA->idE = 0; |
| ptrA->roiRectE = bts_Int16Rect_create( 0, 0, 0, 0 ); |
| bbs_UInt16Arr_init( cpA, &ptrA->cueDataE ); |
| } |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| void bpi_DCR_exit( struct bbs_Context* cpA, |
| struct bpi_DCR* ptrA ) |
| { |
| ptrA->maxImageWidthE = 0; |
| ptrA->maxImageHeightE = 0; |
| ptrA->imageDataPtrE = NULL; |
| ptrA->imageWidthE = 0; |
| ptrA->imageHeightE = 0; |
| bts_Int16Vec2D_exit( &ptrA->offsE ); |
| bts_IdCluster2D_exit( cpA, &ptrA->mainClusterE ); |
| bts_IdCluster2D_exit( cpA, &ptrA->sdkClusterE ); |
| ptrA->confidenceE = 0; |
| ptrA->approvedE = FALSE; |
| ptrA->idE = 0; |
| bbs_UInt16Arr_exit( cpA, &ptrA->cueDataE ); |
| } |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| /* ========================================================================= */ |
| /* */ |
| /* ---- \ghd{ operators } -------------------------------------------------- */ |
| /* */ |
| /* ========================================================================= */ |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| /* ========================================================================= */ |
| /* */ |
| /* ---- \ghd{ query functions } -------------------------------------------- */ |
| /* */ |
| /* ========================================================================= */ |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| /* ========================================================================= */ |
| /* */ |
| /* ---- \ghd{ modify functions } ------------------------------------------- */ |
| /* */ |
| /* ========================================================================= */ |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| void bpi_DCR_create( struct bbs_Context* cpA, |
| struct bpi_DCR* ptrA, |
| uint32 imageWidthA, |
| uint32 imageHeightA, |
| uint32 cueSizeA, |
| struct bbs_MemTbl* mtpA ) |
| { |
| struct bbs_MemTbl memTblL = *mtpA; |
| struct bbs_MemSeg* espL = |
| bbs_MemTbl_fastestSegPtr( cpA, &memTblL, |
| bpi_DCR_MAX_CLUSTER_SIZE * bbs_SIZEOF16( struct bts_Int16Vec2D ) ); |
| if( bbs_Context_error( cpA ) ) return; |
| |
| bts_IdCluster2D_create( cpA, &ptrA->mainClusterE, bpi_DCR_MAX_CLUSTER_SIZE, espL ); |
| bts_IdCluster2D_size( cpA, &ptrA->mainClusterE, 0 ); |
| if( bbs_Context_error( cpA ) ) return; |
| bts_IdCluster2D_create( cpA, &ptrA->sdkClusterE, bpi_DCR_MAX_SDK_CLUSTER_SIZE, espL ); |
| bts_IdCluster2D_size( cpA, &ptrA->sdkClusterE, 0 ); |
| if( bbs_Context_error( cpA ) ) return; |
| if( bbs_Context_error( cpA ) ) return; |
| bbs_UInt16Arr_create( cpA, &ptrA->cueDataE, cueSizeA, espL ); |
| bbs_UInt16Arr_size( cpA, &ptrA->cueDataE, 0 ); |
| |
| ptrA->maxImageWidthE = imageWidthA; |
| ptrA->maxImageHeightE = imageHeightA; |
| } |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| /* ========================================================================= */ |
| /* */ |
| /* ---- \ghd{ I/O } -------------------------------------------------------- */ |
| /* */ |
| /* ========================================================================= */ |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| /* ========================================================================= */ |
| /* */ |
| /* ---- \ghd{ exec functions } --------------------------------------------- */ |
| /* */ |
| /* ========================================================================= */ |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| void bpi_DCR_assignGrayByteImage( struct bbs_Context* cpA, |
| struct bpi_DCR* ptrA, |
| const void* bufferPtrA, |
| uint32 widthA, |
| uint32 heightA ) |
| { |
| bbs_DEF_fNameL( "void bpi_DCR_assignGrayByteImage( struct bbs_Context* cpA, struct bpi_DCR* ptrA, const void* bufferPtrA, uint32 widthA, uint32 heightA )" ) |
| |
| if( widthA > ptrA->maxImageWidthE || heightA > ptrA->maxImageHeightE ) |
| { |
| bbs_ERROR5( "%s:\nSize of assigned image (%ix%i) exceeds maximum size defined at DCR initialization (%ix%i).", |
| fNameL, |
| widthA, heightA, |
| ptrA->maxImageWidthE, ptrA->maxImageHeightE ); |
| return; |
| } |
| |
| if( ( widthA & 1 ) != 0 ) |
| { |
| bbs_ERROR1( "%s:\nWidth of image must be even.\n", fNameL ); |
| return; |
| } |
| |
| ptrA->imageDataPtrE = ( void* )bufferPtrA; |
| ptrA->imageWidthE = widthA; |
| ptrA->imageHeightE = heightA; |
| |
| /* reset some data */ |
| ptrA->roiRectE = bts_Int16Rect_create( 0, 0, widthA, heightA ); |
| bts_IdCluster2D_size( cpA, &ptrA->mainClusterE, 0 ); |
| bts_IdCluster2D_size( cpA, &ptrA->sdkClusterE, 0 ); |
| bbs_UInt16Arr_size( cpA, &ptrA->cueDataE, 0 ); |
| } |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| void bpi_DCR_assignGrayByteImageROI( struct bbs_Context* cpA, |
| struct bpi_DCR* ptrA, |
| const void* bufferPtrA, |
| uint32 widthA, |
| uint32 heightA, |
| const struct bts_Int16Rect* pRectA ) |
| { |
| bbs_DEF_fNameL( "void bpi_DCR_assignGrayByteImageROI( struct bpi_DCR* ptrA, const void* bufferPtrA, uint32 widthA, uint32 heightA )" ) |
| |
| if( widthA > ptrA->maxImageWidthE || heightA > ptrA->maxImageHeightE ) |
| { |
| bbs_ERROR5( "%s:\nSize of assigned image (%ix%i) exceeds maximum size defined at DCR initialization (%ix%i).", |
| fNameL, |
| widthA, heightA, |
| ptrA->maxImageWidthE, ptrA->maxImageHeightE ); |
| return; |
| } |
| |
| if( ( widthA & 1 ) != 0 ) |
| { |
| bbs_ERROR1( "%s:\nWidth of image must be even.\n", |
| fNameL ); |
| return; |
| } |
| |
| if( pRectA->x2E < pRectA->x1E || pRectA->y2E < pRectA->y1E || |
| pRectA->x1E < 0 || pRectA->y1E < 0 || |
| pRectA->x2E > ( int32 )widthA || pRectA->y2E > ( int32 )heightA ) |
| { |
| bbs_ERROR1( "%s:\nInvalid ROI rectangle.\n", fNameL ); |
| return; |
| } |
| |
| ptrA->imageDataPtrE = ( void* )bufferPtrA; |
| ptrA->imageWidthE = widthA; |
| ptrA->imageHeightE = heightA; |
| |
| /* reset some data */ |
| ptrA->roiRectE = *pRectA; |
| bts_IdCluster2D_size( cpA, &ptrA->mainClusterE, 0 ); |
| bts_IdCluster2D_size( cpA, &ptrA->sdkClusterE, 0 ); |
| bbs_UInt16Arr_size( cpA, &ptrA->cueDataE, 0 ); |
| } |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| int32 bpi_DCR_confidence( struct bbs_Context* cpA, |
| const struct bpi_DCR* ptrA ) |
| { |
| return ptrA->confidenceE; |
| } |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| /* ========================================================================= */ |