fixed ser write segfault

master
Steffen Pohle 1 year ago
parent c01339b7b9
commit eb98013780

@ -194,19 +194,19 @@ void Output::Thread() {
} }
outputser = new SER(); outputser = new SER();
outputser->setWidth(outputserw); if (outputser) outputser->setWidth(outputserw);
outputser->setHeight(outputserh); if (outputser) outputser->setHeight(outputserh);
outputser->setColorID(serformat); if (outputser) outputser->setColorID(serformat);
outputser->setPixelDepth(pixsize); if (outputser) outputser->setPixelDepth(pixsize);
if (outputser->setFile((char *)outputfilename.c_str()) == -1) { if (outputser->setFile((char *)outputfilename.c_str()) == -1) {
errormessage_display((char*)"windows-main", (char*)"Error", (char*)"Could not set output file [%s]. Error: %s", outputfilename.c_str(), strerror(errno)); errormessage_display((char*)"windows-main", (char*)"Error", (char*)"Could not set output file [%s]. Error: %s", outputfilename.c_str(), strerror(errno));
SERStop(); SERStop();
} }
outputser->setObserver((char *)"FIXME:read username from OS"); if (outputser) outputser->setObserver((char *)"FIXME:read username from OS");
outputser->setTelescope((char *)"FIXME:not implemented yet"); if (outputser) outputser->setTelescope((char *)"FIXME:not implemented yet");
outputser->setInstrument((char *)"FIXME:just read device from dirver"); if (outputser) outputser->setInstrument((char *)"FIXME:just read device from dirver");
outputser->setNumberOfFrames(0); if (outputser) outputser->setNumberOfFrames(0);
outputser->writeHeader(); if (outputser) outputser->writeHeader();
} }
else { else {
@ -220,7 +220,7 @@ void Output::Thread() {
} }
} }
if (outputser != NULL) { // we need to check in case outputser got deleted. if (outputser) { // we need to check in case outputser got deleted.
// //
// write frame // write frame
outputser->appendFrame(inFrame.data); outputser->appendFrame(inFrame.data);

@ -40,6 +40,7 @@ VideoDev_Dumpfile::VideoDev_Dumpfile() {
inframe_size = 0; inframe_size = 0;
inframe_maxsize = 0; inframe_maxsize = 0;
inframe_nexttime = 0; inframe_nexttime = 0;
fixedframesize = 0;
}; };
@ -359,14 +360,19 @@ int VideoDev_Dumpfile::ReadFrame() {
*/ */
int VideoDev_Dumpfile::SetDevCtrl(unsigned int id, int value) { int VideoDev_Dumpfile::SetDevCtrl(unsigned int id, int value) {
std::list<VideoDevCtrl>::iterator ctrl; std::list<VideoDevCtrl>::iterator ctrl;
printf ("%s:%d VideoDev_Dumpfile::SetDevCtrl Set Offset to %d id:%d\n", __FILE__, __LINE__, value, id); printf ("%s:%d VideoDev_Dumpfile::SetDevCtrl Set Offset to %d id:%d fixedframesize:%d\n", __FILE__, __LINE__, value, id, fixedframesize);
if (id == 1) { if (id == 1) {
ctrl = vidctrls.begin(); ctrl = vidctrls.begin();
if (value != ctrl->value && value < ctrl->max) { if (value != ctrl->value && value < ctrl->max) {
filepos = SIZE_DUMPHEADER + (value * (SIZE_FRAMEHEADER + fixedframesize));
ctrl->value = value; ctrl->value = value;
lseek (fd, SEEK_SET, SIZE_DUMPHEADER + (value * (SIZE_FRAMEHEADER + fixedframesize))); if (lseek (fd, filepos, SEEK_SET) < 0) {
printf ("%s:%d ******* lseek error:%s\n", __FILE__, __LINE__, strerror(errno));
}
} }
else printf ("%s:%d could not set video position (ctrl->value:%d value:%d max:%d)\n",
__FILE__, __LINE__, ctrl->value, value, ctrl->max);
} }
return VDEV_STATUS_OK; return VDEV_STATUS_OK;
}; };

Loading…
Cancel
Save