Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
279ff8d2
Commit
279ff8d2
authored
Apr 27, 2014
by
Lukasz Marek
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavd/fbdev_enc: move list device code to fbdev_common
Signed-off-by:
Lukasz Marek
<
lukasz.m.luki2@gmail.com
>
parent
3050e53f
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
67 additions
and
55 deletions
+67
-55
fbdev_common.c
libavdevice/fbdev_common.c
+62
-0
fbdev_common.h
libavdevice/fbdev_common.h
+4
-0
fbdev_enc.c
libavdevice/fbdev_enc.c
+1
-55
No files found.
libavdevice/fbdev_common.c
View file @
279ff8d2
...
...
@@ -20,9 +20,13 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <stdlib.h>
#include "fbdev_common.h"
#include "libavutil/common.h"
#include "avdevice.h"
struct
rgb_pixfmt_map_entry
{
int
bits_per_pixel
;
...
...
@@ -65,3 +69,61 @@ const char* ff_fbdev_default_device()
return
dev
;
}
int
ff_fbdev_get_device_list
(
AVDeviceInfoList
*
device_list
)
{
struct
fb_var_screeninfo
varinfo
;
struct
fb_fix_screeninfo
fixinfo
;
char
device_file
[
12
];
AVDeviceInfo
*
device
=
NULL
;
int
i
,
fd
,
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
;
}
close
(
fd
);
continue
;
fail_device:
if
(
device
)
{
av_free
(
device
->
device_name
);
av_free
(
device
->
device_description
);
av_freep
(
&
device
);
}
if
(
fd
>=
0
)
close
(
fd
);
if
(
ret
<
0
)
return
ret
;
}
return
0
;
}
libavdevice/fbdev_common.h
View file @
279ff8d2
...
...
@@ -27,8 +27,12 @@
#include <linux/fb.h>
#include "libavutil/pixfmt.h"
struct
AVDeviceInfoList
;
enum
AVPixelFormat
ff_get_pixfmt_from_fb_varinfo
(
struct
fb_var_screeninfo
*
varinfo
);
const
char
*
ff_fbdev_default_device
(
void
);
int
ff_fbdev_get_device_list
(
struct
AVDeviceInfoList
*
device_list
);
#endif
/* AVDEVICE_FBDEV_COMMON_H */
libavdevice/fbdev_enc.c
View file @
279ff8d2
...
...
@@ -186,61 +186,7 @@ static av_cold int fbdev_write_trailer(AVFormatContext *h)
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
,
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
;
}
close
(
fd
);
continue
;
fail_device:
if
(
device
)
{
av_free
(
device
->
device_name
);
av_free
(
device
->
device_description
);
av_freep
(
&
device
);
}
if
(
fd
>=
0
)
close
(
fd
);
if
(
ret
<
0
)
return
ret
;
}
return
0
;
return
ff_fbdev_get_device_list
(
device_list
);
}
#define OFFSET(x) offsetof(FBDevContext, x)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment