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
3d8d8c71
Commit
3d8d8c71
authored
Dec 02, 2018
by
Paul B Mahol
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avcodec/r210: use correct pixel format
parent
42d5b59b
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
48 additions
and
40 deletions
+48
-40
r210dec.c
libavcodec/r210dec.c
+20
-18
r210enc.c
libavcodec/r210enc.c
+16
-10
vsynth1-r210
tests/ref/vsynth/vsynth1-r210
+3
-3
vsynth2-r210
tests/ref/vsynth/vsynth2-r210
+3
-3
vsynth3-r210
tests/ref/vsynth/vsynth3-r210
+3
-3
vsynth_lena-r210
tests/ref/vsynth/vsynth_lena-r210
+3
-3
No files found.
libavcodec/r210dec.c
View file @
3d8d8c71
...
...
@@ -27,11 +27,7 @@
static
av_cold
int
decode_init
(
AVCodecContext
*
avctx
)
{
if
((
avctx
->
codec_tag
&
0xFFFFFF
)
==
MKTAG
(
'r'
,
'1'
,
'0'
,
0
))
{
avctx
->
pix_fmt
=
AV_PIX_FMT_BGR48
;
}
else
{
avctx
->
pix_fmt
=
AV_PIX_FMT_RGB48
;
}
avctx
->
pix_fmt
=
AV_PIX_FMT_GBRP10
;
avctx
->
bits_per_raw_sample
=
10
;
return
0
;
...
...
@@ -45,7 +41,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
const
uint32_t
*
src
=
(
const
uint32_t
*
)
avpkt
->
data
;
int
aligned_width
=
FFALIGN
(
avctx
->
width
,
avctx
->
codec_id
==
AV_CODEC_ID_R10K
?
1
:
64
);
uint8_t
*
dst
_line
;
uint8_t
*
g_line
,
*
b_line
,
*
r
_line
;
int
r10
=
(
avctx
->
codec_tag
&
0xFFFFFF
)
==
MKTAG
(
'r'
,
'1'
,
'0'
,
0
);
int
le
=
avctx
->
codec_tag
==
MKTAG
(
'R'
,
'1'
,
'0'
,
'k'
)
&&
avctx
->
extradata_size
>=
12
&&
!
memcmp
(
&
avctx
->
extradata
[
4
],
"DpxE"
,
4
)
&&
...
...
@@ -61,10 +57,14 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
pic
->
pict_type
=
AV_PICTURE_TYPE_I
;
pic
->
key_frame
=
1
;
dst_line
=
pic
->
data
[
0
];
g_line
=
pic
->
data
[
0
];
b_line
=
pic
->
data
[
1
];
r_line
=
pic
->
data
[
2
];
for
(
h
=
0
;
h
<
avctx
->
height
;
h
++
)
{
uint16_t
*
dst
=
(
uint16_t
*
)
dst_line
;
uint16_t
*
dstg
=
(
uint16_t
*
)
g_line
;
uint16_t
*
dstb
=
(
uint16_t
*
)
b_line
;
uint16_t
*
dstr
=
(
uint16_t
*
)
r_line
;
for
(
w
=
0
;
w
<
avctx
->
width
;
w
++
)
{
uint32_t
pixel
;
uint16_t
r
,
g
,
b
;
...
...
@@ -74,20 +74,22 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
pixel
=
av_be2ne32
(
*
src
++
);
}
if
(
avctx
->
codec_id
==
AV_CODEC_ID_R210
||
r10
)
{
b
=
pixel
<<
6
;
g
=
(
pixel
>>
4
)
&
0xffc0
;
r
=
(
pixel
>>
14
)
&
0xffc0
;
b
=
pixel
&
0x3ff
;
g
=
(
pixel
>>
10
)
&
0x3ff
;
r
=
(
pixel
>>
20
)
&
0x3ff
;
}
else
{
b
=
(
pixel
<<
4
)
&
0xffc0
;
g
=
(
pixel
>>
6
)
&
0xffc0
;
r
=
(
pixel
>>
16
)
&
0xffc0
;
b
=
(
pixel
>>
2
)
&
0x3ff
;
g
=
(
pixel
>>
12
)
&
0x3ff
;
r
=
(
pixel
>>
22
)
&
0x3ff
;
}
*
dst
++
=
r
|
(
r
>>
10
)
;
*
dst
++
=
g
|
(
g
>>
10
)
;
*
dst
++
=
b
|
(
b
>>
10
)
;
*
dst
r
++
=
r
;
*
dst
g
++
=
g
;
*
dst
b
++
=
b
;
}
src
+=
aligned_width
-
avctx
->
width
;
dst_line
+=
pic
->
linesize
[
0
];
g_line
+=
pic
->
linesize
[
0
];
b_line
+=
pic
->
linesize
[
1
];
r_line
+=
pic
->
linesize
[
2
];
}
*
got_frame
=
1
;
...
...
libavcodec/r210enc.c
View file @
3d8d8c71
...
...
@@ -43,22 +43,26 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
int
aligned_width
=
FFALIGN
(
avctx
->
width
,
avctx
->
codec_id
==
AV_CODEC_ID_R10K
?
1
:
64
);
int
pad
=
(
aligned_width
-
avctx
->
width
)
*
4
;
uint8_t
*
src_line
;
uint8_t
*
src
r_line
,
*
srcg_line
,
*
srcb
_line
;
uint8_t
*
dst
;
if
((
ret
=
ff_alloc_packet2
(
avctx
,
pkt
,
4
*
aligned_width
*
avctx
->
height
,
0
))
<
0
)
return
ret
;
src_line
=
pic
->
data
[
0
];
srcg_line
=
pic
->
data
[
0
];
srcb_line
=
pic
->
data
[
1
];
srcr_line
=
pic
->
data
[
2
];
dst
=
pkt
->
data
;
for
(
i
=
0
;
i
<
avctx
->
height
;
i
++
)
{
uint16_t
*
src
=
(
uint16_t
*
)
src_line
;
uint16_t
*
srcr
=
(
uint16_t
*
)
srcr_line
;
uint16_t
*
srcg
=
(
uint16_t
*
)
srcg_line
;
uint16_t
*
srcb
=
(
uint16_t
*
)
srcb_line
;
for
(
j
=
0
;
j
<
avctx
->
width
;
j
++
)
{
uint32_t
pixel
;
uint16_t
r
=
*
src
++
>>
6
;
uint16_t
g
=
*
src
++
>>
6
;
uint16_t
b
=
*
src
++
>>
6
;
uint16_t
r
=
*
src
r
++
;
uint16_t
g
=
*
src
g
++
;
uint16_t
b
=
*
src
b
++
;
if
(
avctx
->
codec_id
==
AV_CODEC_ID_R210
)
pixel
=
(
r
<<
20
)
|
(
g
<<
10
)
|
b
;
else
...
...
@@ -70,7 +74,9 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
}
memset
(
dst
,
0
,
pad
);
dst
+=
pad
;
src_line
+=
pic
->
linesize
[
0
];
srcr_line
+=
pic
->
linesize
[
2
];
srcg_line
+=
pic
->
linesize
[
0
];
srcb_line
+=
pic
->
linesize
[
1
];
}
pkt
->
flags
|=
AV_PKT_FLAG_KEY
;
...
...
@@ -87,7 +93,7 @@ AVCodec ff_r210_encoder = {
.
id
=
AV_CODEC_ID_R210
,
.
init
=
encode_init
,
.
encode2
=
encode_frame
,
.
pix_fmts
=
(
const
enum
AVPixelFormat
[])
{
AV_PIX_FMT_
RGB48
,
AV_PIX_FMT_NONE
},
.
pix_fmts
=
(
const
enum
AVPixelFormat
[])
{
AV_PIX_FMT_
GBRP10
,
AV_PIX_FMT_NONE
},
.
capabilities
=
AV_CODEC_CAP_INTRA_ONLY
,
};
#endif
...
...
@@ -99,7 +105,7 @@ AVCodec ff_r10k_encoder = {
.
id
=
AV_CODEC_ID_R10K
,
.
init
=
encode_init
,
.
encode2
=
encode_frame
,
.
pix_fmts
=
(
const
enum
AVPixelFormat
[])
{
AV_PIX_FMT_
RGB48
,
AV_PIX_FMT_NONE
},
.
pix_fmts
=
(
const
enum
AVPixelFormat
[])
{
AV_PIX_FMT_
GBRP10
,
AV_PIX_FMT_NONE
},
.
capabilities
=
AV_CODEC_CAP_INTRA_ONLY
,
};
#endif
...
...
@@ -111,7 +117,7 @@ AVCodec ff_avrp_encoder = {
.
id
=
AV_CODEC_ID_AVRP
,
.
init
=
encode_init
,
.
encode2
=
encode_frame
,
.
pix_fmts
=
(
const
enum
AVPixelFormat
[])
{
AV_PIX_FMT_
RGB48
,
AV_PIX_FMT_NONE
},
.
pix_fmts
=
(
const
enum
AVPixelFormat
[])
{
AV_PIX_FMT_
GBRP10
,
AV_PIX_FMT_NONE
},
.
capabilities
=
AV_CODEC_CAP_INTRA_ONLY
,
};
#endif
tests/ref/vsynth/vsynth1-r210
View file @
3d8d8c71
1
ea72f280b110ed65fc535c3438d27f9
*tests/data/fate/vsynth1-r210.avi
1
a522a30ddd8c2865a731a5659001717
*tests/data/fate/vsynth1-r210.avi
22125252 tests/data/fate/vsynth1-r210.avi
ecaafa9eec11b5e1453a63ed6d194eed
*tests/data/fate/vsynth1-r210.out.rawvideo
stddev: 3.
23 PSNR: 37.94
MAXDIFF: 48 bytes: 7603200/ 7603200
b6444935d6c4d8c75fe63d5978f5b457
*tests/data/fate/vsynth1-r210.out.rawvideo
stddev: 3.
73 PSNR: 36.68
MAXDIFF: 48 bytes: 7603200/ 7603200
tests/ref/vsynth/vsynth2-r210
View file @
3d8d8c71
2f928096d892ce0239832afc369e117c
*tests/data/fate/vsynth2-r210.avi
9a27c0c96f9e658d610d2590b61416a1
*tests/data/fate/vsynth2-r210.avi
22125252 tests/data/fate/vsynth2-r210.avi
2ade5f6167d7a4a1589e168ddbbc35d0
*tests/data/fate/vsynth2-r210.out.rawvideo
stddev: 1.
17 PSNR: 46.71 MAXDIFF: 15
bytes: 7603200/ 7603200
d43196c64fd611f6e9c046e0ef3e570e
*tests/data/fate/vsynth2-r210.out.rawvideo
stddev: 1.
37 PSNR: 45.34 MAXDIFF: 14
bytes: 7603200/ 7603200
tests/ref/vsynth/vsynth3-r210
View file @
3d8d8c71
229e700e0fab4e81481e99a70e00bec9
*tests/data/fate/vsynth3-r210.avi
fd12f6dde75d0872ccf9012b342208de
*tests/data/fate/vsynth3-r210.avi
442052 tests/data/fate/vsynth3-r210.avi
e1d882babc8754f7418aa91ce48f7ab0
*tests/data/fate/vsynth3-r210.out.rawvideo
stddev:
3.48 PSNR: 37.28 MAXDIFF: 42
bytes: 86700/ 86700
a2c4e460ebede1109bd794b1b7b05a1f
*tests/data/fate/vsynth3-r210.out.rawvideo
stddev:
4.10 PSNR: 35.87 MAXDIFF: 48
bytes: 86700/ 86700
tests/ref/vsynth/vsynth_lena-r210
View file @
3d8d8c71
94874a48987fd401494f4d7ca8e1273b
*tests/data/fate/vsynth_lena-r210.avi
61fd53566d99b725e75212747b35893f
*tests/data/fate/vsynth_lena-r210.avi
22125252 tests/data/fate/vsynth_lena-r210.avi
6ea4fcd93fc83defc8770e85b64b60bb
*tests/data/fate/vsynth_lena-r210.out.rawvideo
stddev: 0.
70 PSNR: 51.12 MAXDIFF: 12
bytes: 7603200/ 7603200
4b7425191bb6a7fc4ca0dc649d9ba202
*tests/data/fate/vsynth_lena-r210.out.rawvideo
stddev: 0.
93 PSNR: 48.72 MAXDIFF: 11
bytes: 7603200/ 7603200
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