summaryrefslogtreecommitdiffstats
path: root/ext/tarkin/tarkin.h
diff options
context:
space:
mode:
Diffstat (limited to 'ext/tarkin/tarkin.h')
-rw-r--r--ext/tarkin/tarkin.h273
1 files changed, 138 insertions, 135 deletions
diff --git a/ext/tarkin/tarkin.h b/ext/tarkin/tarkin.h
index 633f9a14..680ba4b9 100644
--- a/ext/tarkin/tarkin.h
+++ b/ext/tarkin/tarkin.h
@@ -18,105 +18,115 @@
/* Theses determine what infos the packet comes with */
#define TARKIN_PACK_EXAMPLE 1
-typedef struct {
- uint8_t *data;
- uint32_t data_len;
- uint32_t storage;
-} TarkinPacket;
-
-
-typedef enum {
- TARKIN_GRAYSCALE,
- TARKIN_RGB24, /* tight packed RGB */
- TARKIN_RGB32, /* 32bit, no alphachannel */
- TARKIN_RGBA, /* dito w/ alphachannel */
- TARKIN_YUV2, /* 16 bits YUV */
- TARKIN_YUV12, /* 12 bits YUV */
- TARKIN_FYUV, /* Tarkin's Fast YUV-like? */
+typedef struct
+{
+ uint8_t *data;
+ uint32_t data_len;
+ uint32_t storage;
+} TarkinPacket;
+
+
+typedef enum
+{
+ TARKIN_GRAYSCALE,
+ TARKIN_RGB24, /* tight packed RGB */
+ TARKIN_RGB32, /* 32bit, no alphachannel */
+ TARKIN_RGBA, /* dito w/ alphachannel */
+ TARKIN_YUV2, /* 16 bits YUV */
+ TARKIN_YUV12, /* 12 bits YUV */
+ TARKIN_FYUV, /* Tarkin's Fast YUV-like? */
} TarkinColorFormat;
#define TARKIN_INTERNAL_FORMAT TARKIN_FYUV
-typedef enum {
- TARKIN_OK = 0,
- TARKIN_IO_ERROR,
- TARKIN_SIGNATURE_NOT_FOUND,
- TARKIN_INVALID_LAYER,
- TARKIN_INVALID_COLOR_FORMAT,
- TARKIN_VERSION,
- TARKIN_BAD_HEADER,
- TARKIN_NOT_TARKIN,
- TARKIN_FAULT,
- TARKIN_UNUSED,
- TARKIN_NEED_MORE,
- TARKIN_NOT_IMPLEMENTED
+typedef enum
+{
+ TARKIN_OK = 0,
+ TARKIN_IO_ERROR,
+ TARKIN_SIGNATURE_NOT_FOUND,
+ TARKIN_INVALID_LAYER,
+ TARKIN_INVALID_COLOR_FORMAT,
+ TARKIN_VERSION,
+ TARKIN_BAD_HEADER,
+ TARKIN_NOT_TARKIN,
+ TARKIN_FAULT,
+ TARKIN_UNUSED,
+ TARKIN_NEED_MORE,
+ TARKIN_NOT_IMPLEMENTED
} TarkinError;
-typedef struct {
- uint32_t width;
- uint32_t height;
- uint32_t a_moments;
- uint32_t s_moments;
- uint32_t frames_per_buf;
- uint32_t bitstream_len; /* for all color components, bytes */
- TarkinColorFormat format;
+typedef struct
+{
+ uint32_t width;
+ uint32_t height;
+ uint32_t a_moments;
+ uint32_t s_moments;
+ uint32_t frames_per_buf;
+ uint32_t bitstream_len; /* for all color components, bytes */
+ TarkinColorFormat format;
} TarkinVideoLayerDesc;
-typedef struct {
- TarkinVideoLayerDesc desc;
- uint32_t n_comp; /* number of color components */
- Wavelet3DBuf **waveletbuf;
- TarkinPacket *packet;
- uint32_t current_frame_in_buf;
- uint32_t frameno;
+typedef struct
+{
+ TarkinVideoLayerDesc desc;
+ uint32_t n_comp; /* number of color components */
+ Wavelet3DBuf **waveletbuf;
+ TarkinPacket *packet;
+ uint32_t current_frame_in_buf;
+ uint32_t frameno;
- void (*color_fwd_xform) (uint8_t *rgba, Wavelet3DBuf *yuva [], uint32_t count);
- void (*color_inv_xform) (Wavelet3DBuf *yuva [], uint8_t *rgba, uint32_t count);
+ void (*color_fwd_xform) (uint8_t * rgba, Wavelet3DBuf * yuva[],
+ uint32_t count);
+ void (*color_inv_xform) (Wavelet3DBuf * yuva[], uint8_t * rgba,
+ uint32_t count);
} TarkinVideoLayer;
-typedef struct {
- uint32_t numerator;
- uint32_t denominator;
-} TarkinTime; /* Let's say the unit is 1 second */
-
-typedef struct TarkinInfo {
- int version;
- int n_layers;
- TarkinVideoLayer *layer;
- TarkinTime inter; /* numerator == O if per-frame time info. */
- int frames_per_block;
- int comp_per_block; /* AKA "packets per block" for now */
- uint32_t max_bitstream_len;
+typedef struct
+{
+ uint32_t numerator;
+ uint32_t denominator;
+} TarkinTime; /* Let's say the unit is 1 second */
+
+typedef struct TarkinInfo
+{
+ int version;
+ int n_layers;
+ TarkinVideoLayer *layer;
+ TarkinTime inter; /* numerator == O if per-frame time info. */
+ int frames_per_block;
+ int comp_per_block; /* AKA "packets per block" for now */
+ uint32_t max_bitstream_len;
/* The below bitrate declarations are *hints*.
Combinations of the three values carry the following implications:
-
+
all three set to the same value:
- implies a fixed rate bitstream
+ implies a fixed rate bitstream
only nominal set:
- implies a VBR stream that averages the nominal bitrate. No hard
- upper/lower limit
+ implies a VBR stream that averages the nominal bitrate. No hard
+ upper/lower limit
upper and or lower set:
- implies a VBR bitstream that obeys the bitrate limits. nominal
- may also be set to give a nominal rate.
+ implies a VBR bitstream that obeys the bitrate limits. nominal
+ may also be set to give a nominal rate.
none set:
- the coder does not care to speculate.
- */
+ the coder does not care to speculate.
+ */
- long bitrate_upper;
- long bitrate_nominal;
- long bitrate_lower;
- long bitrate_window;
+ long bitrate_upper;
+ long bitrate_nominal;
+ long bitrate_lower;
+ long bitrate_window;
} TarkinInfo;
/* This is used for encoding */
-typedef struct {
- unsigned char *header;
- unsigned char *header1;
- unsigned char *header2;
+typedef struct
+{
+ unsigned char *header;
+ unsigned char *header1;
+ unsigned char *header2;
} tarkin_header_store;
@@ -124,31 +134,33 @@ typedef struct {
/* Some of the fields in TarkinStream are redundent with TarkinInfo ones
* and will probably get deleted, namely n_layers and frames_per_buf */
-typedef struct TarkinStream {
- uint32_t n_layers;
- TarkinVideoLayer *layer;
- uint32_t current_frame;
- uint32_t current_frame_in_buf;
- ogg_int64_t packetno;
- uint32_t frames_per_buf;
- uint32_t max_bitstream_len;
- TarkinInfo *ti;
- tarkin_header_store headers;
- /* These callbacks are only used for encoding */
- TarkinError (*free_frame)(void *tarkinstream, void *ptr);
- /* These thing allows not to buffer but it needs global var in caller. */
- TarkinError (*packet_out)(void *tarkinstream, ogg_packet *ptr);
- void * user_ptr;
+typedef struct TarkinStream
+{
+ uint32_t n_layers;
+ TarkinVideoLayer *layer;
+ uint32_t current_frame;
+ uint32_t current_frame_in_buf;
+ ogg_int64_t packetno;
+ uint32_t frames_per_buf;
+ uint32_t max_bitstream_len;
+ TarkinInfo *ti;
+ tarkin_header_store headers;
+ /* These callbacks are only used for encoding */
+ TarkinError (*free_frame) (void *tarkinstream, void *ptr);
+ /* These thing allows not to buffer but it needs global var in caller. */
+ TarkinError (*packet_out) (void *tarkinstream, ogg_packet * ptr);
+ void *user_ptr;
} TarkinStream;
-typedef struct TarkinComment{
+typedef struct TarkinComment
+{
/* unlimited user comment fields. libtarkin writes 'libtarkin'
whatever vendor is set to in encode */
char **user_comments;
- int *comment_lengths;
- int comments;
- char *vendor;
+ int *comment_lengths;
+ int comments;
+ char *vendor;
} TarkinComment;
@@ -161,17 +173,17 @@ typedef struct TarkinComment{
/* Theses are the very same than Vorbis versions, they could be shared. */
-extern TarkinStream* tarkin_stream_new ();
-extern void tarkin_stream_destroy (TarkinStream *s);
-extern void tarkin_info_init(TarkinInfo *vi);
-extern void tarkin_info_clear(TarkinInfo *vi);
-extern void tarkin_comment_init(TarkinComment *vc);
-extern void tarkin_comment_add(TarkinComment *vc, char *comment);
-extern void tarkin_comment_add_tag(TarkinComment *vc,
- char *tag, char *contents);
-extern char *tarkin_comment_query(TarkinComment *vc, char *tag, int count);
-extern int tarkin_comment_query_count(TarkinComment *vc, char *tag);
-extern void tarkin_comment_clear(TarkinComment *vc);
+extern TarkinStream *tarkin_stream_new ();
+extern void tarkin_stream_destroy (TarkinStream * s);
+extern void tarkin_info_init (TarkinInfo * vi);
+extern void tarkin_info_clear (TarkinInfo * vi);
+extern void tarkin_comment_init (TarkinComment * vc);
+extern void tarkin_comment_add (TarkinComment * vc, char *comment);
+extern void tarkin_comment_add_tag (TarkinComment * vc,
+ char *tag, char *contents);
+extern char *tarkin_comment_query (TarkinComment * vc, char *tag, int count);
+extern int tarkin_comment_query_count (TarkinComment * vc, char *tag);
+extern void tarkin_comment_clear (TarkinComment * vc);
/* Tarkin PRIMITIVES: analysis layer ****************************/
/* Tarkin encoding is done this way : you init it passing a fresh
@@ -181,59 +193,50 @@ extern void tarkin_comment_clear(TarkinComment *vc);
* is called when a packet is ready. The pointers given as arguments to
* these callback functions are of course only valid at the function call
* time. The user_ptr is stored in s and can be used by packet_out(). */
-extern int tarkin_analysis_init(TarkinStream *s,
- TarkinInfo *ti,
- TarkinError (*free_frame)(void *tarkinstream, void *ptr),
- TarkinError (*packet_out)(void *tarkinstream, ogg_packet *ptr),
- void *user_ptr
- );
+extern int tarkin_analysis_init (TarkinStream * s,
+ TarkinInfo * ti,
+ TarkinError (*free_frame) (void *tarkinstream, void *ptr),
+ TarkinError (*packet_out) (void *tarkinstream, ogg_packet * ptr),
+ void *user_ptr);
/* Then you need to add at least a layer in your stream, passing a
* TarkinVideoLayerDesc renseigned at least on the width, height and
* format parameters. */
-extern int tarkin_analysis_add_layer(TarkinStream *s,
- TarkinVideoLayerDesc *tvld);
+extern int tarkin_analysis_add_layer (TarkinStream * s,
+ TarkinVideoLayerDesc * tvld);
/* At that point you are ready to get headers out the lib by calling
* tarkin_analysis_headerout() passing it a renseigned TarkinComment
* structure. It does fill your 3 ogg_packet headers, which are valid
* till next call */
-extern int TarkinCommentheader_out(TarkinComment *vc, ogg_packet *op);
-extern TarkinError tarkin_analysis_headerout(TarkinStream *s,
- TarkinComment *vc,
- ogg_packet *op,
- ogg_packet *op_comm,
- ogg_packet *op_code);
+extern int TarkinCommentheader_out (TarkinComment * vc, ogg_packet * op);
+extern TarkinError tarkin_analysis_headerout (TarkinStream * s,
+ TarkinComment * vc,
+ ogg_packet * op, ogg_packet * op_comm, ogg_packet * op_code);
/* You are now ready to pass in frames to the codec, however don't free
* them before the codec told you so. It'll tell you when packets are
* ready to be taken out. When you have no more frame, simply pass NULL.
* If you encode multiple layers you have to do it synchronously, putting
* one frame from each layer at a time. */
-extern uint32_t tarkin_analysis_framein(TarkinStream *s,
- uint8_t *frame, /* NULL for EOS */
- uint32_t layer,
- TarkinTime *date);
+extern uint32_t tarkin_analysis_framein (TarkinStream * s, uint8_t * frame, /* NULL for EOS */
+ uint32_t layer, TarkinTime * date);
/* Tarkin PRIMITIVES: synthesis layer *******************************/
/* For decoding, you needs first to give the three first packet of the
* stream to tarkin_synthesis_headerin() which will fill for you blank
* TarkinInfo and TarkinComment. */
-extern TarkinError tarkin_synthesis_headerin(TarkinInfo *vi,TarkinComment *vc,
- ogg_packet *op);
+extern TarkinError tarkin_synthesis_headerin (TarkinInfo * vi,
+ TarkinComment * vc, ogg_packet * op);
/* Then you can init your stream with your TarkinInfo struct. */
-extern TarkinError tarkin_synthesis_init(TarkinStream *s,TarkinInfo *ti);
+extern TarkinError tarkin_synthesis_init (TarkinStream * s, TarkinInfo * ti);
+
/* All subsequent packets are to this be passed to tarkin_synthesis_packetin*/
-extern TarkinError tarkin_synthesis_packetin(TarkinStream *s, ogg_packet *op);
+extern TarkinError tarkin_synthesis_packetin (TarkinStream * s,
+ ogg_packet * op);
/* and then tarkin_synthesis_frameout gives you ptr on next frame, or NULL. It
* also fills for you date. */
-extern TarkinError tarkin_synthesis_frameout(TarkinStream *s,
- uint8_t **frame, uint32_t layer_id, TarkinTime *date);
+extern TarkinError tarkin_synthesis_frameout (TarkinStream * s,
+ uint8_t ** frame, uint32_t layer_id, TarkinTime * date);
/* When you're done with a frame, tell it to the codec with this. */
-extern int tarkin_synthesis_freeframe(TarkinStream *s, uint8_t *frame);
+extern int tarkin_synthesis_freeframe (TarkinStream * s, uint8_t * frame);
#endif
-
-
-
-
-
-