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
1500be13
Commit
1500be13
authored
Mar 26, 2011
by
Alexander Strange
Committed by
Ronald S. Bultje
Mar 26, 2011
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dsputil: allow to skip drawing of top/bottom edges.
parent
c56e618b
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
70 additions
and
52 deletions
+70
-52
dsputil.c
libavcodec/dsputil.c
+11
-14
dsputil.h
libavcodec/dsputil.h
+3
-1
mpegvideo.c
libavcodec/mpegvideo.c
+9
-3
snow.c
libavcodec/snow.c
+9
-3
dsputil_mmx.c
libavcodec/x86/dsputil_mmx.c
+38
-31
No files found.
libavcodec/dsputil.c
View file @
1500be13
...
...
@@ -298,17 +298,11 @@ static int sse16_c(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h)
/* draw the edges of width 'w' of an image of size width, height */
//FIXME check that this is ok for mpeg4 interlaced
static
void
draw_edges_c
(
uint8_t
*
buf
,
int
wrap
,
int
width
,
int
height
,
int
w
)
static
void
draw_edges_c
(
uint8_t
*
buf
,
int
wrap
,
int
width
,
int
height
,
int
w
,
int
sides
)
{
uint8_t
*
ptr
,
*
last_line
;
int
i
;
last_line
=
buf
+
(
height
-
1
)
*
wrap
;
for
(
i
=
0
;
i
<
w
;
i
++
)
{
/* top and bottom */
memcpy
(
buf
-
(
i
+
1
)
*
wrap
,
buf
,
width
);
memcpy
(
last_line
+
(
i
+
1
)
*
wrap
,
last_line
,
width
);
}
/* left and right */
ptr
=
buf
;
for
(
i
=
0
;
i
<
height
;
i
++
)
{
...
...
@@ -316,13 +310,16 @@ static void draw_edges_c(uint8_t *buf, int wrap, int width, int height, int w)
memset
(
ptr
+
width
,
ptr
[
width
-
1
],
w
);
ptr
+=
wrap
;
}
/* corners */
for
(
i
=
0
;
i
<
w
;
i
++
)
{
memset
(
buf
-
(
i
+
1
)
*
wrap
-
w
,
buf
[
0
],
w
);
/* top left */
memset
(
buf
-
(
i
+
1
)
*
wrap
+
width
,
buf
[
width
-
1
],
w
);
/* top right */
memset
(
last_line
+
(
i
+
1
)
*
wrap
-
w
,
last_line
[
0
],
w
);
/* top left */
memset
(
last_line
+
(
i
+
1
)
*
wrap
+
width
,
last_line
[
width
-
1
],
w
);
/* top right */
}
/* top and bottom + corners */
buf
-=
w
;
last_line
=
buf
+
(
height
-
1
)
*
wrap
;
if
(
sides
&
EDGE_TOP
)
for
(
i
=
0
;
i
<
w
;
i
++
)
memcpy
(
buf
-
(
i
+
1
)
*
wrap
,
buf
,
width
+
w
+
w
);
// top
if
(
sides
&
EDGE_BOTTOM
)
for
(
i
=
0
;
i
<
w
;
i
++
)
memcpy
(
last_line
+
(
i
+
1
)
*
wrap
,
last_line
,
width
+
w
+
w
);
// bottom
}
/**
...
...
libavcodec/dsputil.h
View file @
1500be13
...
...
@@ -492,8 +492,10 @@ typedef struct DSPContext {
#define BASIS_SHIFT 16
#define RECON_SHIFT 6
void
(
*
draw_edges
)(
uint8_t
*
buf
,
int
wrap
,
int
width
,
int
height
,
int
w
);
void
(
*
draw_edges
)(
uint8_t
*
buf
,
int
wrap
,
int
width
,
int
height
,
int
w
,
int
sides
);
#define EDGE_WIDTH 16
#define EDGE_TOP 1
#define EDGE_BOTTOM 2
void
(
*
prefetch
)(
void
*
mem
,
int
stride
,
int
h
);
...
...
libavcodec/mpegvideo.c
View file @
1500be13
...
...
@@ -1067,9 +1067,15 @@ void MPV_frame_end(MpegEncContext *s)
&&
s
->
current_picture
.
reference
&&
!
s
->
intra_only
&&
!
(
s
->
flags
&
CODEC_FLAG_EMU_EDGE
))
{
s
->
dsp
.
draw_edges
(
s
->
current_picture
.
data
[
0
],
s
->
linesize
,
s
->
h_edge_pos
,
s
->
v_edge_pos
,
EDGE_WIDTH
);
s
->
dsp
.
draw_edges
(
s
->
current_picture
.
data
[
1
],
s
->
uvlinesize
,
s
->
h_edge_pos
>>
1
,
s
->
v_edge_pos
>>
1
,
EDGE_WIDTH
/
2
);
s
->
dsp
.
draw_edges
(
s
->
current_picture
.
data
[
2
],
s
->
uvlinesize
,
s
->
h_edge_pos
>>
1
,
s
->
v_edge_pos
>>
1
,
EDGE_WIDTH
/
2
);
s
->
dsp
.
draw_edges
(
s
->
current_picture
.
data
[
0
],
s
->
linesize
,
s
->
h_edge_pos
,
s
->
v_edge_pos
,
EDGE_WIDTH
,
EDGE_TOP
|
EDGE_BOTTOM
);
s
->
dsp
.
draw_edges
(
s
->
current_picture
.
data
[
1
],
s
->
uvlinesize
,
s
->
h_edge_pos
>>
1
,
s
->
v_edge_pos
>>
1
,
EDGE_WIDTH
/
2
,
EDGE_TOP
|
EDGE_BOTTOM
);
s
->
dsp
.
draw_edges
(
s
->
current_picture
.
data
[
2
],
s
->
uvlinesize
,
s
->
h_edge_pos
>>
1
,
s
->
v_edge_pos
>>
1
,
EDGE_WIDTH
/
2
,
EDGE_TOP
|
EDGE_BOTTOM
);
}
emms_c
();
...
...
libavcodec/snow.c
View file @
1500be13
...
...
@@ -1976,9 +1976,15 @@ static int frame_start(SnowContext *s){
int
h
=
s
->
avctx
->
height
;
if
(
s
->
current_picture
.
data
[
0
]){
s
->
dsp
.
draw_edges
(
s
->
current_picture
.
data
[
0
],
s
->
current_picture
.
linesize
[
0
],
w
,
h
,
EDGE_WIDTH
);
s
->
dsp
.
draw_edges
(
s
->
current_picture
.
data
[
1
],
s
->
current_picture
.
linesize
[
1
],
w
>>
1
,
h
>>
1
,
EDGE_WIDTH
/
2
);
s
->
dsp
.
draw_edges
(
s
->
current_picture
.
data
[
2
],
s
->
current_picture
.
linesize
[
2
],
w
>>
1
,
h
>>
1
,
EDGE_WIDTH
/
2
);
s
->
dsp
.
draw_edges
(
s
->
current_picture
.
data
[
0
],
s
->
current_picture
.
linesize
[
0
],
w
,
h
,
EDGE_WIDTH
,
EDGE_TOP
|
EDGE_BOTTOM
);
s
->
dsp
.
draw_edges
(
s
->
current_picture
.
data
[
1
],
s
->
current_picture
.
linesize
[
1
],
w
>>
1
,
h
>>
1
,
EDGE_WIDTH
/
2
,
EDGE_TOP
|
EDGE_BOTTOM
);
s
->
dsp
.
draw_edges
(
s
->
current_picture
.
data
[
2
],
s
->
current_picture
.
linesize
[
2
],
w
>>
1
,
h
>>
1
,
EDGE_WIDTH
/
2
,
EDGE_TOP
|
EDGE_BOTTOM
);
}
release_buffer
(
s
->
avctx
);
...
...
libavcodec/x86/dsputil_mmx.c
View file @
1500be13
...
...
@@ -783,7 +783,7 @@ static void h263_h_loop_filter_mmx(uint8_t *src, int stride, int qscale){
/* draw the edges of width 'w' of an image of size width, height
this mmx version can only handle w==8 || w==16 */
static
void
draw_edges_mmx
(
uint8_t
*
buf
,
int
wrap
,
int
width
,
int
height
,
int
w
)
static
void
draw_edges_mmx
(
uint8_t
*
buf
,
int
wrap
,
int
width
,
int
height
,
int
w
,
int
sides
)
{
uint8_t
*
ptr
,
*
last_line
;
int
i
;
...
...
@@ -836,8 +836,9 @@ static void draw_edges_mmx(uint8_t *buf, int wrap, int width, int height, int w)
);
}
for
(
i
=
0
;
i
<
w
;
i
+=
4
)
{
/* top and bottom (and hopefully also the corners) */
if
(
sides
&
EDGE_TOP
)
{
for
(
i
=
0
;
i
<
w
;
i
+=
4
)
{
ptr
=
buf
-
(
i
+
1
)
*
wrap
-
w
;
__asm__
volatile
(
"1:
\n\t
"
...
...
@@ -852,6 +853,11 @@ static void draw_edges_mmx(uint8_t *buf, int wrap, int width, int height, int w)
:
"+r"
(
ptr
)
:
"r"
((
x86_reg
)
buf
-
(
x86_reg
)
ptr
-
w
),
"r"
((
x86_reg
)
-
wrap
),
"r"
((
x86_reg
)
-
wrap
*
3
),
"r"
(
ptr
+
width
+
2
*
w
)
);
}
}
if
(
sides
&
EDGE_BOTTOM
)
{
for
(
i
=
0
;
i
<
w
;
i
+=
4
)
{
ptr
=
last_line
+
(
i
+
1
)
*
wrap
-
w
;
__asm__
volatile
(
"1:
\n\t
"
...
...
@@ -867,6 +873,7 @@ static void draw_edges_mmx(uint8_t *buf, int wrap, int width, int height, int w)
:
"r"
((
x86_reg
)
last_line
-
(
x86_reg
)
ptr
-
w
),
"r"
((
x86_reg
)
wrap
),
"r"
((
x86_reg
)
wrap
*
3
),
"r"
(
ptr
+
width
+
2
*
w
)
);
}
}
}
#define PAETH(cpu, abs3)\
...
...
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