Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
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
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
Commits
7351eb14
Commit
7351eb14
authored
Aug 09, 2011
by
Kostya Shishkov
Committed by
Diego Biurrun
Aug 09, 2011
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Pretty-print RV3/4 decoder source
Signed-off-by:
Diego Biurrun
<
diego@biurrun.de
>
parent
9791c027
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
68 additions
and
68 deletions
+68
-68
rv30.c
libavcodec/rv30.c
+3
-3
rv30dsp.c
libavcodec/rv30dsp.c
+17
-17
rv34.c
libavcodec/rv34.c
+45
-45
rv40.c
libavcodec/rv40.c
+3
-3
rv40dsp.c
libavcodec/rv40dsp.c
+0
-0
No files found.
libavcodec/rv30.c
View file @
7351eb14
...
@@ -276,7 +276,7 @@ AVCodec ff_rv30_decoder = {
...
@@ -276,7 +276,7 @@ AVCodec ff_rv30_decoder = {
.
close
=
ff_rv34_decode_end
,
.
close
=
ff_rv34_decode_end
,
.
decode
=
ff_rv34_decode_frame
,
.
decode
=
ff_rv34_decode_frame
,
.
capabilities
=
CODEC_CAP_DR1
|
CODEC_CAP_DELAY
,
.
capabilities
=
CODEC_CAP_DR1
|
CODEC_CAP_DELAY
,
.
flush
=
ff_mpeg_flush
,
.
flush
=
ff_mpeg_flush
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"RealVideo 3.0"
),
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"RealVideo 3.0"
),
.
pix_fmts
=
ff_pixfmt_list_420
,
.
pix_fmts
=
ff_pixfmt_list_420
,
};
};
libavcodec/rv30dsp.c
View file @
7351eb14
...
@@ -29,10 +29,10 @@
...
@@ -29,10 +29,10 @@
#define RV30_LOWPASS(OPNAME, OP) \
#define RV30_LOWPASS(OPNAME, OP) \
static av_unused void OPNAME ## rv30_tpel8_h_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, const int C1, const int C2){\
static av_unused void OPNAME ## rv30_tpel8_h_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, const int C1, const int C2){\
const int h
=
8;\
const int h
=
8;\
uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;\
uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;\
int i;\
int i;\
for(i
=0; i<
h; i++)\
for(i
= 0; i <
h; i++)\
{\
{\
OP(dst[0], (-(src[-1]+src[2]) + src[0]*C1 + src[1]*C2 + 8)>>4);\
OP(dst[0], (-(src[-1]+src[2]) + src[0]*C1 + src[1]*C2 + 8)>>4);\
OP(dst[1], (-(src[ 0]+src[3]) + src[1]*C1 + src[2]*C2 + 8)>>4);\
OP(dst[1], (-(src[ 0]+src[3]) + src[1]*C1 + src[2]*C2 + 8)>>4);\
...
@@ -42,28 +42,28 @@ static av_unused void OPNAME ## rv30_tpel8_h_lowpass(uint8_t *dst, uint8_t *src,
...
@@ -42,28 +42,28 @@ static av_unused void OPNAME ## rv30_tpel8_h_lowpass(uint8_t *dst, uint8_t *src,
OP(dst[5], (-(src[ 4]+src[7]) + src[5]*C1 + src[6]*C2 + 8)>>4);\
OP(dst[5], (-(src[ 4]+src[7]) + src[5]*C1 + src[6]*C2 + 8)>>4);\
OP(dst[6], (-(src[ 5]+src[8]) + src[6]*C1 + src[7]*C2 + 8)>>4);\
OP(dst[6], (-(src[ 5]+src[8]) + src[6]*C1 + src[7]*C2 + 8)>>4);\
OP(dst[7], (-(src[ 6]+src[9]) + src[7]*C1 + src[8]*C2 + 8)>>4);\
OP(dst[7], (-(src[ 6]+src[9]) + src[7]*C1 + src[8]*C2 + 8)>>4);\
dst
+=
dstStride;\
dst
+=
dstStride;\
src
+=
srcStride;\
src
+=
srcStride;\
}\
}\
}\
}\
\
\
static void OPNAME ## rv30_tpel8_v_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, const int C1, const int C2){\
static void OPNAME ## rv30_tpel8_v_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, const int C1, const int C2){\
const int w
=
8;\
const int w
=
8;\
uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;\
uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;\
int i;\
int i;\
for(i
=0; i<
w; i++)\
for(i
= 0; i <
w; i++)\
{\
{\
const int srcA= src[-1*srcStride];\
const int srcA
= src[-1*srcStride];\
const int src0= src[0 *srcStride];\
const int src0
= src[0 *srcStride];\
const int src1= src[1 *srcStride];\
const int src1
= src[1 *srcStride];\
const int src2= src[2 *srcStride];\
const int src2
= src[2 *srcStride];\
const int src3= src[3 *srcStride];\
const int src3
= src[3 *srcStride];\
const int src4= src[4 *srcStride];\
const int src4
= src[4 *srcStride];\
const int src5= src[5 *srcStride];\
const int src5
= src[5 *srcStride];\
const int src6= src[6 *srcStride];\
const int src6
= src[6 *srcStride];\
const int src7= src[7 *srcStride];\
const int src7
= src[7 *srcStride];\
const int src8= src[8 *srcStride];\
const int src8
= src[8 *srcStride];\
const int src9= src[9 *srcStride];\
const int src9
= src[9 *srcStride];\
OP(dst[0*dstStride], (-(srcA+src2) + src0*C1 + src1*C2 + 8)>>4);\
OP(dst[0*dstStride], (-(srcA+src2) + src0*C1 + src1*C2 + 8)>>4);\
OP(dst[1*dstStride], (-(src0+src3) + src1*C1 + src2*C2 + 8)>>4);\
OP(dst[1*dstStride], (-(src0+src3) + src1*C1 + src2*C2 + 8)>>4);\
OP(dst[2*dstStride], (-(src1+src4) + src2*C1 + src3*C2 + 8)>>4);\
OP(dst[2*dstStride], (-(src1+src4) + src2*C1 + src3*C2 + 8)>>4);\
...
...
libavcodec/rv34.c
View file @
7351eb14
...
@@ -181,16 +181,16 @@ static av_always_inline void rv34_row_transform(int temp[16], DCTELEM *block)
...
@@ -181,16 +181,16 @@ static av_always_inline void rv34_row_transform(int temp[16], DCTELEM *block)
{
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
4
;
i
++
){
for
(
i
=
0
;
i
<
4
;
i
++
){
const
int
z0
=
13
*
(
block
[
i
+
8
*
0
]
+
block
[
i
+
8
*
2
]);
const
int
z0
=
13
*
(
block
[
i
+
8
*
0
]
+
block
[
i
+
8
*
2
]);
const
int
z1
=
13
*
(
block
[
i
+
8
*
0
]
-
block
[
i
+
8
*
2
]);
const
int
z1
=
13
*
(
block
[
i
+
8
*
0
]
-
block
[
i
+
8
*
2
]);
const
int
z2
=
7
*
block
[
i
+
8
*
1
]
-
17
*
block
[
i
+
8
*
3
];
const
int
z2
=
7
*
block
[
i
+
8
*
1
]
-
17
*
block
[
i
+
8
*
3
];
const
int
z3
=
17
*
block
[
i
+
8
*
1
]
+
7
*
block
[
i
+
8
*
3
];
const
int
z3
=
17
*
block
[
i
+
8
*
1
]
+
7
*
block
[
i
+
8
*
3
];
temp
[
4
*
i
+
0
]
=
z0
+
z3
;
temp
[
4
*
i
+
0
]
=
z0
+
z3
;
temp
[
4
*
i
+
1
]
=
z1
+
z2
;
temp
[
4
*
i
+
1
]
=
z1
+
z2
;
temp
[
4
*
i
+
2
]
=
z1
-
z2
;
temp
[
4
*
i
+
2
]
=
z1
-
z2
;
temp
[
4
*
i
+
3
]
=
z0
-
z3
;
temp
[
4
*
i
+
3
]
=
z0
-
z3
;
}
}
}
}
...
@@ -204,16 +204,16 @@ static void rv34_inv_transform(DCTELEM *block){
...
@@ -204,16 +204,16 @@ static void rv34_inv_transform(DCTELEM *block){
rv34_row_transform
(
temp
,
block
);
rv34_row_transform
(
temp
,
block
);
for
(
i
=
0
;
i
<
4
;
i
++
){
for
(
i
=
0
;
i
<
4
;
i
++
){
const
int
z0
=
13
*
(
temp
[
4
*
0
+
i
]
+
temp
[
4
*
2
+
i
])
+
0x200
;
const
int
z0
=
13
*
(
temp
[
4
*
0
+
i
]
+
temp
[
4
*
2
+
i
])
+
0x200
;
const
int
z1
=
13
*
(
temp
[
4
*
0
+
i
]
-
temp
[
4
*
2
+
i
])
+
0x200
;
const
int
z1
=
13
*
(
temp
[
4
*
0
+
i
]
-
temp
[
4
*
2
+
i
])
+
0x200
;
const
int
z2
=
7
*
temp
[
4
*
1
+
i
]
-
17
*
temp
[
4
*
3
+
i
];
const
int
z2
=
7
*
temp
[
4
*
1
+
i
]
-
17
*
temp
[
4
*
3
+
i
];
const
int
z3
=
17
*
temp
[
4
*
1
+
i
]
+
7
*
temp
[
4
*
3
+
i
];
const
int
z3
=
17
*
temp
[
4
*
1
+
i
]
+
7
*
temp
[
4
*
3
+
i
];
block
[
i
*
8
+
0
]
=
(
z0
+
z3
)
>>
10
;
block
[
i
*
8
+
0
]
=
(
z0
+
z3
)
>>
10
;
block
[
i
*
8
+
1
]
=
(
z1
+
z2
)
>>
10
;
block
[
i
*
8
+
1
]
=
(
z1
+
z2
)
>>
10
;
block
[
i
*
8
+
2
]
=
(
z1
-
z2
)
>>
10
;
block
[
i
*
8
+
2
]
=
(
z1
-
z2
)
>>
10
;
block
[
i
*
8
+
3
]
=
(
z0
-
z3
)
>>
10
;
block
[
i
*
8
+
3
]
=
(
z0
-
z3
)
>>
10
;
}
}
}
}
...
@@ -230,16 +230,16 @@ static void rv34_inv_transform_noround(DCTELEM *block){
...
@@ -230,16 +230,16 @@ static void rv34_inv_transform_noround(DCTELEM *block){
rv34_row_transform
(
temp
,
block
);
rv34_row_transform
(
temp
,
block
);
for
(
i
=
0
;
i
<
4
;
i
++
){
for
(
i
=
0
;
i
<
4
;
i
++
){
const
int
z0
=
13
*
(
temp
[
4
*
0
+
i
]
+
temp
[
4
*
2
+
i
]);
const
int
z0
=
13
*
(
temp
[
4
*
0
+
i
]
+
temp
[
4
*
2
+
i
]);
const
int
z1
=
13
*
(
temp
[
4
*
0
+
i
]
-
temp
[
4
*
2
+
i
]);
const
int
z1
=
13
*
(
temp
[
4
*
0
+
i
]
-
temp
[
4
*
2
+
i
]);
const
int
z2
=
7
*
temp
[
4
*
1
+
i
]
-
17
*
temp
[
4
*
3
+
i
];
const
int
z2
=
7
*
temp
[
4
*
1
+
i
]
-
17
*
temp
[
4
*
3
+
i
];
const
int
z3
=
17
*
temp
[
4
*
1
+
i
]
+
7
*
temp
[
4
*
3
+
i
];
const
int
z3
=
17
*
temp
[
4
*
1
+
i
]
+
7
*
temp
[
4
*
3
+
i
];
block
[
i
*
8
+
0
]
=
((
z0
+
z3
)
*
3
)
>>
11
;
block
[
i
*
8
+
0
]
=
((
z0
+
z3
)
*
3
)
>>
11
;
block
[
i
*
8
+
1
]
=
((
z1
+
z2
)
*
3
)
>>
11
;
block
[
i
*
8
+
1
]
=
((
z1
+
z2
)
*
3
)
>>
11
;
block
[
i
*
8
+
2
]
=
((
z1
-
z2
)
*
3
)
>>
11
;
block
[
i
*
8
+
2
]
=
((
z1
-
z2
)
*
3
)
>>
11
;
block
[
i
*
8
+
3
]
=
((
z0
-
z3
)
*
3
)
>>
11
;
block
[
i
*
8
+
3
]
=
((
z0
-
z3
)
*
3
)
>>
11
;
}
}
}
}
...
@@ -772,7 +772,7 @@ static inline void rv34_mc(RV34DecContext *r, const int block_type,
...
@@ -772,7 +772,7 @@ static inline void rv34_mc(RV34DecContext *r, const int block_type,
srcV
+=
uvsrc_y
*
s
->
uvlinesize
+
uvsrc_x
;
srcV
+=
uvsrc_y
*
s
->
uvlinesize
+
uvsrc_x
;
if
(
(
unsigned
)(
src_x
-
!!
lx
*
2
)
>
s
->
h_edge_pos
-
!!
lx
*
2
-
(
width
<<
3
)
-
4
if
(
(
unsigned
)(
src_x
-
!!
lx
*
2
)
>
s
->
h_edge_pos
-
!!
lx
*
2
-
(
width
<<
3
)
-
4
||
(
unsigned
)(
src_y
-
!!
ly
*
2
)
>
s
->
v_edge_pos
-
!!
ly
*
2
-
(
height
<<
3
)
-
4
){
||
(
unsigned
)(
src_y
-
!!
ly
*
2
)
>
s
->
v_edge_pos
-
!!
ly
*
2
-
(
height
<<
3
)
-
4
){
uint8_t
*
uvbuf
=
s
->
edge_emu_buffer
+
22
*
s
->
linesize
;
uint8_t
*
uvbuf
=
s
->
edge_emu_buffer
+
22
*
s
->
linesize
;
srcY
-=
2
+
2
*
s
->
linesize
;
srcY
-=
2
+
2
*
s
->
linesize
;
s
->
dsp
.
emulated_edge_mc
(
s
->
edge_emu_buffer
,
srcY
,
s
->
linesize
,
(
width
<<
3
)
+
6
,
(
height
<<
3
)
+
6
,
s
->
dsp
.
emulated_edge_mc
(
s
->
edge_emu_buffer
,
srcY
,
s
->
linesize
,
(
width
<<
3
)
+
6
,
(
height
<<
3
)
+
6
,
...
@@ -1301,8 +1301,8 @@ static int rv34_decode_slice(RV34DecContext *r, int end, const uint8_t* buf, int
...
@@ -1301,8 +1301,8 @@ static int rv34_decode_slice(RV34DecContext *r, int end, const uint8_t* buf, int
}
}
memset
(
r
->
intra_types_hist
,
-
1
,
r
->
intra_types_stride
*
4
*
2
*
sizeof
(
*
r
->
intra_types_hist
));
memset
(
r
->
intra_types_hist
,
-
1
,
r
->
intra_types_stride
*
4
*
2
*
sizeof
(
*
r
->
intra_types_hist
));
s
->
first_slice_line
=
1
;
s
->
first_slice_line
=
1
;
s
->
resync_mb_x
=
s
->
mb_x
;
s
->
resync_mb_x
=
s
->
mb_x
;
s
->
resync_mb_y
=
s
->
mb_y
;
s
->
resync_mb_y
=
s
->
mb_y
;
ff_init_block_index
(
s
);
ff_init_block_index
(
s
);
while
(
!
check_slice_end
(
r
,
s
))
{
while
(
!
check_slice_end
(
r
,
s
))
{
...
@@ -1344,11 +1344,11 @@ av_cold int ff_rv34_decode_init(AVCodecContext *avctx)
...
@@ -1344,11 +1344,11 @@ av_cold int ff_rv34_decode_init(AVCodecContext *avctx)
MpegEncContext
*
s
=
&
r
->
s
;
MpegEncContext
*
s
=
&
r
->
s
;
MPV_decode_defaults
(
s
);
MPV_decode_defaults
(
s
);
s
->
avctx
=
avctx
;
s
->
avctx
=
avctx
;
s
->
out_format
=
FMT_H263
;
s
->
out_format
=
FMT_H263
;
s
->
codec_id
=
avctx
->
codec_id
;
s
->
codec_id
=
avctx
->
codec_id
;
s
->
width
=
avctx
->
width
;
s
->
width
=
avctx
->
width
;
s
->
height
=
avctx
->
height
;
s
->
height
=
avctx
->
height
;
r
->
s
.
avctx
=
avctx
;
r
->
s
.
avctx
=
avctx
;
...
@@ -1404,8 +1404,8 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
...
@@ -1404,8 +1404,8 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
if
(
buf_size
==
0
)
{
if
(
buf_size
==
0
)
{
/* special case for last picture */
/* special case for last picture */
if
(
s
->
low_delay
==
0
&&
s
->
next_picture_ptr
)
{
if
(
s
->
low_delay
==
0
&&
s
->
next_picture_ptr
)
{
*
pict
=
*
(
AVFrame
*
)
s
->
next_picture_ptr
;
*
pict
=
*
(
AVFrame
*
)
s
->
next_picture_ptr
;
s
->
next_picture_ptr
=
NULL
;
s
->
next_picture_ptr
=
NULL
;
*
data_size
=
sizeof
(
AVFrame
);
*
data_size
=
sizeof
(
AVFrame
);
}
}
...
@@ -1436,13 +1436,13 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
...
@@ -1436,13 +1436,13 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
||
avctx
->
skip_frame
>=
AVDISCARD_ALL
)
||
avctx
->
skip_frame
>=
AVDISCARD_ALL
)
return
buf_size
;
return
buf_size
;
for
(
i
=
0
;
i
<
slice_count
;
i
++
){
for
(
i
=
0
;
i
<
slice_count
;
i
++
){
int
offset
=
get_slice_offset
(
avctx
,
slices_hdr
,
i
);
int
offset
=
get_slice_offset
(
avctx
,
slices_hdr
,
i
);
int
size
;
int
size
;
if
(
i
+
1
==
slice_count
)
if
(
i
+
1
==
slice_count
)
size
=
buf_size
-
offset
;
size
=
buf_size
-
offset
;
else
else
size
=
get_slice_offset
(
avctx
,
slices_hdr
,
i
+
1
)
-
offset
;
size
=
get_slice_offset
(
avctx
,
slices_hdr
,
i
+
1
)
-
offset
;
if
(
offset
>
buf_size
){
if
(
offset
>
buf_size
){
av_log
(
avctx
,
AV_LOG_ERROR
,
"Slice offset is greater than frame size
\n
"
);
av_log
(
avctx
,
AV_LOG_ERROR
,
"Slice offset is greater than frame size
\n
"
);
...
@@ -1472,16 +1472,16 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
...
@@ -1472,16 +1472,16 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
ff_er_frame_end
(
s
);
ff_er_frame_end
(
s
);
MPV_frame_end
(
s
);
MPV_frame_end
(
s
);
if
(
s
->
pict_type
==
AV_PICTURE_TYPE_B
||
s
->
low_delay
)
{
if
(
s
->
pict_type
==
AV_PICTURE_TYPE_B
||
s
->
low_delay
)
{
*
pict
=
*
(
AVFrame
*
)
s
->
current_picture_ptr
;
*
pict
=
*
(
AVFrame
*
)
s
->
current_picture_ptr
;
}
else
if
(
s
->
last_picture_ptr
!=
NULL
)
{
}
else
if
(
s
->
last_picture_ptr
!=
NULL
)
{
*
pict
=
*
(
AVFrame
*
)
s
->
last_picture_ptr
;
*
pict
=
*
(
AVFrame
*
)
s
->
last_picture_ptr
;
}
}
if
(
s
->
last_picture_ptr
||
s
->
low_delay
){
if
(
s
->
last_picture_ptr
||
s
->
low_delay
){
*
data_size
=
sizeof
(
AVFrame
);
*
data_size
=
sizeof
(
AVFrame
);
ff_print_debug_info
(
s
,
pict
);
ff_print_debug_info
(
s
,
pict
);
}
}
s
->
current_picture_ptr
=
NULL
;
//so we can detect if frame_end wasnt called (find some nicer solution...)
s
->
current_picture_ptr
=
NULL
;
//so we can detect if frame_end wasnt called (find some nicer solution...)
}
}
return
buf_size
;
return
buf_size
;
}
}
...
...
libavcodec/rv40.c
View file @
7351eb14
...
@@ -677,7 +677,7 @@ AVCodec ff_rv40_decoder = {
...
@@ -677,7 +677,7 @@ AVCodec ff_rv40_decoder = {
.
close
=
ff_rv34_decode_end
,
.
close
=
ff_rv34_decode_end
,
.
decode
=
ff_rv34_decode_frame
,
.
decode
=
ff_rv34_decode_frame
,
.
capabilities
=
CODEC_CAP_DR1
|
CODEC_CAP_DELAY
,
.
capabilities
=
CODEC_CAP_DR1
|
CODEC_CAP_DELAY
,
.
flush
=
ff_mpeg_flush
,
.
flush
=
ff_mpeg_flush
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"RealVideo 4.0"
),
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"RealVideo 4.0"
),
.
pix_fmts
=
ff_pixfmt_list_420
,
.
pix_fmts
=
ff_pixfmt_list_420
,
};
};
libavcodec/rv40dsp.c
View file @
7351eb14
This diff is collapsed.
Click to expand it.
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