static int dv1394_read_header(AVFormatContext * context, AVFormatParameters * ap) { struct dv1394_data *dv = context->priv_data; const char *video_device; dv->dv_demux = dv_init_demux(context); if (!dv->dv_demux) goto failed; if (ap->standard && !strcasecmp(ap->standard, "pal")) dv->format = DV1394_PAL; else dv->format = DV1394_NTSC; if (ap->channel) dv->channel = ap->channel; else dv->channel = DV1394_DEFAULT_CHANNEL; /* Open and initialize DV1394 device */ video_device = ap->device; if (!video_device) video_device = "/dev/dv1394/0"; dv->fd = open(video_device, O_RDONLY); if (dv->fd < 0) { perror("Failed to open DV interface"); goto failed; } if (dv1394_reset(dv) < 0) { perror("Failed to initialize DV interface"); goto failed; } dv->ring = mmap(NULL, DV1394_PAL_FRAME_SIZE * DV1394_RING_FRAMES, PROT_READ, MAP_PRIVATE, dv->fd, 0); if (dv->ring == MAP_FAILED) { perror("Failed to mmap DV ring buffer"); goto failed; } if (dv1394_start(dv) < 0) goto failed; return 0; failed: close(dv->fd); return AVERROR_IO; }
static int dv1394_read_header(AVFormatContext * context, AVFormatParameters * ap) { struct dv1394_data *dv = context->priv_data; dv->dv_demux = dv_init_demux(context); if (!dv->dv_demux) goto failed; if (ap->standard && !strcasecmp(ap->standard, "pal")) dv->format = DV1394_PAL; else dv->format = DV1394_NTSC; if (ap->channel) dv->channel = ap->channel; else dv->channel = DV1394_DEFAULT_CHANNEL; /* Open and initialize DV1394 device */ dv->fd = open(context->filename, O_RDONLY); if (dv->fd < 0) { av_log(context, AV_LOG_ERROR, "Failed to open DV interface: %s\n", strerror(errno)); goto failed; } if (dv1394_reset(dv) < 0) { av_log(context, AV_LOG_ERROR, "Failed to initialize DV interface: %s\n", strerror(errno)); goto failed; } dv->ring = mmap(NULL, DV1394_PAL_FRAME_SIZE * DV1394_RING_FRAMES, PROT_READ, MAP_PRIVATE, dv->fd, 0); if (dv->ring == MAP_FAILED) { av_log(context, AV_LOG_ERROR, "Failed to mmap DV ring buffer: %s\n", strerror(errno)); goto failed; } if (dv1394_start(dv) < 0) goto failed; return 0; failed: close(dv->fd); return AVERROR(EIO); }