Publishing 2019 R1 content
[platform/upstream/dldt.git] / inference-engine / samples / common / format_reader / format_reader.h
1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 //
4
5 /**
6  * \brief Format reader abstract class implementation
7  * \file format_reader.h
8  */
9 #pragma once
10
11 #include <memory>
12 #include <string>
13 #include <vector>
14 #include <iostream>
15
16 #if defined(_WIN32)
17 # ifdef IMPLEMENT_FORMAT_READER
18 # define FORMAT_READER_API(type) extern "C"   __declspec(dllexport) type
19 # else
20 # define FORMAT_READER_API(type) extern "C" type
21 # endif
22 #elif(__GNUC__ >= 4)
23 # ifdef IMPLEMENT_FORMAT_READER
24 #  define FORMAT_READER_API(type) extern "C"   __attribute__((visibility("default"))) type
25 # else
26 #  define FORMAT_READER_API(type) extern "C" type
27 # endif
28 #else
29 # define FORMAT_READER_API(TYPE) extern "C" TYPE
30 #endif
31
32
33 namespace FormatReader {
34 /**
35  * \class FormatReader
36  * \brief This is an abstract class for reading input data
37  */
38 class Reader {
39 protected:
40     /// \brief height
41     size_t _height = 0;
42     /// \brief width
43     size_t _width = 0;
44     /// \brief data
45     std::shared_ptr<unsigned char> _data;
46
47 public:
48     /**
49      * \brief Get width
50      * @return width
51      */
52     size_t width() const { return _width; }
53
54     /**
55      * \brief Get height
56      * @return height
57      */
58     size_t height() const { return _height; }
59
60     /**
61      * \brief Get input data ptr
62      * @return shared pointer with input data
63      * @In case of using OpenCV, parameters width and height will be used for image resizing
64      */
65     virtual std::shared_ptr<unsigned char> getData(size_t width = 0, size_t height = 0) = 0;
66
67     /**
68      * \brief Get size
69      * @return size
70      */
71     virtual size_t size() const = 0;
72
73     virtual void Release() noexcept = 0;
74 };
75 }  // namespace FormatReader
76
77 /**
78  * \brief Function for create reader
79  * @return FormatReader pointer
80  */
81 FORMAT_READER_API(FormatReader::Reader*) CreateFormatReader(const char *filename);