Encode_Status VaapiEncoderH264::encodePicture(const PicturePtr& picture) { Encode_Status ret = ENCODE_FAIL; SurfacePtr reconstruct = createSurface(); if (!reconstruct) return ret; { AutoLock locker(m_paramLock); #ifdef __BUILD_GET_MV__ uint32_t size; void *buffer = NULL; getMVBufferSize(&size); if (!picture->editMVBuffer(buffer, &size)) return ret; #endif if (!ensureSequence (picture)) return ret; if (!ensureMiscParams (picture.get())) return ret; if (!ensurePicture(picture, reconstruct)) return ret; if (!ensureSlices (picture)) return ret; } if (!picture->encode()) return ret; if (!referenceListUpdate (picture, reconstruct)) return ret; return ENCODE_SUCCESS; }
Encode_Status VaapiEncoderBase::getOutput(VideoEncOutputBuffer * outBuffer, VideoEncMVBuffer * MVBuffer, bool withWait) { void *data = NULL; uint32_t mappedSize; bool isEmpty; PicturePtr picture; Encode_Status ret; FUNC_ENTER(); ret = checkEmpty(outBuffer, &isEmpty); if (isEmpty) return ret; getPicture(picture); ret = picture->getOutput(outBuffer); if (ret != ENCODE_SUCCESS) return ret; if (!picture->editMVBuffer(data, &mappedSize)) return ret; if (data) memcpy(MVBuffer->data, data, mappedSize); checkCodecData(outBuffer); return ENCODE_SUCCESS; }