| 430 | } |
| 431 | |
| 432 | static void oh_buffer_release(void *opaque, uint8_t *data) |
| 433 | { |
| 434 | if (!opaque) |
| 435 | return; |
| 436 | |
| 437 | OHCodecBuffer *buffer = opaque; |
| 438 | |
| 439 | if (buffer->buffer) { |
| 440 | OH_AVCodec *dec = *buffer->dec_ref; |
| 441 | OH_AVCodecBufferAttr attr; |
| 442 | OH_AVErrCode err = OH_AVBuffer_GetBufferAttr(buffer->buffer, &attr); |
| 443 | if (err == AV_ERR_OK && !(attr.flags & AVCODEC_BUFFER_FLAGS_DISCARD)) |
| 444 | OH_VideoDecoder_RenderOutputBuffer(dec, buffer->index); |
| 445 | else |
| 446 | OH_VideoDecoder_FreeOutputBuffer(dec, buffer->index); |
| 447 | } |
| 448 | |
| 449 | av_refstruct_unref(&buffer->dec_ref); |
| 450 | av_free(buffer); |
| 451 | } |
| 452 | |
| 453 | static int oh_decode_wrap_hw_buffer(AVCodecContext *avctx, AVFrame *frame, |
| 454 | OHBufferQueueItem *output, |
no test coverage detected