Merge commit '65db4899fa8790049bec3af16ecdb75dd81051fd'

* commit '65db4899fa8790049bec3af16ecdb75dd81051fd':
  mmaldec: refactor to have more context per MMAL input buffer

Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
This commit is contained in:
Hendrik Leppkes 2015-10-05 11:34:04 +02:00
commit 827d4b7942
1 changed files with 10 additions and 9 deletions

View File

@ -188,8 +188,9 @@ static av_cold int ffmmal_close_decoder(AVCodecContext *avctx)
static void input_callback(MMAL_PORT_T *port, MMAL_BUFFER_HEADER_T *buffer) static void input_callback(MMAL_PORT_T *port, MMAL_BUFFER_HEADER_T *buffer)
{ {
if (!buffer->cmd) { if (!buffer->cmd) {
AVBufferRef *buf = buffer->user_data; FFBufferEntry *entry = buffer->user_data;
av_buffer_unref(&buf); av_buffer_unref(&entry->ref);
av_free(entry);
} }
mmal_buffer_header_release(buffer); mmal_buffer_header_release(buffer);
} }
@ -535,19 +536,19 @@ static int ffmmal_fill_input_port(AVCodecContext *avctx)
mbuffer->flags = buffer->flags; mbuffer->flags = buffer->flags;
mbuffer->data = buffer->data; mbuffer->data = buffer->data;
mbuffer->length = buffer->length; mbuffer->length = buffer->length;
mbuffer->user_data = buffer->ref; mbuffer->user_data = buffer;
mbuffer->alloc_size = ctx->decoder->input[0]->buffer_size; mbuffer->alloc_size = ctx->decoder->input[0]->buffer_size;
if ((status = mmal_port_send_buffer(ctx->decoder->input[0], mbuffer))) {
mmal_buffer_header_release(mbuffer);
av_buffer_unref(&buffer->ref);
}
// Remove from start of the list // Remove from start of the list
ctx->waiting_buffers = buffer->next; ctx->waiting_buffers = buffer->next;
if (ctx->waiting_buffers_tail == buffer) if (ctx->waiting_buffers_tail == buffer)
ctx->waiting_buffers_tail = NULL; ctx->waiting_buffers_tail = NULL;
av_free(buffer);
if ((status = mmal_port_send_buffer(ctx->decoder->input[0], mbuffer))) {
mmal_buffer_header_release(mbuffer);
av_buffer_unref(&buffer->ref);
av_free(buffer);
}
if (status) { if (status) {
av_log(avctx, AV_LOG_ERROR, "MMAL error %d when sending input\n", (int)status); av_log(avctx, AV_LOG_ERROR, "MMAL error %d when sending input\n", (int)status);