Skip to content

Updates to see if this actually works? #107

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 18 additions & 28 deletions FileOnQ.Imaging.Heif.sln
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30114.105
# Visual Studio Version 17
VisualStudioVersion = 17.13.35828.75 d17.13
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FileOnQ.Imaging.Heif", "src\FileOnQ.Imaging.Heif\FileOnQ.Imaging.Heif.csproj", "{9AD1EDEC-092B-4086-B71F-1FA5C58BC59C}"
EndProject
Expand All @@ -24,8 +24,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".Build", ".Build", "{4457DF
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{3EF903A9-C6EE-4846-919B-0A31F52DFAEC}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FileOnQ.Imaging.Heif.Encoders", "src\FileOnQ.Imaging.Heif.Encoders\FileOnQ.Imaging.Heif.Encoders.vcxproj", "{09C5AF2A-3783-4195-BE48-334ADC7BF3BD}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ConsoleApp", "ConsoleApp", "{FB7CB06D-2D84-4A04-BE62-EF54E2DC44A9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleApp.net5.AnyCPU", "samples\ConsoleApp\ConsoleApp.net5.AnyCPU\ConsoleApp.net5.AnyCPU.csproj", "{3D96E2F6-D66F-47A5-9A8B-421F2B3DA310}"
Expand Down Expand Up @@ -83,22 +81,6 @@ EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FileOnQ.Imaging.Heif.Benchmarks", "benchmarks\tools\FileOnQ.Imaging.Heif.Benchmarks.csproj", "{5E8DF849-30D0-460A-81CB-C343D4D5536B}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
samples\ConsoleApp\ConsoleApp.Shared\ConsoleApp.Shared.projitems*{1e597879-fed0-47bd-8710-78330d370699}*SharedItemsImports = 5
tests\FileOnQ.Imaging.Heif.Tests\FileOnQ.Imaging.Heif.Tests.projitems*{255253a7-7608-4870-93d0-78008bcfcc28}*SharedItemsImports = 5
tests\FileOnQ.Imaging.Heif.Tests\FileOnQ.Imaging.Heif.Tests.projitems*{2dd69f56-35ec-4d14-a1bf-b93b19750f69}*SharedItemsImports = 5
samples\ConsoleApp\ConsoleApp.Shared\ConsoleApp.Shared.projitems*{3423f1f2-984a-4946-ae90-8553413bbbdd}*SharedItemsImports = 5
samples\ConsoleApp\ConsoleApp.Shared\ConsoleApp.Shared.projitems*{3d96e2f6-d66f-47a5-9a8b-421f2b3da310}*SharedItemsImports = 5
tests\FileOnQ.Imaging.Heif.Tests\FileOnQ.Imaging.Heif.Tests.projitems*{52ebf464-611c-4f0d-8263-77a2c7001b13}*SharedItemsImports = 5
samples\ConsoleApp\ConsoleApp.Shared\ConsoleApp.Shared.projitems*{54cc71e7-1ee6-4214-b435-21e41b1c0053}*SharedItemsImports = 5
samples\ConsoleApp\ConsoleApp.Shared\ConsoleApp.Shared.projitems*{595e88f2-b685-46bb-a9c7-538c1d8f7708}*SharedItemsImports = 5
samples\ConsoleApp\ConsoleApp.Shared\ConsoleApp.Shared.projitems*{7e516116-cbf9-4d83-b4b2-e1c0ac1b7074}*SharedItemsImports = 5
samples\ConsoleApp\ConsoleApp.Shared\ConsoleApp.Shared.projitems*{836d4878-b6f6-4c62-9f5b-807785b29e34}*SharedItemsImports = 5
tests\FileOnQ.Imaging.Heif.Tests\FileOnQ.Imaging.Heif.Tests.projitems*{c5c19cd4-383d-4a2c-b55e-d3b8ff611a2d}*SharedItemsImports = 13
samples\ConsoleApp\ConsoleApp.Shared\ConsoleApp.Shared.projitems*{db6160f1-37a7-4096-8e02-9748d6225efe}*SharedItemsImports = 5
samples\ConsoleApp\ConsoleApp.Shared\ConsoleApp.Shared.projitems*{f10ea7da-142c-42db-a8cb-817f81a4a9e1}*SharedItemsImports = 13
samples\ConsoleApp\ConsoleApp.Shared\ConsoleApp.Shared.projitems*{fc3e32ea-710c-4440-bddb-85f5cf1e0d95}*SharedItemsImports = 5
EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Expand All @@ -120,14 +102,6 @@ Global
{9AD1EDEC-092B-4086-B71F-1FA5C58BC59C}.Release|x64.Build.0 = Release|Any CPU
{9AD1EDEC-092B-4086-B71F-1FA5C58BC59C}.Release|x86.ActiveCfg = Release|Any CPU
{9AD1EDEC-092B-4086-B71F-1FA5C58BC59C}.Release|x86.Build.0 = Release|Any CPU
{09C5AF2A-3783-4195-BE48-334ADC7BF3BD}.Debug|Any CPU.ActiveCfg = Debug|Win32
{09C5AF2A-3783-4195-BE48-334ADC7BF3BD}.Debug|x64.ActiveCfg = Debug|x64
{09C5AF2A-3783-4195-BE48-334ADC7BF3BD}.Debug|x86.ActiveCfg = Debug|Win32
{09C5AF2A-3783-4195-BE48-334ADC7BF3BD}.Release|Any CPU.ActiveCfg = Release|Win32
{09C5AF2A-3783-4195-BE48-334ADC7BF3BD}.Release|x64.ActiveCfg = Release|x64
{09C5AF2A-3783-4195-BE48-334ADC7BF3BD}.Release|x64.Build.0 = Release|x64
{09C5AF2A-3783-4195-BE48-334ADC7BF3BD}.Release|x86.ActiveCfg = Release|Win32
{09C5AF2A-3783-4195-BE48-334ADC7BF3BD}.Release|x86.Build.0 = Release|Win32
{3D96E2F6-D66F-47A5-9A8B-421F2B3DA310}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3D96E2F6-D66F-47A5-9A8B-421F2B3DA310}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3D96E2F6-D66F-47A5-9A8B-421F2B3DA310}.Debug|x64.ActiveCfg = Debug|Any CPU
Expand Down Expand Up @@ -337,4 +311,20 @@ Global
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {AF811503-BFBF-48C0-AFBA-872CBA57D6F2}
EndGlobalSection
GlobalSection(SharedMSBuildProjectFiles) = preSolution
samples\ConsoleApp\ConsoleApp.Shared\ConsoleApp.Shared.projitems*{1e597879-fed0-47bd-8710-78330d370699}*SharedItemsImports = 5
tests\FileOnQ.Imaging.Heif.Tests\FileOnQ.Imaging.Heif.Tests.projitems*{255253a7-7608-4870-93d0-78008bcfcc28}*SharedItemsImports = 5
tests\FileOnQ.Imaging.Heif.Tests\FileOnQ.Imaging.Heif.Tests.projitems*{2dd69f56-35ec-4d14-a1bf-b93b19750f69}*SharedItemsImports = 5
samples\ConsoleApp\ConsoleApp.Shared\ConsoleApp.Shared.projitems*{3423f1f2-984a-4946-ae90-8553413bbbdd}*SharedItemsImports = 5
samples\ConsoleApp\ConsoleApp.Shared\ConsoleApp.Shared.projitems*{3d96e2f6-d66f-47a5-9a8b-421f2b3da310}*SharedItemsImports = 5
tests\FileOnQ.Imaging.Heif.Tests\FileOnQ.Imaging.Heif.Tests.projitems*{52ebf464-611c-4f0d-8263-77a2c7001b13}*SharedItemsImports = 5
samples\ConsoleApp\ConsoleApp.Shared\ConsoleApp.Shared.projitems*{54cc71e7-1ee6-4214-b435-21e41b1c0053}*SharedItemsImports = 5
samples\ConsoleApp\ConsoleApp.Shared\ConsoleApp.Shared.projitems*{595e88f2-b685-46bb-a9c7-538c1d8f7708}*SharedItemsImports = 5
samples\ConsoleApp\ConsoleApp.Shared\ConsoleApp.Shared.projitems*{7e516116-cbf9-4d83-b4b2-e1c0ac1b7074}*SharedItemsImports = 5
samples\ConsoleApp\ConsoleApp.Shared\ConsoleApp.Shared.projitems*{836d4878-b6f6-4c62-9f5b-807785b29e34}*SharedItemsImports = 5
tests\FileOnQ.Imaging.Heif.Tests\FileOnQ.Imaging.Heif.Tests.projitems*{c5c19cd4-383d-4a2c-b55e-d3b8ff611a2d}*SharedItemsImports = 13
samples\ConsoleApp\ConsoleApp.Shared\ConsoleApp.Shared.projitems*{db6160f1-37a7-4096-8e02-9748d6225efe}*SharedItemsImports = 5
samples\ConsoleApp\ConsoleApp.Shared\ConsoleApp.Shared.projitems*{f10ea7da-142c-42db-a8cb-817f81a4a9e1}*SharedItemsImports = 13
samples\ConsoleApp\ConsoleApp.Shared\ConsoleApp.Shared.projitems*{fc3e32ea-710c-4440-bddb-85f5cf1e0d95}*SharedItemsImports = 5
EndGlobalSection
EndGlobal
75 changes: 33 additions & 42 deletions src/FileOnQ.Imaging.Heif.Encoders/encoder.cpp
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
/*
libheif example application "convert".
This file is part of convert, an example application using libheif.
libheif example application.

MIT License

Copyright (c) 2018 struktur AG, Joachim Bauch <[email protected]>
Copyright (c) 2017 struktur AG, Joachim Bauch <[email protected]>
Copyright (c) 2023 Dirk Farin <[email protected]>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand All @@ -24,49 +24,40 @@
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#if defined(HAVE_CONFIG_H)
#include "config.h"
#endif
#ifndef EXAMPLE_ENCODER_H
#define EXAMPLE_ENCODER_H

#include <stdlib.h>
#include <string>
#include <memory>

#include "encoder.h"
#include "libheif/api/libheif/heif.h"
#include <vector>

static const char kMetadataTypeExif[] = "Exif";

// static
bool Encoder::HasExifMetaData(const struct heif_image_handle* handle)
class Encoder
{
public:
virtual ~Encoder() = default;

heif_item_id metadata_id;
int count = heif_image_handle_get_list_of_metadata_block_IDs(handle, kMetadataTypeExif,
&metadata_id, 1);
return count > 0;
}
virtual heif_colorspace colorspace(bool has_alpha) const = 0;

// static
uint8_t* Encoder::GetExifMetaData(const struct heif_image_handle* handle, size_t* size)
{
heif_item_id metadata_id;
int count = heif_image_handle_get_list_of_metadata_block_IDs(handle, kMetadataTypeExif,
&metadata_id, 1);

for (int i = 0; i < count; i++) {
size_t datasize = heif_image_handle_get_metadata_size(handle, metadata_id);
uint8_t* data = static_cast<uint8_t*>(malloc(datasize));
if (!data) {
continue;
}

heif_error error = heif_image_handle_get_metadata(handle, metadata_id, data);
if (error.code != heif_error_Ok) {
free(data);
continue;
}

*size = datasize;
return data;
}

return nullptr;
}
virtual heif_chroma chroma(bool has_alpha, int bit_depth) const = 0;

virtual void UpdateDecodingOptions(const struct heif_image_handle* handle,
struct heif_decoding_options* options) const
{
// Override if necessary.
}

virtual bool Encode(const struct heif_image_handle* handle,
const struct heif_image* image, const std::string& filename) = 0;

protected:
static bool HasExifMetaData(const struct heif_image_handle* handle);

static uint8_t* GetExifMetaData(const struct heif_image_handle* handle, size_t* size);

static std::vector<uint8_t> get_xmp_metadata(const struct heif_image_handle* handle);
};

#endif // EXAMPLE_ENCODER_H
36 changes: 19 additions & 17 deletions src/FileOnQ.Imaging.Heif.Encoders/encoder.h
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
/*
libheif example application "convert".
libheif example application.

MIT License

Copyright (c) 2017 struktur AG, Joachim Bauch <[email protected]>
Copyright (c) 2023 Dirk Farin <[email protected]>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand All @@ -29,33 +30,34 @@
#include <string>
#include <memory>

#include <libheif/heif.h>
#include "libheif/api/libheif/heif.h"
#include <vector>


class Encoder
{
public:
virtual ~Encoder()
{}
virtual ~Encoder() = default;

virtual heif_colorspace colorspace(bool has_alpha) const = 0;
virtual heif_colorspace colorspace(bool has_alpha) const = 0;

virtual heif_chroma chroma(bool has_alpha, int bit_depth) const = 0;
virtual heif_chroma chroma(bool has_alpha, int bit_depth) const = 0;

virtual void UpdateDecodingOptions(const struct heif_image_handle* handle,
struct heif_decoding_options* options) const
{
// Override if necessary.
}
virtual void UpdateDecodingOptions(const struct heif_image_handle* handle,
struct heif_decoding_options* options) const
{
// Override if necessary.
}

virtual bool Encode(const struct heif_image_handle* handle,
const struct heif_image* image, unsigned char** buffer,
unsigned long* buffer_size) = 0;
virtual bool Encode(const struct heif_image_handle* handle,
const struct heif_image* image, const std::string& filename) = 0;

protected:
static bool HasExifMetaData(const struct heif_image_handle* handle);
static bool HasExifMetaData(const struct heif_image_handle* handle);

static uint8_t* GetExifMetaData(const struct heif_image_handle* handle, size_t* size);
static uint8_t* GetExifMetaData(const struct heif_image_handle* handle, size_t* size);

static std::vector<uint8_t> get_xmp_metadata(const struct heif_image_handle* handle);
};

#endif // EXAMPLE_ENCODER_H
#endif // EXAMPLE_ENCODER_H
Loading
Loading