| 136 | } |
| 137 | |
| 138 | void decoderVTM::resolveLibraryFunctionPointers() |
| 139 | { |
| 140 | // Get/check function pointers |
| 141 | if (!resolve(this->lib.libVTMDec_get_version, "libVTMDec_get_version")) |
| 142 | return; |
| 143 | if (!resolve(this->lib.libVTMDec_new_decoder, "libVTMDec_new_decoder")) |
| 144 | return; |
| 145 | if (!resolve(this->lib.libVTMDec_free_decoder, "libVTMDec_free_decoder")) |
| 146 | return; |
| 147 | if (!resolve(this->lib.libVTMDec_set_SEI_Check, "libVTMDec_set_SEI_Check")) |
| 148 | return; |
| 149 | if (!resolve(this->lib.libVTMDec_set_max_temporal_layer, "libVTMDec_set_max_temporal_layer")) |
| 150 | return; |
| 151 | if (!resolve(this->lib.libVTMDec_push_nal_unit, "libVTMDec_push_nal_unit")) |
| 152 | return; |
| 153 | |
| 154 | if (!resolve(this->lib.libVTMDec_get_picture, "libVTMDec_get_picture")) |
| 155 | return; |
| 156 | if (!resolve(this->lib.libVTMDec_get_POC, "libVTMDec_get_POC")) |
| 157 | return; |
| 158 | if (!resolve(this->lib.libVTMDec_get_picture_width, "libVTMDec_get_picture_width")) |
| 159 | return; |
| 160 | if (!resolve(this->lib.libVTMDec_get_picture_height, "libVTMDec_get_picture_height")) |
| 161 | return; |
| 162 | if (!resolve(this->lib.libVTMDec_get_picture_stride, "libVTMDec_get_picture_stride")) |
| 163 | return; |
| 164 | if (!resolve(this->lib.libVTMDec_get_image_plane, "libVTMDec_get_image_plane")) |
| 165 | return; |
| 166 | if (!resolve(this->lib.libVTMDec_get_chroma_format, "libVTMDec_get_chroma_format")) |
| 167 | return; |
| 168 | if (!resolve(this->lib.libVTMDec_get_internal_bit_depth, "libVTMDec_get_internal_bit_depth")) |
| 169 | return; |
| 170 | |
| 171 | /*if (!resolve(libVTMDec_get_internal_type_number, "libVTMDec_get_internal_type_number")) return; |
| 172 | if (!resolve(libVTMDec_get_internal_type_name, "libVTMDec_get_internal_type_name")) return;*/ |
| 173 | /*if (!resolve(libVTMDec_get_internal_type, "libVTMDec_get_internal_type")) return; |
| 174 | if (!resolve(libVTMDec_get_internal_type_max, "libVTMDec_get_internal_type_max")) return; |
| 175 | if (!resolve(libVTMDec_get_internal_type_vector_scaling, |
| 176 | "libVTMDec_get_internal_type_vector_scaling")) return; if |
| 177 | (!resolve(libVTMDec_get_internal_type_description, "libVTMDec_get_internal_type_description")) |
| 178 | return; if (!resolve(libVTMDec_get_internal_info, "libVTMDec_get_internal_info")) return; if |
| 179 | (!resolve(libVTMDec_clear_internal_info, "libVTMDec_clear_internal_info")) return;*/ |
| 180 | |
| 181 | // All interbals functions were successfully retrieved |
| 182 | internalsSupported = true; |
| 183 | |
| 184 | return; |
| 185 | |
| 186 | // TODO: could we somehow get the prediction/residual signal? |
| 187 | // I don't think this is possible without changes to the reference decoder. |
| 188 | DEBUG_DECVTM("decoderVTM::loadDecoderLibrary - prediction/residual internals found"); |
| 189 | } |
| 190 | |
| 191 | template <typename T> T decoderVTM::resolve(T &fun, const char *symbol, bool optional) |
| 192 | { |