From 09943e1d571bb82326c0ac8195e2cb2b9a29e1b6 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Tue, 29 Mar 2011 02:10:57 +0000 Subject: lv2_pfile => rdff. git-svn-id: svn://localhost/ardour2/branches/3.0@9221 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/rdff.h | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 libs/ardour/rdff.h (limited to 'libs/ardour/rdff.h') diff --git a/libs/ardour/rdff.h b/libs/ardour/rdff.h new file mode 100644 index 0000000000..6e9d197536 --- /dev/null +++ b/libs/ardour/rdff.h @@ -0,0 +1,121 @@ +/* + RDFF - RDF in RIFF + Copyright 2011 David Robillard + + This is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This software is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this sofware; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +#ifndef RDFF_RDFF_H +#define RDFF_RDFF_H + +#include +#include + +#ifdef __GNUC__ +# define PACKED __attribute__((__packed__)) +#else +# define PACKED +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _RDFF* RDFF; + +typedef enum { + RDFF_STATUS_OK = 0, + RDFF_STATUS_UNKNOWN_ERROR = 1, + RDFF_STATUS_EOF = 2, + RDFF_STATUS_CORRUPT = 3 +} RDFFStatus; + +/** + Generic RIFF chunk header. +*/ +typedef struct { + char type[4]; + uint32_t size; + char data[]; +} PACKED RDFFChunk; + +/** + Body of a URID chunk. +*/ +typedef struct { + uint32_t id; + char uri[]; +} PACKED RDFFURIChunk; + +/** + Body of a KVAL chunk. +*/ +typedef struct { + uint32_t key; + uint32_t type; + uint32_t size; + char value[]; +} PACKED RDFFValueChunk; + +/** + Open/Create a new RDFF file. +*/ +RDFF +rdff_open(const char* path, bool write); + +/** + Write a URI ID to @a file. +*/ +RDFFStatus +rdff_write_uri(RDFF file, + uint32_t id, + const char* uri, + uint32_t len); + +/** + Write a key/value record to @a file. +*/ +RDFFStatus +rdff_write_value(RDFF file, + uint32_t key, + const void* value, + uint32_t size, + uint32_t type); + +/** + Read a chunk from @a file. + + @param buf MUST point to an RDFFChunk dynamically allocated with malloc. + The @a size field (i.e. (*buf)->size) MUST be set to the amount of available + memory in the chunk (not including the header). If this is insufficient, + *buf will be resized using realloc. +*/ +RDFFStatus +rdff_read_chunk(RDFF file, + RDFFChunk** buf); + +/** + Close @a file. + After this call, @a file is invalid. +*/ +void +rdff_close(RDFF file); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* RDFF_RDFF_H */ -- cgit v1.2.3