Quantcast
Channel: Adobe Community : Discussion List - Digital Negative (DNG)
Viewing all articles
Browse latest Browse all 447

Can open produced DNG in Photoshop but not in LibRaw

$
0
0

I have a few questions regarding the Adobe DNG SDK and if i am using it correctly.

So the flow of my program works as follows: i read a custom binary file containing the raw data.

This will be the buffer of my output DNG. I can open the produced DNG in the windows preview correctly and

also in Adobe Photoshop, but if I want to open it in some other programs like LibRaw or RawTherapee, the image

is just completely black.

 

I will post my programm and the log of DNGValidate.exe , perhaps you have an idea what went wrong.

 

Here is a link of my DNG.

 

See my program below

 

#include "DNGWriter.h"

 

namespace Unpacker {

dng_error_code CDNGWriter::writeDNG(byte *pFrame, const std::string &fileName) {

 

try {

m_pDngImage.Reset(m_dngHost.Make_dng_image(m_imageRect, 1, m_depth == 8 ? ttByte : ttShort));

 

m_dngBuffer.fArea = m_imageRect;

m_dngBuffer.fPlane = 0;

m_dngBuffer.fPlanes = 1;

m_dngBuffer.fRowStep = m_dngBuffer.fPlanes * m_imageRect.W();

m_dngBuffer.fColStep = m_dngBuffer.fPlanes;

m_dngBuffer.fPlaneStep = 1;

m_dngBuffer.fPixelType = m_depth == 8 ? ttByte : ttShort;

m_dngBuffer.fPixelSize = TagTypeSize(m_depth == 8 ? ttByte : ttShort);

m_dngBuffer.fData = pFrame;

m_pDngImage->Put(m_dngBuffer);

 

 

// -------------------------------------------------------------

// Write DNG file

// -------------------------------------------------------------

// Assign Raw image data.

m_pDngNegative->SetStage1Image(m_pDngImage);

 

// Compute linearized and range mapped image 

m_pDngNegative->BuildStage2Image(m_dngHost);

 

// Compute demosaiced image (used by preview and thumbnail)

m_pDngNegative->BuildStage3Image(m_dngHost);

 

// Update XMP / EXIF

m_pDngNegative->SynchronizeMetadata();

 

// Update IPTC

m_pDngNegative->RebuildIPTC(true);

 

// Create stream writer for output file

dng_file_stream fstream(fileName.c_str(), true);

 

// Create thumbnail

dng_image_preview thumbnail;

dng_render render(m_dngHost, *m_pDngNegative);

render.SetFinalSpace(dng_space_sRGB::Get());

render.SetFinalPixelType(m_depth == 8 ? ttByte : ttSShort);

render.SetMaximumSize(1 << m_depth);

thumbnail.fImage.Reset(render.Render());

 

AutoPtr<dng_image_writer> oWriter(new dng_image_writer());

oWriter->WriteDNG(m_dngHost, fstream, *m_pDngNegative.Get(), NULL, dngVersion_1_3_0_0, ccUncompressed);

} catch (const dng_exception &ex) {

     return ex.ErrorCode();

} catch (...) {

     return dng_error_none;

}

     return dng_error_none;

}

 

////////////////////////////////////////////////////////////////////////////////////////// /////////////

dng_error_code CDNGWriter::setup(int rows, int cols, int depth) {

try {

m_depth = depth;

 

 

m_imageRect = dng_rect(cols, rows);

// Set DNG version

// Remarks: Tag [DNGVersion] / [50706]

// dngVersion default is the most recent one with 1.4.0.0

m_dngHost.SetSaveDNGVersion(dngVersion_SaveDefault);

 

// Set DNG type to RAW DNG

// Remarks: Store Bayer CFA data and not already processed data

m_dngHost.SetSaveLinearDNG(false);

 

// ----------------------------------------------------------------------------------------- ----------------------

// DNG Negative Settings

// ----------------------------------------------------------------------------------------- ----------------------

m_pDngNegative.Reset(m_dngHost.Make_dng_negative());

 

// Set camera model 

// Remarks: Tag [UniqueCameraModel] / [50708]

m_pDngNegative->SetModelName("MyModel");

 

// Set localized camera model 

// Remarks: Tag [UniqueCameraModel] / [50709]

m_pDngNegative->SetLocalName("Grass hopper");

 

// Set colorkey information

// Remarks: Tag

m_pDngNegative->SetColorKeys(colorKeyRed, colorKeyGreen, colorKeyBlue);

 

// Set bayer pattern information

// Remarks: Tag [CFAPlaneColor] / [50710] and [CFALayout] / [50711]

// bayer pattern depends on the colorkey set by

// dngNegative->SetColorKeys(colorKeyRed, colorKeyGreen, colorKeyBlue);

// In this case: 3 means GBGR bayer pattern

m_pDngNegative->SetBayerMosaic(3);

 

// Set colorchannel information

m_pDngNegative->SetColorChannels(3);

 

// Set linearization table

// Remarks: Tag [LinearizationTable] / [50712]

// Calculate bit limit

const uint8 m_unBitLimit = 0x01 << m_depth;

AutoPtr<dng_memory_block> oCurve(m_dngHost.Allocate(sizeof(uint8)*m_unBitLimit));

for (int32 i = 0; i < m_unBitLimit; i++) {

uint8 *pulItem = oCurve->Buffer_uint8() + i;

*pulItem = (uint8)(i);

}

m_pDngNegative->SetLinearization(oCurve);

 

// Set scale to square pixel

// Remarks: Tag [DefaultScale] / [50718]

m_pDngNegative->SetDefaultScale(dng_urational(1, 1), dng_urational(1, 1));

 

// Set pixel area

// Remarks: Tag [DefaultCropOrigin] / [50719]

m_pDngNegative->SetDefaultCropOrigin(0, 0);

 

// Set pixel area

// Remarks: Tag [DefaultCropSize] / [50720]

m_pDngNegative->SetDefaultCropSize(m_imageRect.W(), m_imageRect.H());

 

// Set active area

m_pDngNegative->SetActiveArea(m_imageRect);

m_pDngNegative->SetOriginalRawFileName("testdummi.bin");

 

m_pDngNegative->SetColorKeys(colorKeyRed, colorKeyGreen, colorKeyBlue);

// Set white LEVEL, value where the image is supposed to be white

m_pDngNegative->SetWhiteLevel((0x01 << m_depth) - 1); // 2^bpp -1

 

// Set black LEVEL, value where the image is supposed to be black

//m_pDngNegative->SetBlackLevel(1);

 

// Set baseline exposure

// Remarks: Tag [BaselineExposure] / [50730]

m_pDngNegative->SetBaselineExposure(0.0);

// Set if noise reduction is already applied on RAW data

// Remarks: Tag [NoiseReductionApplied] / [50935]

m_pDngNegative->SetNoiseReductionApplied(dng_urational(0, 1));

 

m_pDngNegative->SetAsShotProfileName("");

 

m_pDngNegative->SetBaselineNoise(1.0);

m_pDngNegative->SetBaselineSharpness(1.0);

m_pDngNegative->SetBaseOrientation(dng_orientation::Normal());

m_pDngNegative->SetLinearResponseLimit(1.0);

 

// Set camera neutral coordinates

// Remarks: Tag [AsShotNeutral] / [50728]

dng_vector pNeutral;

pNeutral.SetIdentity(3);

m_pDngNegative->SetCameraNeutral(pNeutral);

// ----------------------------------------------------------------------------------------- ----------------------

// DNG EXIF Settings

// ----------------------------------------------------------------------------------------- ----------------------

m_pDngExif = m_pDngNegative->GetExif();

 

// Set Camera Make

// Remarks: Tag [Make] / [EXIF]

m_pDngExif->fMake.Set_ASCII("PointGrey");

 

// Set Camera Model

// Remarks: Tag [Model] / [EXIF]

m_pDngExif->fModel.Set_ASCII("Grasshopper GS3-U3-41C6C-C");

 

// Set exposure time - Shutterspeed

// Remarks: Tag [ExposureTime] / [EXIF]

m_pDngExif->SetExposureTime(10.0 / 1000.0); // random exposure time

 

// Set ISO speed

// Remarks: Tag [ISOSpeed] / [EXIF]

m_pDngExif->fISOSpeedRatings[0] = 400; // ISO should be 400

m_pDngExif->fISOSpeedRatings[1] = 0;

m_pDngExif->fISOSpeedRatings[2] = 0;

 

// Set focal length

// Remarks: Tag [FocalLength] / [EXIF]

m_pDngExif->fFocalLength.Set_real64(7.0, 1000);

 

// Set lens info

// Remarks: Tag [LensInfo] / [EXIF]

m_pDngExif->fLensInfo[0].Set_real64(10.0, 10);

m_pDngExif->fLensInfo[1].Set_real64(10.0, 10);

m_pDngExif->fLensInfo[2].Set_real64(4.0, 10);

m_pDngExif->fLensInfo[3].Set_real64(4.0, 10);

 

m_pDngExif->fBrightnessValue = dng_srational(0, 0);

 

// Set WB mode

// Remarks: Tag [WhiteBalance] / [EXIF]

m_pDngExif->fWhiteBalance = 0;

 

 

// Set metering mode

// Remarks: Tag [MeteringMode] / [EXIF]

m_pDngExif->fMeteringMode = 2;

 

 

// Set metering mode

// Remarks: Tag [ExposureBiasValue] / [EXIF]

m_pDngExif->fExposureBiasValue = dng_srational(0, 0);

 

 

// Set aperture value

// Remarks: Tag [ApertureValue] / [EXIF]

m_pDngExif->SetFNumber(2.4); // sunex lens apeture

 

// Set Date time

// poExif->fDateTime();

 

// Set GPS value [Future]

 

// -------------------------------------------------------------

// DNG Profile Settings: Simple color calibration

// -------------------------------------------------------------

AutoPtr<dng_camera_profile> profile(new dng_camera_profile);

profile->SetName("MyCompany");

profile->SetCalibrationIlluminant1(lsD50);

 

// Excerpt from the DNG specification :

// ColorMatrix1 defines a transformation matrix that converts XYZ values to reference camera native color space values,

// under the first calibration illuminant.The matrix values are stored in row scan order.

dng_matrix_3by3 xyzToCam = dng_matrix_3by3(

3.13386, -1.61687, -0.49061,

-0.97877, 1.91614, 0.03345,

0.07195, -0.22899, 1.40524

);

 

profile->SetColorMatrix1(xyzToCam);

profile->SetCopyright("MyCompany");

profile->SetWasReadFromDNG(false);

m_pDngNegative->AddProfile(profile);

} catch (const dng_exception &except) {

     return except.ErrorCode();

} catch (...) {

     return dng_error_unknown;

}

return dng_error_none;

}

}

 

