blob: bc5ad0a4494d81bec8ec1658f829e9cb1e32f9f4 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef MEDIA_VIDEO_HALF_FLOAT_MAKER_H_
#define MEDIA_VIDEO_HALF_FLOAT_MAKER_H_
#include <stddef.h>
#include <stdint.h>
#include <memory>
#include "media/base/media_export.h"
namespace media {
class MEDIA_EXPORT HalfFloatMaker {
public:
virtual ~HalfFloatMaker();
// Convert an array of short integers into an array of half-floats.
// |src| is an array of integers in range 0 .. 2^{bits_per_channel} - 1
// |num| is number of entries in input and output array.
// The numbers stored in |dst| will be half floats in range 0.0..1.0
virtual void MakeHalfFloats(const uint16_t* src,
size_t num,
uint16_t* dst) = 0;
// The half-floats made needs by this class will be in the range
// [Offset() .. Offset() + 1.0/Multiplier]. So if you want results
// in the 0-1 range, you need to do:
// (half_float - Offset()) * Multiplier()
// to each returned value.
virtual float Offset() const = 0;
virtual float Multiplier() const = 0;
// Below is a factory method which can be used to create halffloatmaker.
static std::unique_ptr<HalfFloatMaker> NewHalfFloatMaker(
int bits_per_channel);
};
} // namespace media
#endif // MEDIA_VIDEO_HALF_FLOAT_MAKER_H_