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
b9d25b1a
Commit
b9d25b1a
authored
Apr 19, 2019
by
Paul B Mahol
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avfilter/vf_lut3d: add cineSpace 1D lut parsing
parent
bf4245e9
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
79 additions
and
0 deletions
+79
-0
filters.texi
doc/filters.texi
+2
-0
vf_lut3d.c
libavfilter/vf_lut3d.c
+77
-0
No files found.
doc/filters.texi
View file @
b9d25b1a
...
@@ -11671,6 +11671,8 @@ Currently supported formats:
...
@@ -11671,6 +11671,8 @@ Currently supported formats:
@table @samp
@table @samp
@item cube
@item cube
Iridas
Iridas
@item csp
cineSpace
@end table
@end table
@item interp
@item interp
...
...
libavfilter/vf_lut3d.c
View file @
b9d25b1a
...
@@ -1019,6 +1019,81 @@ static void set_identity_matrix_1d(LUT1DContext *lut1d, int size)
...
@@ -1019,6 +1019,81 @@ static void set_identity_matrix_1d(LUT1DContext *lut1d, int size)
}
}
}
}
static
int
parse_cinespace_1d
(
AVFilterContext
*
ctx
,
FILE
*
f
)
{
LUT1DContext
*
lut1d
=
ctx
->
priv
;
char
line
[
MAX_LINE_SIZE
];
float
in_min
[
3
]
=
{
0
.
0
,
0
.
0
,
0
.
0
};
float
in_max
[
3
]
=
{
1
.
0
,
1
.
0
,
1
.
0
};
float
out_min
[
3
]
=
{
0
.
0
,
0
.
0
,
0
.
0
};
float
out_max
[
3
]
=
{
1
.
0
,
1
.
0
,
1
.
0
};
int
inside_metadata
=
0
,
size
;
NEXT_LINE
(
skip_line
(
line
));
if
(
strncmp
(
line
,
"CSPLUTV100"
,
10
))
{
av_log
(
ctx
,
AV_LOG_ERROR
,
"Not cineSpace LUT format
\n
"
);
return
AVERROR
(
EINVAL
);
}
NEXT_LINE
(
skip_line
(
line
));
if
(
strncmp
(
line
,
"1D"
,
2
))
{
av_log
(
ctx
,
AV_LOG_ERROR
,
"Not 1D LUT format
\n
"
);
return
AVERROR
(
EINVAL
);
}
while
(
1
)
{
NEXT_LINE
(
skip_line
(
line
));
if
(
!
strncmp
(
line
,
"BEGIN METADATA"
,
14
))
{
inside_metadata
=
1
;
continue
;
}
if
(
!
strncmp
(
line
,
"END METADATA"
,
12
))
{
inside_metadata
=
0
;
continue
;
}
if
(
inside_metadata
==
0
)
{
for
(
int
i
=
0
;
i
<
3
;
i
++
)
{
int
npoints
=
strtol
(
line
,
NULL
,
0
);
if
(
npoints
!=
2
)
{
av_log
(
ctx
,
AV_LOG_ERROR
,
"Unsupported number of pre-lut points.
\n
"
);
return
AVERROR_PATCHWELCOME
;
}
NEXT_LINE
(
skip_line
(
line
));
if
(
av_sscanf
(
line
,
"%f %f"
,
&
in_min
[
i
],
&
in_max
[
i
])
!=
2
)
return
AVERROR_INVALIDDATA
;
NEXT_LINE
(
skip_line
(
line
));
if
(
av_sscanf
(
line
,
"%f %f"
,
&
out_min
[
i
],
&
out_max
[
i
])
!=
2
)
return
AVERROR_INVALIDDATA
;
NEXT_LINE
(
skip_line
(
line
));
}
size
=
strtol
(
line
,
NULL
,
0
);
if
(
size
<
2
||
size
>
MAX_1D_LEVEL
)
{
av_log
(
ctx
,
AV_LOG_ERROR
,
"Too large or invalid 1D LUT size
\n
"
);
return
AVERROR
(
EINVAL
);
}
lut1d
->
lutsize
=
size
;
for
(
int
i
=
0
;
i
<
size
;
i
++
)
{
NEXT_LINE
(
skip_line
(
line
));
if
(
av_sscanf
(
line
,
"%f %f %f"
,
&
lut1d
->
lut
[
0
][
i
],
&
lut1d
->
lut
[
1
][
i
],
&
lut1d
->
lut
[
2
][
i
])
!=
3
)
return
AVERROR_INVALIDDATA
;
lut1d
->
lut
[
0
][
i
]
*=
out_max
[
0
]
-
out_min
[
0
];
lut1d
->
lut
[
1
][
i
]
*=
out_max
[
1
]
-
out_min
[
1
];
lut1d
->
lut
[
2
][
i
]
*=
out_max
[
2
]
-
out_min
[
2
];
}
break
;
}
}
return
0
;
}
static
int
parse_cube_1d
(
AVFilterContext
*
ctx
,
FILE
*
f
)
static
int
parse_cube_1d
(
AVFilterContext
*
ctx
,
FILE
*
f
)
{
{
LUT1DContext
*
lut1d
=
ctx
->
priv
;
LUT1DContext
*
lut1d
=
ctx
->
priv
;
...
@@ -1400,6 +1475,8 @@ static av_cold int lut1d_init(AVFilterContext *ctx)
...
@@ -1400,6 +1475,8 @@ static av_cold int lut1d_init(AVFilterContext *ctx)
if
(
!
av_strcasecmp
(
ext
,
"cube"
)
||
!
av_strcasecmp
(
ext
,
"1dlut"
))
{
if
(
!
av_strcasecmp
(
ext
,
"cube"
)
||
!
av_strcasecmp
(
ext
,
"1dlut"
))
{
ret
=
parse_cube_1d
(
ctx
,
f
);
ret
=
parse_cube_1d
(
ctx
,
f
);
}
else
if
(
!
av_strcasecmp
(
ext
,
"csp"
))
{
ret
=
parse_cinespace_1d
(
ctx
,
f
);
}
else
{
}
else
{
av_log
(
ctx
,
AV_LOG_ERROR
,
"Unrecognized '.%s' file type
\n
"
,
ext
);
av_log
(
ctx
,
AV_LOG_ERROR
,
"Unrecognized '.%s' file type
\n
"
,
ext
);
ret
=
AVERROR
(
EINVAL
);
ret
=
AVERROR
(
EINVAL
);
...
...
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