Lines Matching refs:avbuf
52 static inline AVRational v4l2_get_timebase(V4L2Buffer *avbuf) in v4l2_get_timebase() argument
54 V4L2m2mContext *s = buf_to_m2mctx(avbuf); in v4l2_get_timebase()
74 static inline int64_t v4l2_get_pts(V4L2Buffer *avbuf) in v4l2_get_pts() argument
79 v4l2_pts = (int64_t)avbuf->buf.timestamp.tv_sec * USEC_PER_SEC + in v4l2_get_pts()
80 avbuf->buf.timestamp.tv_usec; in v4l2_get_pts()
82 return av_rescale_q(v4l2_pts, v4l2_timebase, v4l2_get_timebase(avbuf)); in v4l2_get_pts()
215 V4L2Buffer* avbuf = opaque; in v4l2_free_buffer() local
216 V4L2m2mContext *s = buf_to_m2mctx(avbuf); in v4l2_free_buffer()
218 if (atomic_fetch_sub(&avbuf->context_refcount, 1) == 1) { in v4l2_free_buffer()
225 if (s->draining && V4L2_TYPE_IS_OUTPUT(avbuf->context->type)) { in v4l2_free_buffer()
227 avbuf->status = V4L2BUF_AVAILABLE; in v4l2_free_buffer()
229 else if (avbuf->context->streamon) in v4l2_free_buffer()
230 ff_v4l2_buffer_enqueue(avbuf); in v4l2_free_buffer()
233 av_buffer_unref(&avbuf->context_ref); in v4l2_free_buffer()
300 static int v4l2_buffer_buf_to_swframe(AVFrame *frame, V4L2Buffer *avbuf) in v4l2_buffer_buf_to_swframe() argument
304 frame->format = avbuf->context->av_pix_fmt; in v4l2_buffer_buf_to_swframe()
306 for (i = 0; i < avbuf->num_planes; i++) { in v4l2_buffer_buf_to_swframe()
307 ret = v4l2_buf_to_bufref(avbuf, i, &frame->buf[i]); in v4l2_buffer_buf_to_swframe()
311 frame->linesize[i] = avbuf->plane_info[i].bytesperline; in v4l2_buffer_buf_to_swframe()
316 switch (avbuf->context->av_pix_fmt) { in v4l2_buffer_buf_to_swframe()
319 if (avbuf->num_planes > 1) in v4l2_buffer_buf_to_swframe()
321 frame->linesize[1] = avbuf->plane_info[0].bytesperline; in v4l2_buffer_buf_to_swframe()
322 …frame->data[1] = frame->buf[0]->data + avbuf->plane_info[0].bytesperline * avbuf->context->format.… in v4l2_buffer_buf_to_swframe()
326 if (avbuf->num_planes > 1) in v4l2_buffer_buf_to_swframe()
328 frame->linesize[1] = avbuf->plane_info[0].bytesperline >> 1; in v4l2_buffer_buf_to_swframe()
329 frame->linesize[2] = avbuf->plane_info[0].bytesperline >> 1; in v4l2_buffer_buf_to_swframe()
330 …frame->data[1] = frame->buf[0]->data + avbuf->plane_info[0].bytesperline * avbuf->context->format.… in v4l2_buffer_buf_to_swframe()
331 …frame->data[2] = frame->data[1] + ((avbuf->plane_info[0].bytesperline * avbuf->context->format.fmt… in v4l2_buffer_buf_to_swframe()
419 int ff_v4l2_buffer_buf_to_avframe(AVFrame *frame, V4L2Buffer *avbuf) in ff_v4l2_buffer_buf_to_avframe() argument
426 ret = v4l2_buffer_buf_to_swframe(frame, avbuf); in ff_v4l2_buffer_buf_to_avframe()
431 frame->key_frame = !!(avbuf->buf.flags & V4L2_BUF_FLAG_KEYFRAME); in ff_v4l2_buffer_buf_to_avframe()
432 frame->color_primaries = v4l2_get_color_primaries(avbuf); in ff_v4l2_buffer_buf_to_avframe()
433 frame->colorspace = v4l2_get_color_space(avbuf); in ff_v4l2_buffer_buf_to_avframe()
434 frame->color_range = v4l2_get_color_range(avbuf); in ff_v4l2_buffer_buf_to_avframe()
435 frame->color_trc = v4l2_get_color_trc(avbuf); in ff_v4l2_buffer_buf_to_avframe()
436 frame->pts = v4l2_get_pts(avbuf); in ff_v4l2_buffer_buf_to_avframe()
440 frame->height = avbuf->context->height; in ff_v4l2_buffer_buf_to_avframe()
441 frame->width = avbuf->context->width; in ff_v4l2_buffer_buf_to_avframe()
442 frame->sample_aspect_ratio = avbuf->context->sample_aspect_ratio; in ff_v4l2_buffer_buf_to_avframe()
445 if (avbuf->buf.flags & V4L2_BUF_FLAG_ERROR) { in ff_v4l2_buffer_buf_to_avframe()
446 av_log(logger(avbuf), AV_LOG_ERROR, "%s: driver decode error\n", avbuf->context->name); in ff_v4l2_buffer_buf_to_avframe()
453 int ff_v4l2_buffer_buf_to_avpkt(AVPacket *pkt, V4L2Buffer *avbuf) in ff_v4l2_buffer_buf_to_avpkt() argument
458 ret = v4l2_buf_to_bufref(avbuf, 0, &pkt->buf); in ff_v4l2_buffer_buf_to_avpkt()
462 …pkt->size = V4L2_TYPE_IS_MULTIPLANAR(avbuf->buf.type) ? avbuf->buf.m.planes[0].bytesused : avbuf->… in ff_v4l2_buffer_buf_to_avpkt()
465 if (avbuf->buf.flags & V4L2_BUF_FLAG_KEYFRAME) in ff_v4l2_buffer_buf_to_avpkt()
468 if (avbuf->buf.flags & V4L2_BUF_FLAG_ERROR) { in ff_v4l2_buffer_buf_to_avpkt()
469 av_log(logger(avbuf), AV_LOG_ERROR, "%s driver encode error\n", avbuf->context->name); in ff_v4l2_buffer_buf_to_avpkt()
473 pkt->dts = pkt->pts = v4l2_get_pts(avbuf); in ff_v4l2_buffer_buf_to_avpkt()
494 int ff_v4l2_buffer_initialize(V4L2Buffer* avbuf, int index) in ff_v4l2_buffer_initialize() argument
496 V4L2Context *ctx = avbuf->context; in ff_v4l2_buffer_initialize()
499 avbuf->buf.memory = V4L2_MEMORY_MMAP; in ff_v4l2_buffer_initialize()
500 avbuf->buf.type = ctx->type; in ff_v4l2_buffer_initialize()
501 avbuf->buf.index = index; in ff_v4l2_buffer_initialize()
504 avbuf->buf.length = VIDEO_MAX_PLANES; in ff_v4l2_buffer_initialize()
505 avbuf->buf.m.planes = avbuf->planes; in ff_v4l2_buffer_initialize()
508 ret = ioctl(buf_to_m2mctx(avbuf)->fd, VIDIOC_QUERYBUF, &avbuf->buf); in ff_v4l2_buffer_initialize()
513 avbuf->num_planes = 0; in ff_v4l2_buffer_initialize()
515 for (i = 0; i < avbuf->buf.length; i++) { in ff_v4l2_buffer_initialize()
516 if (avbuf->buf.m.planes[i].length) in ff_v4l2_buffer_initialize()
517 avbuf->num_planes++; in ff_v4l2_buffer_initialize()
520 avbuf->num_planes = 1; in ff_v4l2_buffer_initialize()
522 for (i = 0; i < avbuf->num_planes; i++) { in ff_v4l2_buffer_initialize()
524 avbuf->plane_info[i].bytesperline = V4L2_TYPE_IS_MULTIPLANAR(ctx->type) ? in ff_v4l2_buffer_initialize()
529 avbuf->plane_info[i].length = avbuf->buf.m.planes[i].length; in ff_v4l2_buffer_initialize()
530 avbuf->plane_info[i].mm_addr = mmap(NULL, avbuf->buf.m.planes[i].length, in ff_v4l2_buffer_initialize()
532 … buf_to_m2mctx(avbuf)->fd, avbuf->buf.m.planes[i].m.mem_offset); in ff_v4l2_buffer_initialize()
534 avbuf->plane_info[i].length = avbuf->buf.length; in ff_v4l2_buffer_initialize()
535 avbuf->plane_info[i].mm_addr = mmap(NULL, avbuf->buf.length, in ff_v4l2_buffer_initialize()
537 buf_to_m2mctx(avbuf)->fd, avbuf->buf.m.offset); in ff_v4l2_buffer_initialize()
540 if (avbuf->plane_info[i].mm_addr == MAP_FAILED) in ff_v4l2_buffer_initialize()
544 avbuf->status = V4L2BUF_AVAILABLE; in ff_v4l2_buffer_initialize()
550 avbuf->buf.m.planes = avbuf->planes; in ff_v4l2_buffer_initialize()
551 avbuf->buf.length = avbuf->num_planes; in ff_v4l2_buffer_initialize()
554 avbuf->buf.bytesused = avbuf->planes[0].bytesused; in ff_v4l2_buffer_initialize()
555 avbuf->buf.length = avbuf->planes[0].length; in ff_v4l2_buffer_initialize()
558 return ff_v4l2_buffer_enqueue(avbuf); in ff_v4l2_buffer_initialize()
561 int ff_v4l2_buffer_enqueue(V4L2Buffer* avbuf) in ff_v4l2_buffer_enqueue() argument
565 avbuf->buf.flags = avbuf->flags; in ff_v4l2_buffer_enqueue()
567 ret = ioctl(buf_to_m2mctx(avbuf)->fd, VIDIOC_QBUF, &avbuf->buf); in ff_v4l2_buffer_enqueue()
571 avbuf->status = V4L2BUF_IN_DRIVER; in ff_v4l2_buffer_enqueue()