blob: 825c0363b94ce5bab18a7870d9c3bea278d1e7f8 [file] [log] [blame]
/* Copyright 2025 Advanced Micro Devices, Inc.
* SPDX-License-Identifier: MIT
*
* Authors: AMD
*
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include "ToneMapGenerator.h"
#include "AGMGenerator.h"
#include "tonemap_adaptor.h"
static void VPEFree3DLut(void* memToFree, void* pDevice)
{
free(memToFree);
}
static void* VPEAlloc3DLut(unsigned int allocSize, void* pDevice)
{
return calloc(1, allocSize);
}
void* tm_create(void)
{
struct ToneMapGenerator* p_tmGenerator = (struct ToneMapGenerator*)calloc(1, sizeof(struct ToneMapGenerator));
if (!p_tmGenerator)
return NULL;
p_tmGenerator->tmAlgo = TMG_A_AGM;
p_tmGenerator->memAllocSet = false;
p_tmGenerator->agmGenerator.initalized = false;
return (void*)p_tmGenerator;
}
void tm_destroy(void** pp_tmGenerator)
{
struct ToneMapGenerator* p_tmGenerator;
if (!pp_tmGenerator || ((*pp_tmGenerator) == NULL))
return;
p_tmGenerator = *pp_tmGenerator;
AGMGenerator_Exit(&p_tmGenerator->agmGenerator);
free(p_tmGenerator);
*pp_tmGenerator = NULL;
}
int tm_generate3DLut(struct tonemap_param* pInparam, void* pformattedLutData)
{
enum TMGReturnCode result;
struct ToneMappingParameters tmParams;
tmParams.lutData = (uint16_t *)pformattedLutData;
ToneMapGenerator_SetInternalAllocators(
(struct ToneMapGenerator*)pInparam->tm_handle,
(TMGAlloc)(VPEAlloc3DLut),
(TMGFree)(VPEFree3DLut),
(void*)(NULL));
result = ToneMapGenerator_GenerateToneMappingParameters(
(struct ToneMapGenerator*)pInparam->tm_handle,
&pInparam->streamMetaData,
&pInparam->dstMetaData,
pInparam->inputContainerGamma,
pInparam->outputContainerGamma,
pInparam->outputContainerPrimaries,
pInparam->lutDim,
&tmParams
);
return (int)result;
}