Use device specified by environment variable FRAMEBUFFER or /dev/fb0 as default.
Signed-off-by: Lukasz Marek <lukasz.m.luki@gmail.com>
... | ... |
@@ -20,6 +20,7 @@ |
20 | 20 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
21 | 21 |
*/ |
22 | 22 |
|
23 |
+#include <stdlib.h> |
|
23 | 24 |
#include "fbdev_common.h" |
24 | 25 |
#include "libavutil/common.h" |
25 | 26 |
|
... | ... |
@@ -55,3 +56,12 @@ enum AVPixelFormat ff_get_pixfmt_from_fb_varinfo(struct fb_var_screeninfo *varin |
55 | 55 |
|
56 | 56 |
return AV_PIX_FMT_NONE; |
57 | 57 |
} |
58 |
+ |
|
59 |
+const char* ff_fbdev_default_device() |
|
60 |
+{ |
|
61 |
+ const char *dev = getenv("FRAMEBUFFER"); |
|
62 |
+ if (!dev) |
|
63 |
+ dev = "/dev/fb0"; |
|
64 |
+ return dev; |
|
65 |
+} |
|
66 |
+ |
... | ... |
@@ -45,17 +45,23 @@ static av_cold int fbdev_write_header(AVFormatContext *h) |
45 | 45 |
FBDevContext *fbdev = h->priv_data; |
46 | 46 |
enum AVPixelFormat pix_fmt; |
47 | 47 |
int ret, flags = O_RDWR; |
48 |
+ const char* device; |
|
48 | 49 |
|
49 | 50 |
if (h->nb_streams != 1 || h->streams[0]->codec->codec_type != AVMEDIA_TYPE_VIDEO) { |
50 | 51 |
av_log(fbdev, AV_LOG_ERROR, "Only a single video stream is supported.\n"); |
51 | 52 |
return AVERROR(EINVAL); |
52 | 53 |
} |
53 | 54 |
|
54 |
- if ((fbdev->fd = avpriv_open(h->filename, flags)) == -1) { |
|
55 |
+ if (h->filename[0]) |
|
56 |
+ device = h->filename; |
|
57 |
+ else |
|
58 |
+ device = ff_fbdev_default_device(); |
|
59 |
+ |
|
60 |
+ if ((fbdev->fd = avpriv_open(device, flags)) == -1) { |
|
55 | 61 |
ret = AVERROR(errno); |
56 | 62 |
av_log(h, AV_LOG_ERROR, |
57 | 63 |
"Could not open framebuffer device '%s': %s\n", |
58 |
- h->filename, av_err2str(ret)); |
|
64 |
+ device, av_err2str(ret)); |
|
59 | 65 |
return ret; |
60 | 66 |
} |
61 | 67 |
|