// Slots void Window::runEncode() { emit startEncode(); }
/*============================================================================== * Function : encodeImage * Parameters: OMX_BUFFERHEADERTYPE *a_inBuffer - Input Buffer passed during * ETB, OMX_BUFFERHEADERTYPE *a_outBuffer - O/p buffer passed during FTB * Return Value : OMX_ERRORTYPE * Description: Start Image Encoding ==============================================================================*/ OMX_ERRORTYPE OMXJpegEncoder::encodeImage( OMX_BUFFERHEADERTYPE *a_inBuffer, OMX_BUFFERHEADERTYPE *a_inTmbBuffer, OMX_BUFFERHEADERTYPE *a_outBuffer) { OMX_ERRORTYPE lret = OMX_ErrorNone; if (!a_inBuffer || !a_outBuffer) { QIDBG_ERROR("%s:%d] Bad parameter", __func__, __LINE__); return OMX_ErrorBadParameter; } if (m_state == OMX_StateInvalid) { QIDBG_ERROR("%s:%d] Invalid State", __func__, __LINE__); return OMX_ErrorInvalidState; } pthread_mutex_lock(&m_abortlock); m_releaseFlag = OMX_FALSE; if (!m_abort_flag) { m_mainEncodingComplete = OMX_FALSE; if ((m_mainEncodeParams.Rotation() != (uint32_t)m_rotation.nRotation) && (!m_mainEncodeParams.Rotation() || !m_rotation.nRotation)) { if (NULL != m_mainEncoder) { delete m_mainEncoder; m_mainEncoder = NULL; } } lret = configureEncodedata(); if (lret != OMX_ErrorNone) { QIDBG_ERROR("%s:%d] Error in Encode configuration", __func__, __LINE__); goto error; } lret = configureBuffers(a_inBuffer, a_outBuffer); if (lret != OMX_ErrorNone) { QIDBG_ERROR("%s:%d] Error in Encode buffer configuration", __func__, __LINE__); goto error; } if ((m_thumbnailInfo.input_height != 0) && (m_thumbnailInfo.input_width != 0)) { // Configure thumbnail buffer m_thumbEncodingComplete = OMX_FALSE; lret = configureTmbBuffer(a_inTmbBuffer); if (lret != OMX_ErrorNone) { QIDBG_ERROR("%s:%d] Error in Thumbnail bufffer configuration", __func__, __LINE__); goto error; } lret = configureThumbnailData(); if (lret != OMX_ErrorNone) { QIDBG_ERROR("%s:%d] Error in Encode configuration", __func__, __LINE__); goto error; } /* Monochrome can only be encoded with HW encoder. Thus, switch to serial and use the HW for both thumbnail and main*/ if (m_thumbFormat == QI_MONOCHROME) { m_encoding_mode = OMX_Serial_Encoding; } /* If Parallel encoding is enabled, encode both main image and thumbnail in parallel. Start main image first followed by thumbnail */ if (m_encoding_mode == OMX_Parallel_Encoding) { lret = startEncode(); if (lret != OMX_ErrorNone) { QIDBG_ERROR("%s:%d] Error in Start Encode", __func__, __LINE__); goto error; } lret = startThumbnailEncode(); if (lret != OMX_ErrorNone) { QIDBG_ERROR("%s:%d] Error in Starting thumbnail encode", __func__, __LINE__); goto error; } } else { /*If serial encoding start thumbnail first*/ lret = startThumbnailEncode(); if (lret != OMX_ErrorNone) { QIDBG_ERROR("%s:%d] Error in Starting thumbnail encode", __func__, __LINE__); goto error; } } } else { /*If thumbnail is not present we call write exif from here with thumbnail as NULL*/ if (NULL == m_memOps.get_memory) { lret = writeExifData(NULL, m_outputQIBuffer); if (lret != OMX_ErrorNone) { QIDBG_ERROR("%s:%d] Error in Exif Composer", __func__, __LINE__); goto error; } QIDBG_MED("%s:%d] Finished writing Exif", __func__, __LINE__); } lret = startEncode(); if (lret != OMX_ErrorNone) { QIDBG_ERROR("%s:%d] Error in Start Encode", __func__, __LINE__); goto error; } } } error: pthread_mutex_unlock(&m_abortlock); return lret; }