@@ -55,11 +55,12 @@ namespace {
5555
5656#define FRM_INDEX (0 ) // index of primary frame in oapv_frms_t
5757
58+ using oapvd_uniq = std::unique_ptr<std::remove_pointer_t <oapvd_t >, deleter_from_fcn<oapvd_delete>>;
59+
5860struct state_video_decompress_openapv {
5961 state_video_decompress_openapv ();
60- ~state_video_decompress_openapv ();
61-
62- oapvd_t decoder_handle{};
62+
63+ oapvd_uniq decoder_handle;
6364 oapvd_cdesc_t cdesc{};
6465
6566 Oapv_Frames decoded_frames;
@@ -78,18 +79,12 @@ state_video_decompress_openapv::state_video_decompress_openapv() {
7879 int ret = -1 ;
7980
8081 cdesc.threads = OAPV_CDESC_THREADS_AUTO ;
81- decoder_handle = oapvd_create (&cdesc, &ret);
82+ decoder_handle. reset ( oapvd_create (&cdesc, &ret) );
8283 if (OAPV_FAILED (ret)) {
8384 throw std::runtime_error (" oapvd_create failed (" + std::string (oapv_err_str (ret)) + " )" );
8485 }
8586}
8687
87- state_video_decompress_openapv::~state_video_decompress_openapv () {
88- if (decoder_handle) {
89- oapvd_delete (decoder_handle);
90- }
91- }
92-
9388bool configure_with (state_video_decompress_openapv *s, unsigned char *bitstream_buffer, size_t codestream_size) {
9489 int ret = -1 ;
9590 oapv_au_info_t aui{};
@@ -221,7 +216,7 @@ decompress_status openapv_decompress(void *state, unsigned char *dst, unsigned c
221216 s->input_buffer .bsize = src_len;
222217
223218 oapvd_stat_t stat{};
224- int ret = oapvd_decode (s->decoder_handle , &s->input_buffer , s->decoded_frames .get_frms (), nullptr , &stat);
219+ int ret = oapvd_decode (s->decoder_handle . get () , &s->input_buffer , s->decoded_frames .get_frms (), nullptr , &stat);
225220 if (OAPV_FAILED (ret)) {
226221 log_msg (LOG_LEVEL_WARNING , MOD_NAME " oapvd_decode failed (%s) src_len=%u.\n " , oapv_err_str (ret), src_len);
227222 return DECODER_NO_FRAME ;
0 commit comments