Lines Matching refs:buffer
42 #include "libavutil/buffer.h"
66 MMAL_BUFFER_HEADER_T *buffer;
117 mmal_buffer_header_release(ref->buffer);
123 // Setup frame with a new reference to buffer. The buffer must have been
126 MMAL_BUFFER_HEADER_T *buffer)
133 ref->buffer = buffer;
144 mmal_buffer_header_acquire(buffer);
147 frame->data[3] = (uint8_t *)ref->buffer;
155 MMAL_BUFFER_HEADER_T *buffer;
165 while ((buffer = mmal_queue_get(ctx->queue_decoded_frames)))
166 mmal_buffer_header_release(buffer);
169 FFBufferEntry *buffer = ctx->waiting_buffers;
171 ctx->waiting_buffers = buffer->next;
173 if (buffer->flags & MMAL_BUFFER_HEADER_FLAG_FRAME_END)
176 av_buffer_unref(&buffer->ref);
177 av_free(buffer);
204 static void input_callback(MMAL_PORT_T *port, MMAL_BUFFER_HEADER_T *buffer)
209 if (!buffer->cmd) {
210 FFBufferEntry *entry = buffer->user_data;
216 mmal_buffer_header_release(buffer);
219 static void output_callback(MMAL_PORT_T *port, MMAL_BUFFER_HEADER_T *buffer)
224 mmal_queue_put(ctx->queue_decoded_frames, buffer);
227 static void control_port_cb(MMAL_PORT_T *port, MMAL_BUFFER_HEADER_T *buffer)
232 if (buffer->cmd == MMAL_EVENT_ERROR) {
233 status = *(uint32_t *)buffer->data;
237 av_fourcc2str(buffer->cmd));
240 mmal_buffer_header_release(buffer);
247 MMAL_BUFFER_HEADER_T *buffer;
253 while ((buffer = mmal_queue_get(ctx->pool_out->pool->queue))) {
254 if ((status = mmal_port_send_buffer(ctx->decoder->output[0], buffer))) {
255 mmal_buffer_header_release(buffer);
256 av_log(avctx, AV_LOG_ERROR, "MMAL error %d when sending output buffer.\n", (int)status);
483 // complete frames - then the input buffer just would have to be big enough.)
518 FFBufferEntry *buffer = av_mallocz(sizeof(*buffer));
519 if (!buffer) {
524 buffer->data = data;
525 buffer->length = FFMIN(size, ctx->decoder->input[0]->buffer_size);
528 buffer->flags |= MMAL_BUFFER_HEADER_FLAG_CONFIG;
531 buffer->flags |= MMAL_BUFFER_HEADER_FLAG_FRAME_START;
533 data += buffer->length;
534 size -= buffer->length;
536 buffer->pts = avpkt->pts == AV_NOPTS_VALUE ? MMAL_TIME_UNKNOWN : avpkt->pts;
537 buffer->dts = avpkt->dts == AV_NOPTS_VALUE ? MMAL_TIME_UNKNOWN : avpkt->dts;
540 buffer->flags |= MMAL_BUFFER_HEADER_FLAG_FRAME_END;
544 if (!buffer->length) {
545 buffer->flags |= MMAL_BUFFER_HEADER_FLAG_EOS;
550 buffer->ref = av_buffer_ref(buf);
551 if (!buffer->ref) {
552 av_free(buffer);
560 ctx->waiting_buffers = buffer;
562 ctx->waiting_buffers_tail->next = buffer;
563 ctx->waiting_buffers_tail = buffer;
578 FFBufferEntry *buffer;
585 buffer = ctx->waiting_buffers;
589 mbuffer->pts = buffer->pts;
590 mbuffer->dts = buffer->dts;
591 mbuffer->flags = buffer->flags;
592 mbuffer->data = buffer->data;
593 mbuffer->length = buffer->length;
594 mbuffer->user_data = buffer;
598 ctx->waiting_buffers = buffer->next;
599 if (ctx->waiting_buffers_tail == buffer)
604 av_buffer_unref(&buffer->ref);
605 if (buffer->flags & MMAL_BUFFER_HEADER_FLAG_FRAME_END)
607 av_free(buffer);
620 MMAL_BUFFER_HEADER_T *buffer)
635 if ((ret = ffmmal_set_ref(frame, ctx->pool_out, buffer)) < 0)
647 buffer->data + buffer->type->video.offset[0],
659 frame->pts = buffer->pts == MMAL_TIME_UNKNOWN ? AV_NOPTS_VALUE : buffer->pts;
666 // Fetch a decoded buffer and place it into the frame parameter.
670 MMAL_BUFFER_HEADER_T *buffer = NULL;
679 // and output frames, we always wait until an output buffer is available.
681 // is going to return the first buffer, and we can't distinguish decoder
683 // keep feeding new data to the buffer.
695 buffer = mmal_queue_timedwait(ctx->queue_decoded_frames, 100);
696 if (!buffer) {
702 buffer = mmal_queue_get(ctx->queue_decoded_frames);
703 if (!buffer)
707 ctx->eos_received |= !!(buffer->flags & MMAL_BUFFER_HEADER_FLAG_EOS);
711 if (buffer->cmd == MMAL_EVENT_FORMAT_CHANGED) {
713 MMAL_EVENT_FORMAT_CHANGED_T *ev = mmal_event_format_changed_get(buffer);
738 mmal_buffer_header_release(buffer);
740 } else if (buffer->cmd) {
742 av_fourcc2str(buffer->cmd));
744 } else if (buffer->length == 0) {
745 // Unused output buffer that got drained after format change.
746 mmal_buffer_header_release(buffer);
752 if ((ret = ffmal_copy_frame(avctx, frame, buffer)) < 0)
760 if (buffer)
761 mmal_buffer_header_release(buffer);