[FFmpeg-cvslog] lavd/fbdev_enc: implement get_device_list
Michael Niedermayer
michaelni at gmx.at
Sun Apr 27 03:32:46 CEST 2014
On Sun, Apr 13, 2014 at 01:19:25AM +0200, Lukasz Marek wrote:
> ffmpeg | branch: master | Lukasz Marek <lukasz.m.luki2 at gmail.com> | Sat Apr 12 19:25:33 2014 +0200| [afc898e7ce00c184827f507f72ea59f6abac2403] | committer: Lukasz Marek
>
> lavd/fbdev_enc: implement get_device_list
>
> Signed-off-by: Lukasz Marek <lukasz.m.luki2 at gmail.com>
>
> > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=afc898e7ce00c184827f507f72ea59f6abac2403
> ---
>
> libavdevice/fbdev_enc.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 63 insertions(+)
>
> diff --git a/libavdevice/fbdev_enc.c b/libavdevice/fbdev_enc.c
> index 0fd1c66..2042c96 100644
> --- a/libavdevice/fbdev_enc.c
> +++ b/libavdevice/fbdev_enc.c
> @@ -29,6 +29,7 @@
> #include "libavutil/opt.h"
> #include "libavformat/avformat.h"
> #include "fbdev_common.h"
> +#include "avdevice.h"
>
> typedef struct {
> AVClass *class; ///< class for private options
> @@ -183,6 +184,67 @@ static av_cold int fbdev_write_trailer(AVFormatContext *h)
> return 0;
> }
>
> +static int fbdev_get_device_list(AVFormatContext *s, AVDeviceInfoList *device_list)
> +{
> + struct fb_var_screeninfo varinfo;
> + struct fb_fix_screeninfo fixinfo;
> + char device_file[12];
> + AVDeviceInfo *device = NULL;
> + int i, fd = -1, ret = 0;
> + const char *default_device = ff_fbdev_default_device();
> +
> + if (!device_list)
> + return AVERROR(EINVAL);
> +
> + for (i = 0; i <= 31; i++) {
> + snprintf(device_file, sizeof(device_file), "/dev/fb%d", i);
> +
> + if ((fd = avpriv_open(device_file, O_RDWR)) < 0)
> + continue;
> + if (ioctl(fd, FBIOGET_VSCREENINFO, &varinfo) == -1)
> + goto fail_device;
> + if (ioctl(fd, FBIOGET_FSCREENINFO, &fixinfo) == -1)
> + goto fail_device;
> +
> + device = av_mallocz(sizeof(AVDeviceInfo));
> + if (!device) {
> + ret = AVERROR(ENOMEM);
> + goto fail_device;
> + }
> + device->device_name = av_strdup(device_file);
> + device->device_description = av_strdup(fixinfo.id);
> + if (!device->device_name || !device->device_description) {
> + ret = AVERROR(ENOMEM);
> + goto fail_device;
> + }
> +
> + if ((ret = av_dynarray_add_nofree(&device_list->devices,
> + &device_list->nb_devices, device)) < 0)
> + goto fail_device;
> +
> + if (default_device && !strcmp(device->device_name, default_device)) {
> + device_list->default_device = device_list->nb_devices - 1;
> + default_device = NULL;
> + }
> +
> + continue;
coverity claims fd leaks here (1206651)
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
Rewriting code that is poorly written but fully understood is good.
Rewriting code that one doesnt understand is a sign that one is less smart
then the original author, trying to rewrite it will not make it better.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-cvslog/attachments/20140427/eaed4032/attachment.asc>
More information about the ffmpeg-cvslog
mailing list