Fawkes API Fawkes Development Version
rectinfo_block.cpp
1
2/***************************************************************************
3 * rectinfo_block.cpp - Rectification info block encapsulation
4 *
5 * Created: Wed Oct 31 14:35:36 2007
6 * Copyright 2007 Tim Niemueller [www.niemueller.de]
7 *
8 ****************************************************************************/
9
10/* This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version. A runtime exception applies to
14 * this software (see LICENSE.GPL_WRE file mentioned below for details).
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU Library General Public License for more details.
20 *
21 * Read the full text in the LICENSE.GPL_WRE file in the doc directory.
22 */
23
24#include <core/exceptions/software.h>
25#include <core/exceptions/system.h>
26#include <fvutils/rectification/rectinfo_block.h>
27
28#include <cstdlib>
29#include <cstring>
30
31namespace firevision {
32
33/** @class RectificationInfoBlock <fvutils/rectification/rectinfo_block.h>
34 * Rectification info block.
35 * This base class defines the basic interface to interact with rectification
36 * info blocks. It manages a small memory chunk that may later be used via
37 * other recitification information classes in an easy manner. Concrete
38 * implementations of a specific block type shall be derived from this
39 * class.
40 * @author Tim Niemueller
41 */
42
43/** @var RectificationInfoBlock::_block_header
44 * Rectification block header.
45 * This is a pointer to the content-specific block header for rectification info blocks.
46 */
47
48/** @fn void RectificationInfoBlock::mapping(uint16_t x, uint16_t y, uint16_t *to_x, uint16_t *to_y) = 0
49 * Get mapping (to_x, to_y) for (x, y).
50 * This can be used as a general method to access the RectificationInfoBlock mapping.
51 * For many models there may be a better (faster) way to access the mapping information.
52 * It performance matters (and it most probably will) exploit this and use the
53 * provided shortcut.
54 * @param x X pixel coordinate to get mapping for
55 * @param y Y pixel coordinate to get mapping for
56 * @param to_x Upon return contains the X pixel coordinate of the unrectified image
57 * @param to_y Upon return contains the Y pixel coordinate of the unrectified image
58 */
59
60/** Recommended constructor.
61 * With this constructor a chunk of memory is allocated that is sufficient
62 * to hold the internal block header and the data of the given size. Note
63 * that the size you give is only meant to hold your type specific header
64 * and data. Some extra bytes are internally added for the type agnostic
65 * block header.
66 * @param block_type type of the block as defined per rectinfo_block_type_t
67 * @param camera camera identifier
68 * @param block_data_size size of the data block, this means only the sum of
69 * the size of the type specific header and the data itself, NOT including
70 * the type agnostic block header.
71 */
73 uint8_t camera,
74 size_t block_data_size)
75: FireVisionDataFileBlock(block_type, block_data_size, sizeof(rectinfo_block_header_t))
76{
77 if (_data_size > UINT32_MAX) {
78 throw fawkes::OutOfBoundsException("RectInfoBlock: block_data_size is too large",
79 block_data_size,
80 0,
81 UINT32_MAX);
82 }
83
86}
87
88/** Copy constructor.
89 * Copies data from the given FireVisionDataFileBlock. It is assumed that this
90 * actually is a rectification info block, check that before calling this
91 * method.
92 * @param block FireVision data file block
93 */
96{
98}
99
100/** Destructor.
101 * Destructs the chunk, if and only if _free_block_chunk is true.
102 */
104{
105 _block_header = NULL;
106}
107
108/** Get block camera identifier.
109 * @return camera identifier
110 * @see rectinfo_block_header_t
111 */
112uint8_t
114{
115 if (_block_header == NULL) {
116 throw fawkes::NullPointerException("No memory chunk loaded for rectinfo block");
117 }
118 return _block_header->camera;
119}
120
121} // end namespace firevision
A NULL pointer was supplied where not allowed.
Definition: software.h:32
Index out of bounds.
Definition: software.h:86
FireVision File Format data block.
Definition: fvfile_block.h:34
void * _spec_header
Pointer to the content specific block header.
Definition: fvfile_block.h:56
size_t _data_size
Size of _data in bytes.
Definition: fvfile_block.h:55
virtual ~RectificationInfoBlock()
Destructor.
RectificationInfoBlock(uint8_t block_type, uint8_t camera, size_t block_size)
Recommended constructor.
uint8_t camera() const
Get block camera identifier.
rectinfo_block_header_t * _block_header
Rectification block header.
The per-image rectification info block header.
Definition: rectinfo.h:109
uint32_t camera
camera, as specified per rectinfo_camera_t
Definition: rectinfo.h:110