Skip to content

Commit 30acc29

Browse files
committed
Merge pull request #1 from AwesomeLemon/master
JpgEncoder: options
2 parents 29f1470 + 253e330 commit 30acc29

File tree

6 files changed

+45
-2
lines changed

6 files changed

+45
-2
lines changed

ov7670/jpeg_encoder/include/internal/common.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@ typedef struct TargetLocation
4040
int m_targetY;
4141
int m_targetSize;
4242
} TargetLocation;
43+
44+
typedef struct TargetJpgParams
45+
{
46+
uint8_t jpgQuality;
47+
bool ifBlackAndWhite;
48+
} TargetJpgParams;
4349
/*
4450
typedef struct TargetLocation
4551
{

ov7670/jpeg_encoder/include/internal/module_ce.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ int codecEngineStop(CodecEngine* _ce);
5353

5454
int codecEngineTranscodeFrame(CodecEngine* _ce,
5555
const void* _srcFramePtr, size_t _srcFrameSize,
56+
const TargetJpgParams* _targetJpgParams,
5657
/*
5758
void* _dstFramePtr, size_t _dstFrameSize, size_t* _dstFrameUsed,
5859
const TargetDetectParams* _targetDetectParams,

ov7670/jpeg_encoder/include/internal/runtime.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ typedef struct RuntimeState
4646
TargetDetectParams m_targetDetectParams;
4747
TargetDetectCommand m_targetDetectCommand;
4848
bool m_videoOutEnable;
49+
TargetJpgParams m_targetJpgParams;
4950
} RuntimeState;
5051

5152
typedef struct Runtime

ov7670/jpeg_encoder/src/module_ce.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ static int makeValueWrap(int _val, int _adj, int _min, int _max)
198198

199199
static int do_transcodeFrame(CodecEngine* _ce,
200200
const void* _srcFramePtr, size_t _srcFrameSize,
201+
const TargetJpgParams* _targetJpgParams,
201202
/*
202203
void* _dstFramePtr, size_t _dstFrameSize, size_t* _dstFrameUsed,
203204
const TargetDetectParams* _targetDetectParams,
@@ -221,6 +222,8 @@ static int do_transcodeFrame(CodecEngine* _ce,
221222
tcInArgs.base.size = sizeof(tcInArgs);
222223
tcInArgs.base.numBytes = _srcFrameSize;
223224
tcInArgs.base.inputID = 1; // must be non-zero, otherwise caching issues appear
225+
tcInArgs.alg.jpgImageQuality = _targetJpgParams->jpgQuality;
226+
tcInArgs.alg.ifBlackAndWhite = _targetJpgParams->ifBlackAndWhite;
224227
// tcInArgs.alg.autoDetectHsv = _targetDetectCommand->m_cmd;
225228

226229
TRIK_VIDTRANSCODE_CV_OutArgs tcOutArgs;
@@ -439,6 +442,7 @@ int codecEngineStop(CodecEngine* _ce)
439442

440443
int codecEngineTranscodeFrame(CodecEngine* _ce,
441444
const void* _srcFramePtr, size_t _srcFrameSize,
445+
const TargetJpgParams* _targetJpgParams,
442446
/*
443447
void* _dstFramePtr, size_t _dstFrameSize, size_t* _dstFrameUsed,
444448
const TargetDetectParams* _targetDetectParams,
@@ -456,7 +460,7 @@ int codecEngineTranscodeFrame(CodecEngine* _ce,
456460
return ENOTCONN;
457461

458462
res = do_transcodeFrame(_ce,
459-
_srcFramePtr, _srcFrameSize,
463+
_srcFramePtr, _srcFrameSize, _targetJpgParams,
460464
/*_dstFramePtr, _dstFrameSize, _dstFrameUsed,
461465
_targetDetectParams,
462466
_targetDetectCommand,

ov7670/jpeg_encoder/src/runtime.c

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ void runtimeReset(Runtime* _runtime)
4646
pthread_mutex_init(&_runtime->m_state.m_mutex, NULL);
4747
memset(&_runtime->m_state.m_targetDetectParams, 0, sizeof(_runtime->m_state.m_targetDetectParams));
4848
memset(&_runtime->m_state.m_targetDetectCommand, 0, sizeof(_runtime->m_state.m_targetDetectCommand));
49+
memset(&_runtime->m_state.m_targetJpgParams, 0, sizeof(_runtime->m_state.m_targetJpgParams));//maybe not
50+
_runtime->m_state.m_targetJpgParams.jpgQuality = 40;
4951
}
5052

5153

@@ -70,6 +72,8 @@ bool runtimeParseArgs(Runtime* _runtime, int _argc, char* const _argv[])
7072
{ "rc-fifo-in", 1, NULL, 0 }, // 7
7173
{ "rc-fifo-out", 1, NULL, 0 },
7274
{ "video-out", 1, NULL, 0 },
75+
{ "jpeg-qual", 1, NULL, 0 },
76+
{ "white-black", 1, NULL, 0 },
7377
{ "verbose", 0, NULL, 'v' },
7478
{ "help", 0, NULL, 'h' },
7579
{ NULL, 0, NULL, 0 }
@@ -117,7 +121,11 @@ bool runtimeParseArgs(Runtime* _runtime, int _argc, char* const _argv[])
117121
case 7 : cfg->m_rcConfig.m_fifoInput = optarg; break;
118122
case 7+1: cfg->m_rcConfig.m_fifoOutput = optarg; break;
119123
case 7+2: cfg->m_rcConfig.m_videoOutEnable = atoi(optarg); break;
120-
124+
case 7+3: _runtime->m_state.m_targetJpgParams.jpgQuality = atoi(optarg); break;
125+
case 7+4:
126+
if (strcmp(optarg, "false") == 0) _runtime->m_state.m_targetJpgParams.ifBlackAndWhite = false;
127+
else _runtime->m_state.m_targetJpgParams.ifBlackAndWhite = true;
128+
break;
121129
default:
122130
return false;
123131
}
@@ -153,6 +161,8 @@ void runtimeArgsHelpMessage(Runtime* _runtime, const char* _arg0)
153161
" --rc-fifo-in <remote-control-fifo-input>\n"
154162
" --rc-fifo-out <remote-control-fifo-output>\n"
155163
" --video-out <enable-video-output>\n"
164+
" --jpeg-qual <desired-video-quality>\n"
165+
" --black-white <if-video-should-be-black-and-white>\n"
156166
" --verbose\n"
157167
" --help\n",
158168
_arg0);
@@ -404,6 +414,17 @@ int runtimeGetTargetDetectParams(Runtime* _runtime, TargetDetectParams* _targetD
404414
return 0;
405415
}
406416

417+
int runtimeGetTargetJpgParams(Runtime* _runtime, TargetJpgParams* _targetJpgParams)
418+
{
419+
if (_runtime == NULL || _targetJpgParams == NULL)
420+
return EINVAL;
421+
422+
pthread_mutex_lock(&_runtime->m_state.m_mutex);
423+
*_targetJpgParams = _runtime->m_state.m_targetJpgParams;
424+
pthread_mutex_unlock(&_runtime->m_state.m_mutex);
425+
return 0;
426+
}
427+
407428
int runtimeSetTargetDetectParams(Runtime* _runtime, const TargetDetectParams* _targetDetectParams)
408429
{
409430
if (_runtime == NULL || _targetDetectParams == NULL)

ov7670/jpeg_encoder/src/thread_video.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,15 @@ static int threadVideoSelectLoop(Runtime* _runtime, CodecEngine* _ce, V4L2Input*
7979
return res;
8080
}
8181
*/
82+
TargetJpgParams targetJpgParams;
83+
84+
if ((res = runtimeGetTargetJpgParams(_runtime, &targetJpgParams)) != 0)
85+
{
86+
fprintf(stderr, "runtimeGetTargetJpgParams() failed: %d\n", res);
87+
return res;
88+
}
89+
90+
8291
if ((res = runtimeGetVideoOutParams(_runtime, &(_ce->m_videoOutEnable))) != 0)
8392
{
8493
fprintf(stderr, "runtimeGetVideoOutParams() failed: %d\n", res);
@@ -89,6 +98,7 @@ static int threadVideoSelectLoop(Runtime* _runtime, CodecEngine* _ce, V4L2Input*
8998
// size_t frameDstUsed = frameDstSize;
9099
if ((res = codecEngineTranscodeFrame(_ce,
91100
frameSrcPtr, frameSrcSize,
101+
&targetJpgParams,
92102
/*frameDstPtr, frameDstSize, &frameDstUsed,
93103
&targetDetectParams,
94104
&targetDetectCommand,

0 commit comments

Comments
 (0)