⛏️ index : haiku.git

/*
 * Copyright 2010-2017, Haiku. All rights reserved.
 * Distributed under the terms of the MIT License.
 *
 * Authors:
 *		Philippe Houdoin
 */
#ifndef WEBP_TRANSLATOR_H
#define WEBP_TRANSLATOR_H


#include <ByteOrder.h>
#include <DataIO.h>
#include <File.h>
#include <fs_attr.h>
#include <GraphicsDefs.h>
#include <InterfaceDefs.h>
#include <TranslationDefs.h>
#include <Translator.h>
#include <TranslatorFormats.h>

#include "BaseTranslator.h"

#define WEBP_TRANSLATOR_VERSION B_TRANSLATION_MAKE_VERSION(0,6,0)
#define WEBP_IMAGE_FORMAT	'WebP'

#define WEBP_SETTING_QUALITY		"quality"
#define WEBP_SETTING_PRESET			"preset"
#define WEBP_SETTING_SHARPNESS		"sharpness"
#define WEBP_SETTING_METHOD			"method"
#define WEBP_SETTING_PREPROCESSING	"preprocessing"


#define WEBP_IN_QUALITY 0.90
#define WEBP_IN_CAPABILITY 0.90

#define WEBP_OUT_QUALITY 0.90
#define WEBP_OUT_CAPABILITY 0.5

#define BITS_IN_QUALITY 0.8
#define BITS_IN_CAPABILITY 0.6

#define BITS_OUT_QUALITY 0.5
#define BITS_OUT_CAPABILITY 0.4


struct WebPPicture;


class WebPTranslator : public BaseTranslator {
public:
							WebPTranslator();

	virtual status_t 		DerivedIdentify(BPositionIO* stream,
								const translation_format* format,
								BMessage* settings, translator_info* info,
								uint32 outType);

	virtual status_t 		DerivedTranslate(BPositionIO* stream,
								const translator_info* info,
								BMessage* settings, uint32 outType,
								BPositionIO* target, int32 baseType);

	virtual BView*			NewConfigView(TranslatorSettings* settings);

protected:
	virtual 				~WebPTranslator();
		// this is protected because the object is deleted by the
		// Release() function instead of being deleted directly by
		// the user

private:
			status_t		_TranslateFromBits(BPositionIO* stream,
								BMessage* settings, uint32 outType,
								BPositionIO* target);

			status_t		_TranslateFromWebP(BPositionIO* stream,
								BMessage* settings, uint32 outType,
								BPositionIO* target);

	static	int 			_EncodedWriter(const uint8_t* data,
								size_t dataSize,
								const WebPPicture* const picture);
};


#endif // #ifndef WEBP_TRANSLATOR_H