• Home
  • Raw
  • Download

Lines Matching +full:new +full:- +full:cap

5  * Copyright (C) 2017 Jorge Ramirez <jorge.ramirez-ortiz@linaro.org>
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
39 static inline int v4l2_splane_video(struct v4l2_capability *cap) in v4l2_splane_video() argument
41 if (cap->capabilities & (V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_OUTPUT) && in v4l2_splane_video()
42 cap->capabilities & V4L2_CAP_STREAMING) in v4l2_splane_video()
45 if (cap->capabilities & V4L2_CAP_VIDEO_M2M) in v4l2_splane_video()
51 static inline int v4l2_mplane_video(struct v4l2_capability *cap) in v4l2_mplane_video() argument
53 if (cap->capabilities & (V4L2_CAP_VIDEO_CAPTURE_MPLANE | V4L2_CAP_VIDEO_OUTPUT_MPLANE) && in v4l2_mplane_video()
54 cap->capabilities & V4L2_CAP_STREAMING) in v4l2_mplane_video()
57 if (cap->capabilities & V4L2_CAP_VIDEO_M2M_MPLANE) in v4l2_mplane_video()
65 struct v4l2_capability cap; in v4l2_prepare_contexts() local
66 void *log_ctx = s->avctx; in v4l2_prepare_contexts()
69 s->capture.done = s->output.done = 0; in v4l2_prepare_contexts()
70 s->capture.name = "capture"; in v4l2_prepare_contexts()
71 s->output.name = "output"; in v4l2_prepare_contexts()
72 atomic_init(&s->refcount, 0); in v4l2_prepare_contexts()
73 sem_init(&s->refsync, 0, 0); in v4l2_prepare_contexts()
75 memset(&cap, 0, sizeof(cap)); in v4l2_prepare_contexts()
76 ret = ioctl(s->fd, VIDIOC_QUERYCAP, &cap); in v4l2_prepare_contexts()
81 "driver '%s' on card '%s' in %s mode\n", cap.driver, cap.card, in v4l2_prepare_contexts()
82 v4l2_mplane_video(&cap) ? "mplane" : in v4l2_prepare_contexts()
83 v4l2_splane_video(&cap) ? "splane" : "unknown"); in v4l2_prepare_contexts()
85 if (v4l2_mplane_video(&cap)) { in v4l2_prepare_contexts()
86 s->capture.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; in v4l2_prepare_contexts()
87 s->output.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE; in v4l2_prepare_contexts()
91 if (v4l2_splane_video(&cap)) { in v4l2_prepare_contexts()
92 s->capture.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; in v4l2_prepare_contexts()
93 s->output.type = V4L2_BUF_TYPE_VIDEO_OUTPUT; in v4l2_prepare_contexts()
102 void *log_ctx = s->avctx; in v4l2_probe_driver()
105 s->fd = open(s->devname, O_RDWR | O_NONBLOCK, 0); in v4l2_probe_driver()
106 if (s->fd < 0) in v4l2_probe_driver()
113 ret = ff_v4l2_context_get_format(&s->output, 1); in v4l2_probe_driver()
119 ret = ff_v4l2_context_get_format(&s->capture, 1); in v4l2_probe_driver()
126 if (close(s->fd) < 0) { in v4l2_probe_driver()
128 …av_log(log_ctx, AV_LOG_ERROR, "failure closing %s (%s)\n", s->devname, av_err2str(AVERROR(errno))); in v4l2_probe_driver()
131 s->fd = -1; in v4l2_probe_driver()
138 void *log_ctx = s->avctx; in v4l2_configure_contexts()
142 s->fd = open(s->devname, O_RDWR | O_NONBLOCK, 0); in v4l2_configure_contexts()
143 if (s->fd < 0) in v4l2_configure_contexts()
150 ofmt = s->output.format; in v4l2_configure_contexts()
151 cfmt = s->capture.format; in v4l2_configure_contexts()
160 ret = ff_v4l2_context_set_format(&s->output); in v4l2_configure_contexts()
166 ret = ff_v4l2_context_set_format(&s->capture); in v4l2_configure_contexts()
172 ret = ff_v4l2_context_init(&s->output); in v4l2_configure_contexts()
179 if (s->avctx && !av_codec_is_decoder(s->avctx->codec)) { in v4l2_configure_contexts()
180 ret = ff_v4l2_context_init(&s->capture); in v4l2_configure_contexts()
190 if (close(s->fd) < 0) { in v4l2_configure_contexts()
193 s->devname, av_err2str(AVERROR(errno))); in v4l2_configure_contexts()
195 s->fd = -1; in v4l2_configure_contexts()
207 void *log_ctx = s->avctx; in ff_v4l2_m2m_codec_reinit()
213 ret = ff_v4l2_context_set_status(&s->capture, VIDIOC_STREAMOFF); in ff_v4l2_m2m_codec_reinit()
219 * to queue new buffers. in ff_v4l2_m2m_codec_reinit()
222 if (atomic_load(&s->refcount)) in ff_v4l2_m2m_codec_reinit()
223 while(sem_wait(&s->refsync) == -1 && errno == EINTR); in ff_v4l2_m2m_codec_reinit()
225 ff_v4l2_context_release(&s->capture); in ff_v4l2_m2m_codec_reinit()
227 /* 3. get the new capture format */ in ff_v4l2_m2m_codec_reinit()
228 ret = ff_v4l2_context_get_format(&s->capture, 0); in ff_v4l2_m2m_codec_reinit()
230 av_log(log_ctx, AV_LOG_ERROR, "query the new capture format\n"); in ff_v4l2_m2m_codec_reinit()
235 ret = ff_v4l2_context_set_format(&s->capture); in ff_v4l2_m2m_codec_reinit()
242 s->draining = 0; in ff_v4l2_m2m_codec_reinit()
243 s->reinit = 0; in ff_v4l2_m2m_codec_reinit()
250 void *log_ctx = s->avctx; in ff_v4l2_m2m_codec_full_reinit()
253 av_log(log_ctx, AV_LOG_DEBUG, "%s full reinit\n", s->devname); in ff_v4l2_m2m_codec_full_reinit()
256 if (atomic_load(&s->refcount)) in ff_v4l2_m2m_codec_full_reinit()
257 while(sem_wait(&s->refsync) == -1 && errno == EINTR); in ff_v4l2_m2m_codec_full_reinit()
259 ret = ff_v4l2_context_set_status(&s->output, VIDIOC_STREAMOFF); in ff_v4l2_m2m_codec_full_reinit()
265 ret = ff_v4l2_context_set_status(&s->capture, VIDIOC_STREAMOFF); in ff_v4l2_m2m_codec_full_reinit()
272 ff_v4l2_context_release(&s->output); in ff_v4l2_m2m_codec_full_reinit()
273 ff_v4l2_context_release(&s->capture); in ff_v4l2_m2m_codec_full_reinit()
276 s->draining = 0; in ff_v4l2_m2m_codec_full_reinit()
277 s->reinit = 0; in ff_v4l2_m2m_codec_full_reinit()
279 ret = ff_v4l2_context_get_format(&s->output, 0); in ff_v4l2_m2m_codec_full_reinit()
285 ret = ff_v4l2_context_get_format(&s->capture, 0); in ff_v4l2_m2m_codec_full_reinit()
291 ret = ff_v4l2_context_set_format(&s->output); in ff_v4l2_m2m_codec_full_reinit()
297 ret = ff_v4l2_context_set_format(&s->capture); in ff_v4l2_m2m_codec_full_reinit()
303 ret = ff_v4l2_context_init(&s->output); in ff_v4l2_m2m_codec_full_reinit()
310 if (s->avctx && !av_codec_is_decoder(s->avctx->codec)) { in ff_v4l2_m2m_codec_full_reinit()
311 ret = ff_v4l2_context_init(&s->capture); in ff_v4l2_m2m_codec_full_reinit()
328 ff_v4l2_context_release(&s->capture); in v4l2_m2m_destroy_context()
329 sem_destroy(&s->refsync); in v4l2_m2m_destroy_context()
331 close(s->fd); in v4l2_m2m_destroy_context()
332 av_frame_unref(s->frame); in v4l2_m2m_destroy_context()
333 av_frame_free(&s->frame); in v4l2_m2m_destroy_context()
334 av_packet_unref(&s->buf_pkt); in v4l2_m2m_destroy_context()
341 V4L2m2mContext *s = priv->context; in ff_v4l2_m2m_codec_end()
347 if (s->fd >= 0) { in ff_v4l2_m2m_codec_end()
348 ret = ff_v4l2_context_set_status(&s->output, VIDIOC_STREAMOFF); in ff_v4l2_m2m_codec_end()
350 av_log(s->avctx, AV_LOG_ERROR, "VIDIOC_STREAMOFF %s\n", s->output.name); in ff_v4l2_m2m_codec_end()
352 ret = ff_v4l2_context_set_status(&s->capture, VIDIOC_STREAMOFF); in ff_v4l2_m2m_codec_end()
354 av_log(s->avctx, AV_LOG_ERROR, "VIDIOC_STREAMOFF %s\n", s->capture.name); in ff_v4l2_m2m_codec_end()
357 ff_v4l2_context_release(&s->output); in ff_v4l2_m2m_codec_end()
359 s->self_ref = NULL; in ff_v4l2_m2m_codec_end()
360 av_buffer_unref(&priv->context_ref); in ff_v4l2_m2m_codec_end()
371 V4L2m2mContext *s = priv->context; in ff_v4l2_m2m_codec_init()
379 if (strncmp(entry->d_name, "video", 5)) in ff_v4l2_m2m_codec_init()
382 snprintf(s->devname, sizeof(s->devname), "/dev/%s", entry->d_name); in ff_v4l2_m2m_codec_init()
383 av_log(s->avctx, AV_LOG_DEBUG, "probing device %s\n", s->devname); in ff_v4l2_m2m_codec_init()
392 av_log(s->avctx, AV_LOG_ERROR, "Could not find a valid device\n"); in ff_v4l2_m2m_codec_init()
393 memset(s->devname, 0, sizeof(s->devname)); in ff_v4l2_m2m_codec_init()
398 av_log(s->avctx, AV_LOG_INFO, "Using device %s\n", s->devname); in ff_v4l2_m2m_codec_init()
409 priv->context_ref = av_buffer_create((uint8_t *) *s, sizeof(V4L2m2mContext), in ff_v4l2_m2m_create_context()
411 if (!priv->context_ref) { in ff_v4l2_m2m_create_context()
417 priv->context = *s; in ff_v4l2_m2m_create_context()
418 (*s)->priv = priv; in ff_v4l2_m2m_create_context()
421 priv->context->capture.num_buffers = priv->num_capture_buffers; in ff_v4l2_m2m_create_context()
422 priv->context->output.num_buffers = priv->num_output_buffers; in ff_v4l2_m2m_create_context()
423 priv->context->self_ref = priv->context_ref; in ff_v4l2_m2m_create_context()
424 priv->context->fd = -1; in ff_v4l2_m2m_create_context()
426 priv->context->frame = av_frame_alloc(); in ff_v4l2_m2m_create_context()
427 if (!priv->context->frame) { in ff_v4l2_m2m_create_context()
428 av_buffer_unref(&priv->context_ref); in ff_v4l2_m2m_create_context()