HDF5 C++ с фильтрами сторонних производителей

Я пытаюсь написать код C++ для создания набора данных HDF5 со сторонними фильтрами, перечисленными здесь:» https://support.hdfgroup.org/services/contributions.html «. Я создал функцию фильтра snappy, которая может сжимать и распаковывать данные с помощью функций библиотеки snappy. Я смог писать с помощью snappy filter и читать с него без каких-либо проблем. Однако, когда я пытаюсь прочитать данные через h5dump, я не получаю никаких выходных данных, даже если я использую правильный идентификатор фильтра (32003 для snappy).

Я предполагаю, что проблема заключается в том, что h5dump не имеет доступа к моей функции фильтра. Есть ли какой-то способ обойти это? Могу ли я каким-то образом создать библиотеку и сказать h5dump, чтобы получить функцию из нее? Кроме того, поскольку фильтр уже зарегистрирован в hdfgroup, я думаю, что я могу предположить, что уже существует реализация функции фильтра, которую может прочитать h5dump. Можно ли использовать это в коде C++ для обеспечения согласованности?

1 ответ

  1. Да, начиная с HDF5 версии 1.8.11 вы можете использовать [динамически загружаемые фильтры]
    (https://support.hdfgroup.org/HDF5/doc/Advanced/DynamicallyLoadedFilters/HDF5DynamicallyLoadedFilters.pdf).
    В основном вам нужно создать общую библиотеку вашей функции фильтра и сделать ее доступной для библиотеки HDF5, поместив ее в определенную папку ( /usr/local/hdf5/lib/plugin) или указав папку через HDF5_PLUGIN_PATH.

    В качестве примера можно посмотреть фильтр lzf в репо h5py.

    Также взгляните на Blosc, который является мета-компрессором для различных алгоритмов сжатия, включая snappy.