| /* Smoke Codec | |
| * Copyright (C) <2004> Wim Taymans <wim@fluendo.com> | |
| * | |
| * This library is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU Library General Public | |
| * License as published by the Free Software Foundation; either | |
| * version 2 of the License, or (at your option) any later version. | |
| * | |
| * This library 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 | |
| * Library General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Library General Public | |
| * License along with this library; if not, write to the | |
| * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, | |
| * Boston, MA 02110-1301, USA. | |
| */ | |
| #ifndef __SMOKECODEC_H__ | |
| #define __SMOKECODEC_H__ | |
| #ifdef __cplusplus | |
| extern "C" { | |
| #endif /* __cplusplus */ | |
| typedef struct _SmokeCodecInfo SmokeCodecInfo; | |
| typedef enum { | |
| SMOKECODEC_WRONGVERSION = -5, | |
| SMOKECODEC_WRONGSIZE = -4, | |
| SMOKECODEC_ERROR = -3, | |
| SMOKECODEC_NOMEM = -2, | |
| SMOKECODEC_NULLPTR = -1, | |
| SMOKECODEC_OK = 0 | |
| } SmokeCodecResult; | |
| typedef enum { | |
| SMOKECODEC_KEYFRAME = (1<<0), | |
| SMOKECODEC_MOTION_VECTORS = (1<<1) | |
| } SmokeCodecFlags; | |
| #define SMOKECODEC_ID_STRING "smoke" | |
| typedef enum { | |
| SMOKECODEC_TYPE_ID = 0x80, | |
| SMOKECODEC_TYPE_COMMENT = 0x81, | |
| SMOKECODEC_TYPE_EXTRA = 0x83, | |
| SMOKECODEC_TYPE_DATA = 0x40 | |
| } SmokePacketType; | |
| /* init */ | |
| int smokecodec_encode_new (SmokeCodecInfo **info, | |
| const unsigned int width, | |
| const unsigned int height, | |
| const unsigned int fps_num, | |
| const unsigned int fps_denom); | |
| int smokecodec_decode_new (SmokeCodecInfo **info); | |
| int smokecodec_info_free (SmokeCodecInfo * info); | |
| /* config */ | |
| SmokeCodecResult smokecodec_set_quality (SmokeCodecInfo *info, | |
| const unsigned int min, | |
| const unsigned int max); | |
| SmokeCodecResult smokecodec_get_quality (SmokeCodecInfo *info, | |
| unsigned int *min, | |
| unsigned int *max); | |
| SmokeCodecResult smokecodec_set_threshold (SmokeCodecInfo *info, | |
| const unsigned int threshold); | |
| SmokeCodecResult smokecodec_get_threshold (SmokeCodecInfo *info, | |
| unsigned int *threshold); | |
| SmokeCodecResult smokecodec_set_bitrate (SmokeCodecInfo *info, | |
| const unsigned int bitrate); | |
| SmokeCodecResult smokecodec_get_bitrate (SmokeCodecInfo *info, | |
| unsigned int *bitrate); | |
| /* encoding */ | |
| SmokeCodecResult smokecodec_encode_id (SmokeCodecInfo *info, | |
| unsigned char *out, | |
| unsigned int *outsize); | |
| SmokeCodecResult smokecodec_encode (SmokeCodecInfo *info, | |
| const unsigned char *in, | |
| SmokeCodecFlags flags, | |
| unsigned char *out, | |
| unsigned int *outsize); | |
| /* decoding */ | |
| SmokeCodecResult smokecodec_parse_id (SmokeCodecInfo *info, | |
| const unsigned char *in, | |
| const unsigned int insize); | |
| SmokeCodecResult smokecodec_parse_header (SmokeCodecInfo *info, | |
| const unsigned char *in, | |
| const unsigned int insize, | |
| SmokeCodecFlags *flags, | |
| unsigned int *width, | |
| unsigned int *height, | |
| unsigned int *fps_num, | |
| unsigned int *fps_denom); | |
| SmokeCodecResult smokecodec_decode (SmokeCodecInfo *info, | |
| const unsigned char *in, | |
| const unsigned int insize, | |
| unsigned char *out); | |
| #ifdef __cplusplus | |
| } | |
| #endif /* __cplusplus */ | |
| #endif /* __SMOKECODEC_H__ */ |