mirror of
https://github.com/opencv/opencv.git
synced 2026-07-30 15:53:03 +04:00
Merge pull request #21022 from sivanov-work:async_mfp_demux
G-API: oneVPL Implement asynchronous MFP demux data provider * Add dummy dmux * Initial commit for draft versionn * Demux for low res file works * Add media source resolver to work over incorrect MIME * Add MFP Demux logger * stash changes * Extend IDataProvider with CodecId, Add troubleshooting info * Add IDapaProvider dispatcher * Add ComPtrGuard wrappers * Add new unit test scope for MFP demux & Add minor changes * Enhance UTs * Remove ATL header * Remove ATL another one * Fix build * Add static for some methods * Initial commit * Add async demuxing * Apply tdd idea * Intro IDataProvider changes: +fetch_bitstream, -fetch_data * Fix UTs * Remove IDataProvider::CodecId & Fix EOF hang * Remove sync demux * Remove mfp async dependencies * Remove VPL dependencies from IDataProvider declaration * Apply comments * Fix compilation * Suppress unused warning * Apply some comments * Apply some comments * Apply comments
This commit is contained in:
@@ -7,28 +7,39 @@
|
||||
#ifndef GAPI_STREAMING_ONEVPL_ONEVPL_DATA_PROVIDER_INTERFACE_HPP
|
||||
#define GAPI_STREAMING_ONEVPL_ONEVPL_DATA_PROVIDER_INTERFACE_HPP
|
||||
#include <exception>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#include <opencv2/gapi/own/exports.hpp> // GAPI_EXPORTS
|
||||
|
||||
namespace cv {
|
||||
namespace gapi {
|
||||
namespace wip {
|
||||
namespace onevpl {
|
||||
|
||||
struct GAPI_EXPORTS DataProviderException : public std::exception {
|
||||
virtual ~DataProviderException() {}
|
||||
};
|
||||
DataProviderException(const std::string& descr);
|
||||
DataProviderException(std::string&& descr);
|
||||
|
||||
struct GAPI_EXPORTS DataProviderSystemErrorException : public DataProviderException {
|
||||
DataProviderSystemErrorException(int error_code, const std::string& desription = std::string());
|
||||
virtual ~DataProviderSystemErrorException();
|
||||
virtual ~DataProviderException() = default;
|
||||
virtual const char* what() const noexcept override;
|
||||
|
||||
private:
|
||||
std::string reason;
|
||||
};
|
||||
|
||||
struct GAPI_EXPORTS DataProviderSystemErrorException final : public DataProviderException {
|
||||
DataProviderSystemErrorException(int error_code, const std::string& desription = std::string());
|
||||
~DataProviderSystemErrorException() = default;
|
||||
};
|
||||
|
||||
struct GAPI_EXPORTS DataProviderUnsupportedException final : public DataProviderException {
|
||||
DataProviderUnsupportedException(const std::string& description);
|
||||
~DataProviderUnsupportedException() = default;
|
||||
};
|
||||
|
||||
struct GAPI_EXPORTS DataProviderImplementationException : public DataProviderException {
|
||||
DataProviderImplementationException(const std::string& description);
|
||||
~DataProviderImplementationException() = default;
|
||||
};
|
||||
/**
|
||||
* @brief Public interface allows to customize extraction of video stream data
|
||||
* used by onevpl::GSource instead of reading stream from file (by default).
|
||||
@@ -41,21 +52,41 @@ private:
|
||||
*/
|
||||
struct GAPI_EXPORTS IDataProvider {
|
||||
using Ptr = std::shared_ptr<IDataProvider>;
|
||||
using mfx_codec_id_type = uint32_t;
|
||||
|
||||
virtual ~IDataProvider() {}
|
||||
/**
|
||||
* NB: here is supposed to be forward declaration of mfxBitstream
|
||||
* But according to current oneVPL implementation it is impossible to forward
|
||||
* declare untagged struct mfxBitstream.
|
||||
*
|
||||
* IDataProvider makes sense only for HAVE_VPL is ON and to keep IDataProvider
|
||||
* interface API/ABI compliant between core library and user application layer
|
||||
* let's introduce wrapper mfx_bitstream which inherits mfxBitstream in private
|
||||
* G-API code section and declare forward for wrapper mfx_bitstream here
|
||||
*/
|
||||
struct mfx_bitstream;
|
||||
|
||||
virtual ~IDataProvider() = default;
|
||||
|
||||
/**
|
||||
* The function is used by onevpl::GSource to extract codec id from data
|
||||
*
|
||||
*/
|
||||
virtual mfx_codec_id_type get_mfx_codec_id() const = 0;
|
||||
|
||||
/**
|
||||
* The function is used by onevpl::GSource to extract binary data stream from @ref IDataProvider
|
||||
* implementation.
|
||||
*
|
||||
* It MUST throw `DataProviderException` kind exceptions in fail cases.
|
||||
* It MUST return 0 in EOF which considered as not-fail case.
|
||||
* It MUST return MFX_ERR_MORE_DATA in EOF which considered as not-fail case.
|
||||
*
|
||||
* @param out_data_bytes_size the available capacity of out_data buffer.
|
||||
* @param out_data the output consumer buffer with capacity out_data_bytes_size.
|
||||
* @return fetched bytes count.
|
||||
* @param in_out_bitsream the input-output reference on MFX bitstream buffer which MUST be empty at the first request
|
||||
* to allow implementation to allocate it by itself and to return back. Subsequent invocation of `fetch_bitstream_data`
|
||||
* MUST use the previously used in_out_bitsream to avoid skipping rest of frames which haven't been consumed
|
||||
* @return true for fetched data, false on EOF and throws exception on error
|
||||
*/
|
||||
virtual size_t fetch_data(size_t out_data_bytes_size, void* out_data) = 0;
|
||||
virtual bool fetch_bitstream_data(std::shared_ptr<mfx_bitstream> &in_out_bitsream) = 0;
|
||||
|
||||
/**
|
||||
* The function is used by onevpl::GSource to check more binary data availability.
|
||||
|
||||
Reference in New Issue
Block a user