diff options
| author | Harish Mahendrakar <harish.mahendrakar@ittiam.com> | 2019-03-19 20:30:36 -0700 |
|---|---|---|
| committer | Ray Essick <essick@google.com> | 2019-05-01 13:25:30 -0700 |
| commit | 4c747e2e9afa6a4852be37f97d17d9a19d8fea34 (patch) | |
| tree | 574a3cf3b161d1e0498bcdd7be4bbc8a68d1d65d /common | |
| parent | a185bda936f580da194a6ae301beee9182be0dec (diff) | |
| download | platform_external_libmpeg2-4c747e2e9afa6a4852be37f97d17d9a19d8fea34.tar.gz platform_external_libmpeg2-4c747e2e9afa6a4852be37f97d17d9a19d8fea34.tar.bz2 platform_external_libmpeg2-4c747e2e9afa6a4852be37f97d17d9a19d8fea34.zip | |
Reset buffer managers during reset control call
In some cases, some picture buffer entries in buffer manager were not
released during reset.
Added a function to reset buffer manager entries and called that during
reset control call.
Without this in some call sequences Decoder would run out of picture
buffers and not produce correct output.
Bug: 124531341
Test: atest android.media.cts.DecoderTest
Change-Id: I75e4422263b0a3e66807376567705b1f06e89cff
Diffstat (limited to 'common')
| -rw-r--r-- | common/impeg2_buf_mgr.c | 33 | ||||
| -rw-r--r-- | common/impeg2_buf_mgr.h | 4 |
2 files changed, 37 insertions, 0 deletions
diff --git a/common/impeg2_buf_mgr.c b/common/impeg2_buf_mgr.c index c4aca4a..498259f 100644 --- a/common/impeg2_buf_mgr.c +++ b/common/impeg2_buf_mgr.c @@ -88,6 +88,39 @@ void impeg2_buf_mgr_init( } } +/** +******************************************************************************* +* +* @brief +* Buffer manager reset function. +* +* @par Description: +* Resets the buffer manager structure +* +* @param[in] ps_buf_mgr +* Pointer to the buffer manager +* +* @returns +* +* @remarks +* None +* +******************************************************************************* +*/ + +void impeg2_buf_mgr_reset( + buf_mgr_t *ps_buf_mgr) +{ + WORD32 id; + + ps_buf_mgr->u4_max_buf_cnt = BUF_MGR_MAX_CNT; + ps_buf_mgr->u4_active_buf_cnt = 0; + + for(id = 0; id < BUF_MGR_MAX_CNT; id++) + { + ps_buf_mgr->au4_status[id] = 0; + } +} /** ******************************************************************************* diff --git a/common/impeg2_buf_mgr.h b/common/impeg2_buf_mgr.h index 6b1cbef..aed157a 100644 --- a/common/impeg2_buf_mgr.h +++ b/common/impeg2_buf_mgr.h @@ -69,6 +69,10 @@ typedef struct void impeg2_buf_mgr_init( buf_mgr_t *ps_buf_mgr); +// resets the buffer API structure +void impeg2_buf_mgr_reset( + buf_mgr_t *ps_buf_mgr); + // Add buffer to buffer manager. 0: success, -1: fail (u4_active_buf_cnt has reached u4_max_buf_cnt) WORD32 impeg2_buf_mgr_add( buf_mgr_t *ps_buf_mgr, |