And this is the log of DNGValidate

 

Validating "000000.dng"...

 

 

Uses little-endian byte order

Magic number = 42

 

 

IFD 0: Offset = 8, Entries = 55

 

 

NewSubFileType: Main Image

ImageWidth: 2048

ImageLength: 2048

BitsPerSample: 8 8 8

Compression: Uncompressed

PhotometricInterpretation: CFA

Make: "PointGrey"

Model: "Grasshopper GS3-U3-41C6C-C"

StripOffsets: Offset = 6004

Orientation: 1 - 0th row is top, 0th column is left

SamplesPerPixel: 3

RowsPerStrip: 2048

StripByteCounts: Count = 12582912

PlanarConfiguration: 1

DateTime: 2018:03:01 17:53:32

XMP: Count = 4618, Offset = 738

XMP: <?xpacket begin="\357\273\277" id="W5M0MpCehiHzreSzNTczkc9d"?>

XMP: <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.6.0">

XMP:  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">

XMP:   <rdf:Description rdf:about=""

XMP:     xmlns:aux="http://ns.adobe.com/exif/1.0/aux/"

XMP:     xmlns:xmp="http://ns.adobe.com/xap/1.0/"

XMP:    aux:LensInfo="100/10 100/10 40/10 40/10"

XMP:    aux:Lens="10.0 mm f/4.0"

