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
6a583261
Commit
6a583261
authored
Nov 17, 2018
by
Martin Vignali
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avcodec/proresdec : add 12b prores idct
based on patch by Kieran Kunhya
parent
fddc92d4
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
45 additions
and
3 deletions
+45
-3
proresdsp.c
libavcodec/proresdsp.c
+28
-3
simple_idct.c
libavcodec/simple_idct.c
+16
-0
simple_idct.h
libavcodec/simple_idct.h
+1
-0
No files found.
libavcodec/proresdsp.c
View file @
6a583261
...
@@ -29,36 +29,61 @@
...
@@ -29,36 +29,61 @@
#define CLIP_MIN (1 << 2) ///< minimum value for clipping resulting pixels
#define CLIP_MIN (1 << 2) ///< minimum value for clipping resulting pixels
#define CLIP_MAX_10 (1 << 10) - CLIP_MIN - 1 ///< maximum value for clipping resulting pixels
#define CLIP_MAX_10 (1 << 10) - CLIP_MIN - 1 ///< maximum value for clipping resulting pixels
#define CLIP_MAX_12 (1 << 12) - CLIP_MIN - 1 ///< maximum value for clipping resulting pixels
#define CLIP_10(x) (av_clip((x), CLIP_MIN, CLIP_MAX_10))
#define CLIP_10(x) (av_clip((x), CLIP_MIN, CLIP_MAX_10))
#define CLIP_12(x) (av_clip((x), CLIP_MIN, CLIP_MAX_12))
/**
/**
* Add bias value, clamp and output pixels of a slice
* Add bias value, clamp and output pixels of a slice
*/
*/
static
void
put_pixels_10
(
uint16_t
*
dst
,
ptrdiff_t
linesize
,
const
int16_t
*
in
)
{
static
inline
void
put_pixel
(
uint16_t
*
dst
,
ptrdiff_t
linesize
,
const
int16_t
*
in
,
int
bits_per_raw_sample
)
{
int
x
,
y
,
src_offset
,
dst_offset
;
int
x
,
y
,
src_offset
,
dst_offset
;
for
(
y
=
0
,
dst_offset
=
0
;
y
<
8
;
y
++
,
dst_offset
+=
linesize
)
{
for
(
y
=
0
,
dst_offset
=
0
;
y
<
8
;
y
++
,
dst_offset
+=
linesize
)
{
for
(
x
=
0
;
x
<
8
;
x
++
)
{
for
(
x
=
0
;
x
<
8
;
x
++
)
{
src_offset
=
(
y
<<
3
)
+
x
;
src_offset
=
(
y
<<
3
)
+
x
;
dst
[
dst_offset
+
x
]
=
CLIP_10
(
in
[
src_offset
]);
if
(
bits_per_raw_sample
==
10
)
{
dst
[
dst_offset
+
x
]
=
CLIP_10
(
in
[
src_offset
]);
}
else
{
//12b
dst
[
dst_offset
+
x
]
=
CLIP_12
(
in
[
src_offset
]);
}
}
}
}
}
}
}
static
void
put_pixels_10
(
uint16_t
*
dst
,
ptrdiff_t
linesize
,
const
int16_t
*
in
)
{
put_pixel
(
dst
,
linesize
,
in
,
10
);
}
static
void
put_pixels_12
(
uint16_t
*
dst
,
ptrdiff_t
linesize
,
const
int16_t
*
in
)
{
put_pixel
(
dst
,
linesize
,
in
,
12
);
}
static
void
prores_idct_put_10_c
(
uint16_t
*
out
,
ptrdiff_t
linesize
,
int16_t
*
block
,
const
int16_t
*
qmat
)
static
void
prores_idct_put_10_c
(
uint16_t
*
out
,
ptrdiff_t
linesize
,
int16_t
*
block
,
const
int16_t
*
qmat
)
{
{
ff_prores_idct_10
(
block
,
qmat
);
ff_prores_idct_10
(
block
,
qmat
);
put_pixels_10
(
out
,
linesize
>>
1
,
block
);
put_pixels_10
(
out
,
linesize
>>
1
,
block
);
}
}
static
void
prores_idct_put_12_c
(
uint16_t
*
out
,
ptrdiff_t
linesize
,
int16_t
*
block
,
const
int16_t
*
qmat
)
{
ff_prores_idct_12
(
block
,
qmat
);
put_pixels_12
(
out
,
linesize
>>
1
,
block
);
}
av_cold
int
ff_proresdsp_init
(
ProresDSPContext
*
dsp
,
AVCodecContext
*
avctx
)
av_cold
int
ff_proresdsp_init
(
ProresDSPContext
*
dsp
,
AVCodecContext
*
avctx
)
{
{
if
(
avctx
->
bits_per_raw_sample
==
10
)
{
if
(
avctx
->
bits_per_raw_sample
==
10
)
{
dsp
->
idct_put
=
prores_idct_put_10_c
;
dsp
->
idct_put
=
prores_idct_put_10_c
;
dsp
->
idct_permutation_type
=
FF_IDCT_PERM_NONE
;
dsp
->
idct_permutation_type
=
FF_IDCT_PERM_NONE
;
}
else
if
(
avctx
->
bits_per_raw_sample
==
12
)
{
dsp
->
idct_put
=
prores_idct_put_12_c
;
dsp
->
idct_permutation_type
=
FF_IDCT_PERM_NONE
;
}
else
{
}
else
{
return
AVERROR_BUG
;
return
AVERROR_BUG
;
}
}
...
...
libavcodec/simple_idct.c
View file @
6a583261
...
@@ -251,3 +251,19 @@ void ff_prores_idct_10(int16_t *block, const int16_t *qmat)
...
@@ -251,3 +251,19 @@ void ff_prores_idct_10(int16_t *block, const int16_t *qmat)
idctSparseCol_extrashift_10
(
block
+
i
);
idctSparseCol_extrashift_10
(
block
+
i
);
}
}
}
}
void
ff_prores_idct_12
(
int16_t
*
block
,
const
int16_t
*
qmat
)
{
int
i
;
for
(
i
=
0
;
i
<
64
;
i
++
)
block
[
i
]
*=
qmat
[
i
];
for
(
i
=
0
;
i
<
8
;
i
++
)
idctRowCondDC_int16_12bit
(
block
+
i
*
8
,
0
);
for
(
i
=
0
;
i
<
8
;
i
++
)
{
block
[
i
]
+=
8192
;
idctSparseCol_int16_12bit
(
block
+
i
);
}
}
libavcodec/simple_idct.h
View file @
6a583261
...
@@ -53,6 +53,7 @@ void ff_simple_idct_int16_12bit(int16_t *block);
...
@@ -53,6 +53,7 @@ void ff_simple_idct_int16_12bit(int16_t *block);
* for larger scale of input coefficients.
* for larger scale of input coefficients.
*/
*/
void
ff_prores_idct_10
(
int16_t
*
block
,
const
int16_t
*
qmat
);
void
ff_prores_idct_10
(
int16_t
*
block
,
const
int16_t
*
qmat
);
void
ff_prores_idct_12
(
int16_t
*
block
,
const
int16_t
*
qmat
);
void
ff_simple_idct248_put
(
uint8_t
*
dest
,
ptrdiff_t
line_size
,
int16_t
*
block
);
void
ff_simple_idct248_put
(
uint8_t
*
dest
,
ptrdiff_t
line_size
,
int16_t
*
block
);
...
...
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