[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