0028-Omxdec-no-longer-send-eos-when-processing-zero-size-.patch 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. From d9ac2081cfb04a0d519e9bf57b6b68d12eefadb0 Mon Sep 17 00:00:00 2001
  2. From: Som Qin <som.qin@starfivetech.com>
  3. Date: Fri, 4 Aug 2023 13:59:25 +0800
  4. Subject: [PATCH 7/8] Omxdec: no longer send eos when processing zero size pkt
  5. Signed-off-by: Som Qin <som.qin@starfivetech.com>
  6. ---
  7. libavcodec/omxdec.c | 28 +---------------------------
  8. 1 file changed, 1 insertion(+), 27 deletions(-)
  9. diff --git a/libavcodec/omxdec.c b/libavcodec/omxdec.c
  10. index aa3ddea..47fb482 100755
  11. --- a/libavcodec/omxdec.c
  12. +++ b/libavcodec/omxdec.c
  13. @@ -1268,29 +1268,6 @@ static int omx_decode_frame(AVCodecContext *avctx, void *data,
  14. av_log(avctx, AV_LOG_ERROR, "OMX_EmptyThisBuffer failed: %x\n", err);
  15. return AVERROR_UNKNOWN;
  16. }
  17. - } else if (!s->eos_sent) {
  18. -
  19. - // if(!s->first_get_outbuffer)
  20. - // av_usleep(1000000);
  21. - buffer = get_buffer(&s->input_mutex, &s->input_cond,
  22. - &s->num_free_in_buffers, s->free_in_buffers, 1);
  23. -
  24. - if(!buffer) {
  25. - av_log(avctx, AV_LOG_ERROR, "get_buffer NULL\n");
  26. - return AVERROR(ENOMEM);
  27. - }
  28. -
  29. - buffer->nFilledLen = 0;
  30. - buffer->nFlags = OMX_BUFFERFLAG_EOS;
  31. - buffer->pAppPrivate = buffer->pOutputPortPrivate = NULL;
  32. -
  33. - err = OMX_EmptyThisBuffer(s->handle, buffer);
  34. - if (err != OMX_ErrorNone) {
  35. - append_buffer(&s->input_mutex, &s->input_cond, &s->num_free_in_buffers, s->free_in_buffers, buffer);
  36. - av_log(avctx, AV_LOG_ERROR, "OMX_EmptyThisBuffer failed: %x\n", err);
  37. - return AVERROR_UNKNOWN;
  38. - }
  39. - s->eos_sent = 1;
  40. }
  41. while (!*got_packet && ret == 0 && !s->got_eos) {
  42. @@ -1302,10 +1279,7 @@ static int omx_decode_frame(AVCodecContext *avctx, void *data,
  43. !pkt || had_partial);
  44. if (!buffer) {
  45. - /*eos is sent wait for vpu evnet_bufferflag to get all frames
  46. - mjpeg: sent a frame, then wait for a decoder frame
  47. - */
  48. - if((s->eos_sent && !s->evnet_bufferflag) || (avctx->codec_id == AV_CODEC_ID_MJPEG )) {
  49. + if( avctx->codec_id == AV_CODEC_ID_MJPEG ) {
  50. continue;
  51. }
  52. break;
  53. --
  54. 2.25.1