From 59ea9c271dbc3310379ab6f190a7b52147b32cea Mon Sep 17 00:00:00 2001 From: Alex Sobhani Date: Mon, 1 Apr 2024 01:52:14 -0400 Subject: [PATCH] make function calls to H264 compress functions take context pointer --- ADApp/pluginSrc/NDPluginCodec.cpp | 15 +++++++++------ ADApp/pluginSrc/NDPluginCodec.h | 1 + 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/ADApp/pluginSrc/NDPluginCodec.cpp b/ADApp/pluginSrc/NDPluginCodec.cpp index 68fe6c688..dda687a52 100644 --- a/ADApp/pluginSrc/NDPluginCodec.cpp +++ b/ADApp/pluginSrc/NDPluginCodec.cpp @@ -637,7 +637,7 @@ NDArray *decompressBSLZ4(NDArray *input, NDCodecStatus_t *status, char *errorMes #ifdef HAVE_VC #include //extern int H264_compress_default(const char*, char*, int, int, int); -NDArray *compressH264(NDArray *input, NDCodecStatus_t *status, char *errorMessage) +NDArray *compressH264(void** vc_context, NDArray *input, NDCodecStatus_t *status, char *errorMessage) { //printf("inside compressH264\n"); if (!input->codec.empty()) { @@ -679,7 +679,8 @@ NDArray *compressH264(NDArray *input, NDCodecStatus_t *status, char *errorMessag //printf("x_size %d y_size %d\n", x_size, y_size); //printf("before H264 compress default\n"); //int compSize = H264_compress_default((const char*)input->pData, (char*)output->pData, (int)x_size, (int)y_size, outputSize); - int compSize = H264_compress((const char*)input->pData, (char*)output->pData, (int)x_size, (int)y_size); + //int compSize = H264_compress((const char*)input->pData, (char*)output->pData, (int)x_size, (int)y_size); + int compSize = H264_compress(vc_context, (const char*)input->pData, (char*)output->pData, (int)x_size, (int)y_size); if (compSize <= 0) { output->release(); @@ -697,7 +698,7 @@ NDArray *compressH264(NDArray *input, NDCodecStatus_t *status, char *errorMessag #else -NDArray *compressH264(NDArray *input, NDCodecStatus_t *status, char *errorMessage) +NDArray *compressH264(void** vc_context, NDArray *input, NDCodecStatus_t *status, char *errorMessage) { sprintf(errorMessage, "No H264 support"); *status = NDCODEC_ERROR; @@ -808,7 +809,7 @@ void NDPluginCodec::processCallbacks(NDArray *pArray) case NDCODEC_H264: { unlock(); - result = compressH264(pArray, &codecStatus, errorMessage); + result = compressH264(&vc_context, pArray, &codecStatus, errorMessage); lock(); break; } @@ -905,11 +906,11 @@ asynStatus NDPluginCodec::writeInt32(asynUser *pasynUser, epicsInt32 value) status = NDPluginDriver::writeInt32(pasynUser, value); } else if (function == NDCodecGOPSize) { printf("setting GOP Size...\n"); - set_gop_size(value); + set_gop_size(vc_context, value); } else if (function == NDCodecQMinMax) { //lock(); printf("setting qmin and qmax...\n"); - set_q_min_max(value); + set_q_min_max(vc_context, value); //unlock(); } @@ -1001,6 +1002,8 @@ NDPluginCodec::NDPluginCodec(const char *portName, int queueSize, int blockingCa // This plugin currently ignores this setting and always does callbacks, so make the setting reflect the behavior setIntegerParam(NDArrayCallbacks, 1); + void* vc_context=0; + /* Try to connect to the array port */ connectToArrayPort(); } diff --git a/ADApp/pluginSrc/NDPluginCodec.h b/ADApp/pluginSrc/NDPluginCodec.h index c00484661..b7d9cb702 100644 --- a/ADApp/pluginSrc/NDPluginCodec.h +++ b/ADApp/pluginSrc/NDPluginCodec.h @@ -76,6 +76,7 @@ class NDPLUGIN_API NDPluginCodec : public NDPluginDriver { /* These methods override the virtual methods in the base class */ void processCallbacks(NDArray *pArray); asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value); + void* vc_context; protected: int NDCodecMode;