优化HDRplus实现

TempBranch
Matthew 8 months ago
parent 9f4bf01718
commit 275961e581

@ -54,6 +54,14 @@ public:
} }
~ByteArraysPointer() ~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(); byteArrays.clear();
} }
std::vector<std::vector<uint8_t> > byteArrays; std::vector<std::vector<uint8_t> > byteArrays;
@ -2984,7 +2992,7 @@ bool CPhoneDevice::ProcessRawCapture(bool result, int numberOfCaptures, const st
#ifdef _DEBUG #ifdef _DEBUG
// cv::cvtColor(outputImg, outputImg, cv::COLOR_RGB2BGR); // 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 #endif
OnCaptureReady(true, result != JNI_FALSE, mat, (unsigned long)photoId); OnCaptureReady(true, result != JNI_FALSE, mat, (unsigned long)photoId);

@ -28,6 +28,16 @@
#include <LogThread.h> #include <LogThread.h>
#include "DngCreator.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) static void onAvailabilityCallback(void* context, const char* cameraId)
{ {
((NdkCamera*)context)->onAvailabilityCallback(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; return 0;
} }
@ -1335,7 +1347,7 @@ void NdkCamera::onImageAvailable(AImageReader* reader)
m_photoTaken = true; m_photoTaken = true;
m_locker.lock(); 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(); m_locker.unlock();
ALOGD("Capture Image Received"); ALOGD("Capture Image Received");
@ -1792,6 +1804,10 @@ void NdkCamera::FireBurstCapture()
captureFrames.clear(); captureFrames.clear();
onBurstCapture(mCharacteristics, captureResults, ldr, frames); onBurstCapture(mCharacteristics, captureResults, ldr, frames);
#ifdef _DEBUG
ALOGD("Frames Size: %u", (uint32_t)frames.size());
#endif
} }
void NdkCamera::CopyPreviewRequest(ACaptureRequest* request, const ACameraMetadata* previewResult) void NdkCamera::CopyPreviewRequest(ACaptureRequest* request, const ACameraMetadata* previewResult)

@ -33,10 +33,14 @@ class finish
bayer_image* refBayer; bayer_image* refBayer;
std::string mergedImgPath; std::string mergedImgPath;
finish() = default; finish()
{
refBayer = NULL;
}
// please use this initialization after merging part finish // 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->refIdx = refIdx;
this->burstPath = burstPath; this->burstPath = burstPath;
this->mergedBayer = mergedBayer; this->mergedBayer = mergedBayer;
@ -60,7 +64,14 @@ class finish
~finish() = default; ~finish()
{
if (refBayer != NULL)
{
delete refBayer;
refBayer = NULL;
}
}
// finish pipeline func // finish pipeline func
// void process(std::string burstPath, cv::Mat mergedBayer,int refIdx); // 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 } // for alternative image
per_grayimg_pyramid.clear();
} }
} // namespace hdrplus } // namespace hdrplus

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

@ -20,7 +20,9 @@ namespace hdrplus
// Get padded bayer image // Get padded bayer image
cv::Mat reference_image = burst_images.bayer_images_pad[burst_images.reference_image_idx]; 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 // Get raw channels
std::vector<cv::Mat> channels(4); 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 horizontal = cv::Range(padding[2], reference_image.cols - padding[3]);
cv::Range vertical = cv::Range(padding[0], reference_image.rows - padding[1]); cv::Range vertical = cv::Range(padding[0], reference_image.rows - padding[1]);
burst_images.merged_bayer_image = merged(vertical, horizontal); 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) { std::vector<cv::Mat> merge::getReferenceTiles(cv::Mat reference_image) {

Loading…
Cancel
Save