int main(void) { /* SystemInit() called by "startup_stm32f40xx.S" */ /* Init PWM */ PWM_Pins_Init(); /* Init timer */ TIMER_Init(); /* Init SVPWM */ SVPWM_Init(); /* Init 16kHz Interrupt */ INT_TIM2_Config(); /* Init ADC1 Channel 0 & ADC2 Channel1 */ ADC123_Init(); /* Configure Encoder with Tim8 on GPIOC 6 & 7 */ configureEncoder(); /* Enable USART2 */ USART2_Init(); GPIO_SetBits(GPIOB, GPIO_Pin_10); while (1) { } }
int mainStreaming(char* ip) { // Prepare the application context to get video stream AppOMXContext ctx = AppOMXContext_Construct(ip) ; initAppOMX(&ctx) ; configureCamera(&ctx) ; configureEncoder(&ctx) ; configureNullSink(&ctx) ; // Configure ports to capture and compress video stream tunneling(&ctx) ; enablePorts(&ctx) ; allocateBuffers(&ctx) ; portsReady(&ctx) ; // Capture and make video streaming over Wifi connection while (1) { ctx.capture(&ctx) ; } return 0 ; }
OMX_ERRORTYPE SoftFlacEncoder::internalSetParameter( OMX_INDEXTYPE index, const OMX_PTR params) { switch (index) { case OMX_IndexParamAudioPcm: { ALOGV("SoftFlacEncoder::internalSetParameter(OMX_IndexParamAudioPcm)"); OMX_AUDIO_PARAM_PCMMODETYPE *pcmParams = (OMX_AUDIO_PARAM_PCMMODETYPE *)params; if (pcmParams->nPortIndex != 0 && pcmParams->nPortIndex != 1) { ALOGE("SoftFlacEncoder::internalSetParameter() Error #1"); return OMX_ErrorUndefined; } if (pcmParams->nChannels < 1 || pcmParams->nChannels > 2) { return OMX_ErrorUndefined; } mNumChannels = pcmParams->nChannels; mSampleRate = pcmParams->nSamplingRate; ALOGV("will encode %d channels at %dHz", mNumChannels, mSampleRate); return configureEncoder(); } case OMX_IndexParamStandardComponentRole: { ALOGV("SoftFlacEncoder::internalSetParameter(OMX_IndexParamStandardComponentRole)"); const OMX_PARAM_COMPONENTROLETYPE *roleParams = (const OMX_PARAM_COMPONENTROLETYPE *)params; if (strncmp((const char *)roleParams->cRole, "audio_encoder.flac", OMX_MAX_STRINGNAME_SIZE - 1)) { ALOGE("SoftFlacEncoder::internalSetParameter(OMX_IndexParamStandardComponentRole)" "error"); return OMX_ErrorUndefined; } return OMX_ErrorNone; } case OMX_IndexParamAudioFlac: { // used only for setting the compression level OMX_AUDIO_PARAM_FLACTYPE *flacParams = (OMX_AUDIO_PARAM_FLACTYPE *)params; mCompressionLevel = flacParams->nCompressionLevel; // range clamping done inside encoder return OMX_ErrorNone; } case OMX_IndexParamPortDefinition: { OMX_PARAM_PORTDEFINITIONTYPE *defParams = (OMX_PARAM_PORTDEFINITIONTYPE *)params; if (defParams->nPortIndex == 0) { if (defParams->nBufferSize > kMaxInputBufferSize) { ALOGE("Input buffer size must be at most %d bytes", kMaxInputBufferSize); return OMX_ErrorUnsupportedSetting; } } // fall through } default: ALOGV("SoftFlacEncoder::internalSetParameter(default)"); return SimpleSoftOMXComponent::internalSetParameter(index, params); } }
OMX_ERRORTYPE NonTextureEngine::onCameraEventParamOrConfigChanged() { ofLogVerbose(__func__) << "START"; OMX_ERRORTYPE error = OMX_SendCommand(camera, OMX_CommandStateSet, OMX_StateIdle, NULL); if (error != OMX_ErrorNone) { ofLog(OF_LOG_ERROR, "camera OMX_SendCommand OMX_StateIdle FAIL error: 0x%08x", error); } //Enable Camera Output Port OMX_CONFIG_PORTBOOLEANTYPE cameraport; OMX_INIT_STRUCTURE(cameraport); cameraport.nPortIndex = CAMERA_OUTPUT_PORT; cameraport.bEnabled = OMX_TRUE; error =OMX_SetParameter(camera, OMX_IndexConfigPortCapturing, &cameraport); if (error != OMX_ErrorNone) { ofLog(OF_LOG_ERROR, "camera enable Output Port FAIL error: 0x%08x", error); } if (omxCameraSettings.doRecording) { if (omxCameraSettings.doRecordingPreview) { //Set up renderer setupRenderer(); } //set up encoder OMX_CALLBACKTYPE encoderCallbacks; encoderCallbacks.EventHandler = &BaseEngine::encoderEventHandlerCallback; encoderCallbacks.EmptyBufferDone = &BaseEngine::encoderEmptyBufferDone; encoderCallbacks.FillBufferDone = &NonTextureEngine::encoderFillBufferDone; string encoderComponentName = "OMX.broadcom.video_encode"; error =OMX_GetHandle(&encoder, (OMX_STRING)encoderComponentName.c_str(), this , &encoderCallbacks); if (error != OMX_ErrorNone) { ofLog(OF_LOG_ERROR, "encoder OMX_GetHandle FAIL error: 0x%08x", error); } configureEncoder(); if (omxCameraSettings.doRecordingPreview) { //Create camera->video_render Tunnel error = OMX_SetupTunnel(camera, CAMERA_PREVIEW_PORT, render, VIDEO_RENDER_INPUT_PORT); if (error != OMX_ErrorNone) { ofLog(OF_LOG_ERROR, "camera->video_render OMX_SetupTunnel FAIL error: 0x%08x", error); } } // Tunnel camera video output port and encoder input port error = OMX_SetupTunnel(camera, CAMERA_OUTPUT_PORT, encoder, VIDEO_ENCODE_INPUT_PORT); if(error != OMX_ErrorNone) { ofLog(OF_LOG_ERROR, "CAMERA_OUTPUT_PORT->VIDEO_ENCODE_INPUT_PORT OMX_SetupTunnel FAIL error: 0x%08x", error); } //Set encoder to Idle error = OMX_SendCommand(encoder, OMX_CommandStateSet, OMX_StateIdle, NULL); if (error != OMX_ErrorNone) { ofLog(OF_LOG_ERROR, "encoder OMX_SendCommand OMX_StateIdle FAIL error: 0x%08x", error); } //Set camera to Idle error = OMX_SendCommand(camera, OMX_CommandStateSet, OMX_StateIdle, NULL); if (error != OMX_ErrorNone) { ofLog(OF_LOG_ERROR, "camera OMX_SendCommand OMX_StateIdle FAIL error: 0x%08x", error); } if (omxCameraSettings.doRecordingPreview) { //Enable camera preview port error = OMX_SendCommand(camera, OMX_CommandPortEnable, CAMERA_PREVIEW_PORT, NULL); if (error != OMX_ErrorNone) { ofLog(OF_LOG_ERROR, "camera OMX_CommandPortEnable CAMERA_PREVIEW_PORT FAIL error: 0x%08x", error); } } //Enable camera output port error = OMX_SendCommand(camera, OMX_CommandPortEnable, CAMERA_OUTPUT_PORT, NULL); if (error != OMX_ErrorNone) { ofLog(OF_LOG_ERROR, "camera OMX_CommandPortEnable CAMERA_OUTPUT_PORT FAIL error: 0x%08x", error); } //Enable encoder input port error = OMX_SendCommand(encoder, OMX_CommandPortEnable, VIDEO_ENCODE_INPUT_PORT, NULL); if (error != OMX_ErrorNone) { ofLog(OF_LOG_ERROR, "encoder OMX_CommandPortEnable VIDEO_ENCODE_INPUT_PORT FAIL error: 0x%08x", error); } //Enable encoder output port error = OMX_SendCommand(encoder, OMX_CommandPortEnable, VIDEO_ENCODE_OUTPUT_PORT, NULL); if (error != OMX_ErrorNone) { ofLog(OF_LOG_ERROR, "encoder OMX_CommandPortEnable VIDEO_ENCODE_OUTPUT_PORT FAIL error: 0x%08x", error); } if (omxCameraSettings.doRecordingPreview) { //Enable render input port error = OMX_SendCommand(render, OMX_CommandPortEnable, VIDEO_RENDER_INPUT_PORT, NULL); if (error != OMX_ErrorNone) { ofLog(OF_LOG_ERROR, "render enable output port FAIL error: 0x%08x", error); } } OMX_PARAM_PORTDEFINITIONTYPE encoderOutputPortDefinition; OMX_INIT_STRUCTURE(encoderOutputPortDefinition); encoderOutputPortDefinition.nPortIndex = VIDEO_ENCODE_OUTPUT_PORT; error =OMX_GetParameter(encoder, OMX_IndexParamPortDefinition, &encoderOutputPortDefinition); if (error != OMX_ErrorNone) { ofLog(OF_LOG_ERROR, "encoder OMX_GetParameter OMX_IndexParamPortDefinition FAIL error: 0x%08x", error); }else { ofLogVerbose(__func__) << "VIDEO_ENCODE_OUTPUT_PORT eColorFormat: " << OMX_Maps::getInstance().colorFormatTypes[encoderOutputPortDefinition.format.video.eColorFormat]; } error = OMX_AllocateBuffer(encoder, &encoderOutputBuffer, VIDEO_ENCODE_OUTPUT_PORT, NULL, encoderOutputPortDefinition.nBufferSize); if (error != OMX_ErrorNone) { ofLog(OF_LOG_ERROR, "encoder OMX_AllocateBuffer VIDEO_ENCODE_OUTPUT_PORT FAIL error: 0x%08x", error); } //Start camera error = OMX_SendCommand(camera, OMX_CommandStateSet, OMX_StateExecuting, NULL); if (error != OMX_ErrorNone) { ofLog(OF_LOG_ERROR, "camera OMX_StateExecuting FAIL error: 0x%08x", error); } //Start encoder error = OMX_SendCommand(encoder, OMX_CommandStateSet, OMX_StateExecuting, NULL); if (error != OMX_ErrorNone) { ofLog(OF_LOG_ERROR, "encoder OMX_StateExecuting FAIL error: 0x%08x", error); } if (omxCameraSettings.doRecordingPreview) { //Start renderer error = OMX_SendCommand(render, OMX_CommandStateSet, OMX_StateExecuting, NULL); if (error != OMX_ErrorNone) { ofLog(OF_LOG_ERROR, "render OMX_StateExecuting FAIL error: 0x%08x", error); } setupDisplay(); } error = OMX_FillThisBuffer(encoder, encoderOutputBuffer); if (error != OMX_ErrorNone) { ofLog(OF_LOG_ERROR, "encoder OMX_FillThisBuffer FAIL error: 0x%08x", error); } bool doThreadBlocking = true; startThread(doThreadBlocking); }else { setupRenderer(); //Create camera->video_render Tunnel error = OMX_SetupTunnel(camera, CAMERA_OUTPUT_PORT, render, VIDEO_RENDER_INPUT_PORT); if (error != OMX_ErrorNone) { ofLog(OF_LOG_ERROR, "camera->video_render OMX_SetupTunnel FAIL error: 0x%08x", error); } //Enable camera output port error = OMX_SendCommand(camera, OMX_CommandPortEnable, CAMERA_OUTPUT_PORT, NULL); if (error != OMX_ErrorNone) { ofLog(OF_LOG_ERROR, "camera enable output port FAIL error: 0x%08x", error); } //Enable render input port error = OMX_SendCommand(render, OMX_CommandPortEnable, VIDEO_RENDER_INPUT_PORT, NULL); if (error != OMX_ErrorNone) { ofLog(OF_LOG_ERROR, "render enable output port FAIL error: 0x%08x", error); } //Start renderer error = OMX_SendCommand(render, OMX_CommandStateSet, OMX_StateExecuting, NULL); if (error != OMX_ErrorNone) { ofLog(OF_LOG_ERROR, "render OMX_StateExecuting FAIL error: 0x%08x", error); } //Start camera error = OMX_SendCommand(camera, OMX_CommandStateSet, OMX_StateExecuting, NULL); if (error != OMX_ErrorNone) { ofLog(OF_LOG_ERROR, "camera OMX_StateExecuting FAIL error: 0x%08x", error); } setupDisplay(); } isOpen = true; return error; }