优化HDRplus实现

TempBranch
Matthew 8 months ago
parent 9f4bf01718
commit 275961e581

@ -54,6 +54,14 @@ public:
}
~ByteArraysPointer()
{
#ifdef _DEBUG
ALOGD("ByteArray Size=%u", (uint32_t)byteArrays.size());
for (auto it = byteArrays.cbegin(); it != byteArrays.cend(); ++it)
{
ALOGD("ByteArray Free: Size=%u", (uint32_t)((*it).size()));
}
#endif
byteArrays.clear();
}
std::vector<std::vector<uint8_t> > byteArrays;
@ -2984,7 +2992,7 @@ bool CPhoneDevice::ProcessRawCapture(bool result, int numberOfCaptures, const st
#ifdef _DEBUG
// cv::cvtColor(outputImg, outputImg, cv::COLOR_RGB2BGR);
cv::imwrite("/sdcard/com.xypower.mpapp/tmp/final.jpg", mat);
// cv::imwrite("/sdcard/com.xypower.mpapp/tmp/final.jpg", mat);
#endif
OnCaptureReady(true, result != JNI_FALSE, mat, (unsigned long)photoId);

@ -28,6 +28,16 @@
#include <LogThread.h>
#include "DngCreator.h"
#ifdef _DEBUG
void Auto_AImage_delete(AImage* image)
{
AImage_delete(image);
}
#else
#define Auto_AImage_delete AImage_delete
#endif
static void onAvailabilityCallback(void* context, const char* cameraId)
{
((NdkCamera*)context)->onAvailabilityCallback(cameraId);
@ -225,6 +235,8 @@ int NdkCamera::selfTest(const std::string& cameraId, int32_t& maxResolutionX, in
}
}
ACameraMetadata_free(camera_metadata);
return 0;
}
@ -1335,7 +1347,7 @@ void NdkCamera::onImageAvailable(AImageReader* reader)
m_photoTaken = true;
m_locker.lock();
mCaptureFrames.push_back(std::shared_ptr<AImage>(image, AImage_delete));
mCaptureFrames.push_back(std::shared_ptr<AImage>(image, Auto_AImage_delete));
m_locker.unlock();
ALOGD("Capture Image Received");
@ -1792,6 +1804,10 @@ void NdkCamera::FireBurstCapture()
captureFrames.clear();
onBurstCapture(mCharacteristics, captureResults, ldr, frames);
#ifdef _DEBUG
ALOGD("Frames Size: %u", (uint32_t)frames.size());
#endif
}
void NdkCamera::CopyPreviewRequest(ACaptureRequest* request, const ACameraMetadata* previewResult)

@ -33,10 +33,14 @@ class finish
bayer_image* refBayer;
std::string mergedImgPath;
finish() = default;
finish()
{
refBayer = NULL;
}
// please use this initialization after merging part finish
finish(std::string burstPath, cv::Mat mergedBayer,int refIdx){
finish(std::string burstPath, cv::Mat mergedBayer,int refIdx) {
refBayer = NULL;
this->refIdx = refIdx;
this->burstPath = burstPath;
this->mergedBayer = mergedBayer;
@ -60,7 +64,14 @@ class finish
~finish() = default;
~finish()
{
if (refBayer != NULL)
{
delete refBayer;
refBayer = NULL;
}
}
// finish pipeline func
// void process(std::string burstPath, cv::Mat mergedBayer,int refIdx);

@ -987,6 +987,8 @@ void align::process( const hdrplus::burst& burst_images, \
} // for alternative image
per_grayimg_pyramid.clear();
}
} // namespace hdrplus

@ -523,6 +523,7 @@ namespace hdrplus
// }
cv::Mat processMergedMat(cv::Mat mergedImg, int opencv_type){
cv::Mat m;
#if 0
uint16_t* ptr = (uint16_t*)mergedImg.data;
for(int r = 0; r < mergedImg.rows; r++) {
std::vector<int> dvals;
@ -533,13 +534,14 @@ namespace hdrplus
cv::transpose(mline, mline);
m.push_back(mline);
}
#endif
int ch = CV_MAT_CN(opencv_type);
m = mergedImg.clone();
m = m.reshape(ch);
m.convertTo(m, opencv_type);
return m;
}
void show20_20(cv::Mat m){
@ -565,17 +567,17 @@ namespace hdrplus
std::cout<<"finish pipeline start ..."<<std::endl;
// save merged Image value
// #ifndef HDRPLUS_NO_DETAILED_OUTPUT
#ifndef HDRPLUS_NO_DETAILED_OUTPUT
writeCSV(DBG_OUTPUT_ROOT "merged.csv",burst_images.merged_bayer_image);
// #endif
#endif
this->refIdx = burst_images.reference_image_idx;
// this->burstPath = burstPath;
// std::cout<<"processMerged:"<<std::endl;
// show20_20(mergedB);
this->mergedBayer = loadFromCSV(DBG_OUTPUT_ROOT "merged.csv", CV_16UC1);
#ifndef HDRPLUS_NO_DETAILED_OUTPUT
this->mergedBayer = loadFromCSV(DBG_OUTPUT_ROOT "merged.csv", CV_16UC1);
// this->mergedBayer = processMergedMat(mergedB,CV_16UC1);//loadFromCSV("merged.csv", CV_16UC1);
// std::cout<<"processMerged:"<<std::endl;
// show20_20(this->mergedBayer);
@ -583,7 +585,7 @@ namespace hdrplus
// this->mergedBayer = processMergedMat(burst_images.merged_bayer_image, CV_16UC1);
#else
// this->mergedBayer = loadFromCSV(DBG_OUTPUT_ROOT "merged.csv", CV_16UC1);
// this->mergedBayer = processMergedMat(burst_images.merged_bayer_image, CV_16UC1);
this->mergedBayer = processMergedMat(burst_images.merged_bayer_image, CV_16UC1);
// std::cout<<"processMerged:"<<std::endl;
#endif
// std::cout<<"csv:"<<std::endl;

@ -20,7 +20,9 @@ namespace hdrplus
// Get padded bayer image
cv::Mat reference_image = burst_images.bayer_images_pad[burst_images.reference_image_idx];
cv::imwrite("ref.jpg", reference_image);
#ifndef NDEBUG
// cv::imwrite("ref.jpg", reference_image);
#endif
// Get raw channels
std::vector<cv::Mat> channels(4);
@ -98,7 +100,7 @@ namespace hdrplus
cv::Range horizontal = cv::Range(padding[2], reference_image.cols - padding[3]);
cv::Range vertical = cv::Range(padding[0], reference_image.rows - padding[1]);
burst_images.merged_bayer_image = merged(vertical, horizontal);
cv::imwrite("merged.jpg", burst_images.merged_bayer_image);
// cv::imwrite("merged.jpg", burst_images.merged_bayer_image);
}
std::vector<cv::Mat> merge::getReferenceTiles(cv::Mat reference_image) {

Loading…
Cancel
Save