#c #hdf5
#c #hdf5
Вопрос:
Я пытаюсь написать код на C для создания набора данных HDF5 со сторонними фильтрами, перечисленными здесь: «https://support.hdfgroup.org/services/contributions.html «. Я создал функцию быстрого фильтрации, которая может сжимать и распаковывать данные, используя функции библиотеки snappy. Я смог писать с помощью snappy filter и читать из него без каких-либо проблем. Однако, когда я пытаюсь прочитать данные через h5dump, я не получаю никаких выходных данных, хотя я использую правильный идентификатор фильтра (32003 для snappy).
Я предполагаю, что проблема в том, что h5dump не имеет доступа к моей функции фильтра. Есть ли какой-нибудь способ обойти это? Могу ли я каким-то образом создать библиотеку и сообщить h5dump, чтобы получить из нее функцию? В качестве альтернативы, поскольку фильтр уже зарегистрирован в hdfgroup, я полагаю, я могу предположить, что уже существует существующая реализация функции фильтра, которую может прочитать h5dump. Могу ли я использовать это в своем коде на C для обеспечения согласованности?
Ответ №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.