XMP:    xmp:ModifyDate="2018-03-01T17:53:32+01:00"

XMP:    xmp:MetadataDate="2018-03-01T17:53:32+01:00"/>

XMP:  </rdf:RDF>

XMP: </x:xmpmeta>

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP:

XMP: <?xpacket end="w"?>

CFARepeatPatternDim: Rows = 2, Cols = 2

CFAPattern:

    Green    Blue

    Red      Green

ExifIFD: 5780

DNGVersion: 1.4.0.0

DNGBackwardVersion: 1.1.0.0

UniqueCameraModel: "Reality 7"

LocalizedCameraModel: "Grass hopper"

CFAPlaneColor: Red Green Blue

CFALayout: Rectangular (or square) layout

LinearizationTable:

BlackLevelRepeatDim: Rows = 1, Cols = 1

BlackLevel: 1.00 1.00 1.00

WhiteLevel: 255 255 255

DefaultScale: H = 1.0000 V = 1.0000

DefaultCropOrigin: H = 0.00 V = 0.00

DefaultCropSize: H = 2048.00 V = 2048.00

ColorMatrix1:

      3.1339  -1.6169  -0.4906

     -0.9788   1.9161   0.0335

      0.0720  -0.2290   1.4052

AnalogBalance: 1.0000 1.0000 1.0000

