Add new API rocDecParserMarkFrameForReuse() for Parser (#430)

* added new API to release video frame for decoder and parser

* removed ReleseFrame() from low level parser classes

* Removed rocDecReleaseFrame() from decoder and added in parser

* address review comments

* revert un-necessary files

* minor fix

* remove unused function

* minor formatting fix
This commit is contained in:
Rajy Rawther
2024-10-09 10:29:08 -07:00
committed by GitHub
parent 64078a58cb
commit 29bfe5e3bd
8 changed files with 52 additions and 4 deletions
+1
View File
@@ -37,6 +37,7 @@ public:
const char* ErrorMsg() { return error_.c_str(); }
void CaptureError(const std::string& err_msg) { error_ = err_msg; }
rocDecStatus ParseVideoData(RocdecSourceDataPacket *packet) { return roc_parser_->ParseVideoData(packet); }
rocDecStatus MarkFrameForReuse(int pic_idx) { return roc_parser_->MarkFrameForReuse(pic_idx); }
rocDecStatus DestroyParser() { return DestroyParserInternal(); };
private:
+8 -1
View File
@@ -73,6 +73,14 @@ rocDecStatus RocVideoParser::Initialize(RocdecParserParams *pParams) {
return ROCDEC_SUCCESS;
}
rocDecStatus RocVideoParser::MarkFrameForReuse(int pic_idx) {
if (pic_idx < 0) {
return ROCDEC_INVALID_PARAMETER;
}
//todo::
return ROCDEC_NOT_IMPLEMENTED;
}
void RocVideoParser::InitDecBufPool() {
for (int i = 0; i < dec_buf_pool_size_; i++) {
decode_buffer_pool_[i].use_status = kNotUsed;
@@ -106,7 +114,6 @@ ParserResult RocVideoParser::OutputDecodedPictures(bool no_delay) {
pfn_display_picture_cb_(parser_params_.user_data, &disp_info);
decode_buffer_pool_[output_pic_list_[i]].use_status &= ~kFrameUsedForDisplay;
}
num_output_pics_ = disp_delay;
// Shift the remaining frames to the top
if (num_output_pics_) {
+8
View File
@@ -102,6 +102,14 @@ public:
virtual rocDecStatus Initialize(RocdecParserParams *pParams);
virtual rocDecStatus ParseVideoData(RocdecSourceDataPacket *pData) = 0; // pure virtual: implemented by derived class
virtual rocDecStatus UnInitialize() = 0; // pure virtual: implemented by derived class
/**
* @brief function to to release surface with pic_idx and mark it for reuse, can be called from a different thread than decode thread
* @brief calling thread is responsible for syncronizing
* \param [in] pic_idx surface index for the picture to be released
*
* @return rocDecStatus
*/
virtual rocDecStatus MarkFrameForReuse(int pic_idx);
protected:
RocdecParserParams parser_params_ = {};
+24
View File
@@ -81,6 +81,30 @@ rocDecParseVideoData(RocdecVideoParser parser_handle, RocdecSourceDataPacket *pa
return ret;
}
/************************************************************************************************/
//! \ingroup group_rocparser
//! \fn rocDecStatus ROCDECAPI rocDecParserMarkFrameForReuse(RocdecVideoParser parser_handle, int pic_idx)
//! Release frame with index pic_idx from parser's buffer pool and mark it for reuse
/************************************************************************************************/
rocDecStatus ROCDECAPI
rocDecParserMarkFrameForReuse(RocdecVideoParser parser_handle, int pic_idx) {
if (parser_handle == nullptr || pic_idx < 0) {
return ROCDEC_INVALID_PARAMETER;
}
auto roc_parser_handle = static_cast<RocParserHandle *>(parser_handle);
rocDecStatus ret;
try {
ret = roc_parser_handle->MarkFrameForReuse(pic_idx);
}
catch(const std::exception& e) {
roc_parser_handle->CaptureError(e.what());
ERR(e.what())
return ROCDEC_RUNTIME_ERROR;
}
return ret;
}
/************************************************************************************************/
//! \ingroup FUNCTS
//! \fn rocDecStatus ROCDECAPI rocDecDestroyVideoParser(RocdecVideoParser parser_handle)