AsShotNeutral: 1.0000 1.0000 1.0000

BaselineExposure: +0.00

BaselineNoise: 1.00

BaselineSharpness: 1.00

BayerGreenSplit: 0

LinearResponseLimit: 1.00

LensInfo: 10.0 mm f/4.0

AntiAliasStrength: 1.00

ShadowScale: 1.0000

CalibrationIlluminant1: D50

BestQualityScale: 1.0000

RawDataUniqueID: <000000000000000050068b0e9fed9be2>

OriginalRawFileName: "testdummi.bin"

ActiveArea: T = 0 L = 0 B = 2048 R = 2048

NoiseReductionApplied: 0/1

ProfileName: "Reality7"

ProfileEmbedPolicy: Allow copying

ProfileCopyright: "Reality7"

RawImageDigest: <da1dde5cd511616e7cec7ba6d70138b5>

OriginalDefaultFinalSize: H = 0 V = 0

OriginalDefaultCropSize: H = 0.00 V = 0.00

NextIFD = 0

 

 

Exif IFD: Offset = 5780, Entries = 11

 

 

ExposureTime: 1/100.0 sec

FNumber: f/2.40

ISOSpeedRatings: 400

ExifVersion: 2.30

ShutterSpeedValue: 1/100.0 sec

ApertureValue: f/2.40

MeteringMode: CenterWeightedAverage

FocalLength: 7.0 mm

WhiteBalance: Auto white balance

LensSpecificationExif: 10.0 mm f/4.0

LensModelExif: "10.0 mm f/4.0"

NextIFD = 0

 

 

*** Warning: Too little padding on left edge of CFA image (possible interpolation artifacts) ***

*** Warning: Too little padding on top edge of CFA image (possible interpolation artifacts) ***

*** Warning: Too little padding on right edge of CFA image (possible interpolation artifacts) ***

*** Warning: Too little padding on bottom edge of CFA image (possible interpolation artifacts) ***

Raw image read time: 0.013 sec

FindRawImageDigest time: 0.066 sec

Linearization time: 0.032 sec

Interpolate time: 0.067 sec

Validation complete

 

Thank you in advance!


Viewing all articles
Browse latest Browse all 447

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>