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
f713411d
Commit
f713411d
authored
Dec 09, 2012
by
Anton Khirnov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mdec: cosmetics, reformat
parent
098eed95
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
83 additions
and
80 deletions
+83
-80
mdec.c
libavcodec/mdec.c
+83
-80
No files found.
libavcodec/mdec.c
View file @
f713411d
...
@@ -33,7 +33,7 @@
...
@@ -33,7 +33,7 @@
#include "mpeg12.h"
#include "mpeg12.h"
#include "thread.h"
#include "thread.h"
typedef
struct
MDECContext
{
typedef
struct
MDECContext
{
AVCodecContext
*
avctx
;
AVCodecContext
*
avctx
;
DSPContext
dsp
;
DSPContext
dsp
;
AVFrame
picture
;
AVFrame
picture
;
...
@@ -57,36 +57,36 @@ static inline int mdec_decode_block_intra(MDECContext *a, int16_t *block, int n)
...
@@ -57,36 +57,36 @@ static inline int mdec_decode_block_intra(MDECContext *a, int16_t *block, int n)
int
level
,
diff
,
i
,
j
,
run
;
int
level
,
diff
,
i
,
j
,
run
;
int
component
;
int
component
;
RLTable
*
rl
=
&
ff_rl_mpeg1
;
RLTable
*
rl
=
&
ff_rl_mpeg1
;
uint8_t
*
const
scantable
=
a
->
scantable
.
permutated
;
uint8_t
*
const
scantable
=
a
->
scantable
.
permutated
;
const
uint16_t
*
quant_matrix
=
ff_mpeg1_default_intra_matrix
;
const
uint16_t
*
quant_matrix
=
ff_mpeg1_default_intra_matrix
;
const
int
qscale
=
a
->
qscale
;
const
int
qscale
=
a
->
qscale
;
/* DC coefficient */
/* DC coefficient */
if
(
a
->
version
==
2
)
{
if
(
a
->
version
==
2
)
{
block
[
0
]
=
2
*
get_sbits
(
&
a
->
gb
,
10
)
+
1024
;
block
[
0
]
=
2
*
get_sbits
(
&
a
->
gb
,
10
)
+
1024
;
}
else
{
}
else
{
component
=
(
n
<=
3
?
0
:
n
-
4
+
1
);
component
=
(
n
<=
3
?
0
:
n
-
4
+
1
);
diff
=
decode_dc
(
&
a
->
gb
,
component
);
diff
=
decode_dc
(
&
a
->
gb
,
component
);
if
(
diff
>=
0xffff
)
if
(
diff
>=
0xffff
)
return
-
1
;
return
-
1
;
a
->
last_dc
[
component
]
+=
diff
;
a
->
last_dc
[
component
]
+=
diff
;
block
[
0
]
=
a
->
last_dc
[
component
]
<<
3
;
block
[
0
]
=
a
->
last_dc
[
component
]
<<
3
;
}
}
i
=
0
;
i
=
0
;
{
{
OPEN_READER
(
re
,
&
a
->
gb
);
OPEN_READER
(
re
,
&
a
->
gb
);
/* now quantify & encode AC coefficients */
/* now quantify & encode AC coefficients */
for
(;;)
{
for
(;;)
{
UPDATE_CACHE
(
re
,
&
a
->
gb
);
UPDATE_CACHE
(
re
,
&
a
->
gb
);
GET_RL_VLC
(
level
,
run
,
re
,
&
a
->
gb
,
rl
->
rl_vlc
[
0
],
TEX_VLC_BITS
,
2
,
0
);
GET_RL_VLC
(
level
,
run
,
re
,
&
a
->
gb
,
rl
->
rl_vlc
[
0
],
TEX_VLC_BITS
,
2
,
0
);
if
(
level
==
127
)
{
if
(
level
==
127
)
{
break
;
break
;
}
else
if
(
level
!=
0
)
{
}
else
if
(
level
!=
0
)
{
i
+=
run
;
i
+=
run
;
j
=
scantable
[
i
];
j
=
scantable
[
i
];
level
=
(
level
*
qscale
*
quant_matrix
[
j
])
>>
3
;
level
=
(
level
*
qscale
*
quant_matrix
[
j
])
>>
3
;
level
=
(
level
^
SHOW_SBITS
(
re
,
&
a
->
gb
,
1
))
-
SHOW_SBITS
(
re
,
&
a
->
gb
,
1
);
level
=
(
level
^
SHOW_SBITS
(
re
,
&
a
->
gb
,
1
))
-
SHOW_SBITS
(
re
,
&
a
->
gb
,
1
);
LAST_SKIP_BITS
(
re
,
&
a
->
gb
,
1
);
LAST_SKIP_BITS
(
re
,
&
a
->
gb
,
1
);
}
else
{
}
else
{
...
@@ -96,17 +96,17 @@ static inline int mdec_decode_block_intra(MDECContext *a, int16_t *block, int n)
...
@@ -96,17 +96,17 @@ static inline int mdec_decode_block_intra(MDECContext *a, int16_t *block, int n)
level
=
SHOW_SBITS
(
re
,
&
a
->
gb
,
10
);
SKIP_BITS
(
re
,
&
a
->
gb
,
10
);
level
=
SHOW_SBITS
(
re
,
&
a
->
gb
,
10
);
SKIP_BITS
(
re
,
&
a
->
gb
,
10
);
i
+=
run
;
i
+=
run
;
j
=
scantable
[
i
];
j
=
scantable
[
i
];
if
(
level
<
0
)
{
if
(
level
<
0
)
{
level
=
-
level
;
level
=
-
level
;
level
=
(
level
*
qscale
*
quant_matrix
[
j
])
>>
3
;
level
=
(
level
*
qscale
*
quant_matrix
[
j
])
>>
3
;
level
=
(
level
-
1
)
|
1
;
level
=
(
level
-
1
)
|
1
;
level
=
-
level
;
level
=
-
level
;
}
else
{
}
else
{
level
=
(
level
*
qscale
*
quant_matrix
[
j
])
>>
3
;
level
=
(
level
*
qscale
*
quant_matrix
[
j
])
>>
3
;
level
=
(
level
-
1
)
|
1
;
level
=
(
level
-
1
)
|
1
;
}
}
}
}
if
(
i
>
63
){
if
(
i
>
63
)
{
av_log
(
a
->
avctx
,
AV_LOG_ERROR
,
"ac-tex damaged at %d %d
\n
"
,
a
->
mb_x
,
a
->
mb_y
);
av_log
(
a
->
avctx
,
AV_LOG_ERROR
,
"ac-tex damaged at %d %d
\n
"
,
a
->
mb_x
,
a
->
mb_y
);
return
-
1
;
return
-
1
;
}
}
...
@@ -119,34 +119,36 @@ static inline int mdec_decode_block_intra(MDECContext *a, int16_t *block, int n)
...
@@ -119,34 +119,36 @@ static inline int mdec_decode_block_intra(MDECContext *a, int16_t *block, int n)
return
0
;
return
0
;
}
}
static
inline
int
decode_mb
(
MDECContext
*
a
,
int16_t
block
[
6
][
64
]){
static
inline
int
decode_mb
(
MDECContext
*
a
,
int16_t
block
[
6
][
64
])
{
int
i
;
int
i
;
const
int
block_index
[
6
]
=
{
5
,
4
,
0
,
1
,
2
,
3
};
const
int
block_index
[
6
]
=
{
5
,
4
,
0
,
1
,
2
,
3
};
a
->
dsp
.
clear_blocks
(
block
[
0
]);
a
->
dsp
.
clear_blocks
(
block
[
0
]);
for
(
i
=
0
;
i
<
6
;
i
++
)
{
for
(
i
=
0
;
i
<
6
;
i
++
)
{
if
(
mdec_decode_block_intra
(
a
,
block
[
block_index
[
i
]
],
block_index
[
i
])
<
0
||
if
(
mdec_decode_block_intra
(
a
,
block
[
block_index
[
i
]
],
block_index
[
i
])
<
0
||
get_bits_left
(
&
a
->
gb
)
<
0
)
get_bits_left
(
&
a
->
gb
)
<
0
)
return
-
1
;
return
-
1
;
}
}
return
0
;
return
0
;
}
}
static
inline
void
idct_put
(
MDECContext
*
a
,
int
mb_x
,
int
mb_y
){
static
inline
void
idct_put
(
MDECContext
*
a
,
int
mb_x
,
int
mb_y
)
int16_t
(
*
block
)[
64
]
=
a
->
block
;
{
int
linesize
=
a
->
picture
.
linesize
[
0
];
int16_t
(
*
block
)[
64
]
=
a
->
block
;
int
linesize
=
a
->
picture
.
linesize
[
0
];
uint8_t
*
dest_y
=
a
->
picture
.
data
[
0
]
+
(
mb_y
*
16
*
linesize
)
+
mb_x
*
16
;
uint8_t
*
dest_y
=
a
->
picture
.
data
[
0
]
+
(
mb_y
*
16
*
linesize
)
+
mb_x
*
16
;
uint8_t
*
dest_cb
=
a
->
picture
.
data
[
1
]
+
(
mb_y
*
8
*
a
->
picture
.
linesize
[
1
])
+
mb_x
*
8
;
uint8_t
*
dest_cb
=
a
->
picture
.
data
[
1
]
+
(
mb_y
*
8
*
a
->
picture
.
linesize
[
1
])
+
mb_x
*
8
;
uint8_t
*
dest_cr
=
a
->
picture
.
data
[
2
]
+
(
mb_y
*
8
*
a
->
picture
.
linesize
[
2
])
+
mb_x
*
8
;
uint8_t
*
dest_cr
=
a
->
picture
.
data
[
2
]
+
(
mb_y
*
8
*
a
->
picture
.
linesize
[
2
])
+
mb_x
*
8
;
a
->
dsp
.
idct_put
(
dest_y
,
linesize
,
block
[
0
]);
a
->
dsp
.
idct_put
(
dest_y
,
linesize
,
block
[
0
]);
a
->
dsp
.
idct_put
(
dest_y
+
8
,
linesize
,
block
[
1
]);
a
->
dsp
.
idct_put
(
dest_y
+
8
,
linesize
,
block
[
1
]);
a
->
dsp
.
idct_put
(
dest_y
+
8
*
linesize
,
linesize
,
block
[
2
]);
a
->
dsp
.
idct_put
(
dest_y
+
8
*
linesize
,
linesize
,
block
[
2
]);
a
->
dsp
.
idct_put
(
dest_y
+
8
*
linesize
+
8
,
linesize
,
block
[
3
]);
a
->
dsp
.
idct_put
(
dest_y
+
8
*
linesize
+
8
,
linesize
,
block
[
3
]);
if
(
!
(
a
->
avctx
->
flags
&
CODEC_FLAG_GRAY
))
{
if
(
!
(
a
->
avctx
->
flags
&
CODEC_FLAG_GRAY
))
{
a
->
dsp
.
idct_put
(
dest_cb
,
a
->
picture
.
linesize
[
1
],
block
[
4
]);
a
->
dsp
.
idct_put
(
dest_cb
,
a
->
picture
.
linesize
[
1
],
block
[
4
]);
a
->
dsp
.
idct_put
(
dest_cr
,
a
->
picture
.
linesize
[
2
],
block
[
5
]);
a
->
dsp
.
idct_put
(
dest_cr
,
a
->
picture
.
linesize
[
2
],
block
[
5
]);
}
}
...
@@ -156,104 +158,105 @@ static int decode_frame(AVCodecContext *avctx,
...
@@ -156,104 +158,105 @@ static int decode_frame(AVCodecContext *avctx,
void
*
data
,
int
*
got_frame
,
void
*
data
,
int
*
got_frame
,
AVPacket
*
avpkt
)
AVPacket
*
avpkt
)
{
{
MDECContext
*
const
a
=
avctx
->
priv_data
;
const
uint8_t
*
buf
=
avpkt
->
data
;
const
uint8_t
*
buf
=
avpkt
->
data
;
int
buf_size
=
avpkt
->
size
;
int
buf_size
=
avpkt
->
size
;
MDECContext
*
const
a
=
avctx
->
priv_data
;
AVFrame
*
picture
=
data
;
AVFrame
*
picture
=
data
;
AVFrame
*
const
p
=
&
a
->
picture
;
AVFrame
*
const
p
=
&
a
->
picture
;
int
i
;
int
i
;
if
(
p
->
data
[
0
])
if
(
p
->
data
[
0
])
ff_thread_release_buffer
(
avctx
,
p
);
ff_thread_release_buffer
(
avctx
,
p
);
p
->
reference
=
0
;
p
->
reference
=
0
;
if
(
ff_thread_get_buffer
(
avctx
,
p
)
<
0
)
{
if
(
ff_thread_get_buffer
(
avctx
,
p
)
<
0
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"get_buffer() failed
\n
"
);
av_log
(
avctx
,
AV_LOG_ERROR
,
"get_buffer() failed
\n
"
);
return
-
1
;
return
-
1
;
}
}
p
->
pict_type
=
AV_PICTURE_TYPE_I
;
p
->
pict_type
=
AV_PICTURE_TYPE_I
;
p
->
key_frame
=
1
;
p
->
key_frame
=
1
;
av_fast_malloc
(
&
a
->
bitstream_buffer
,
&
a
->
bitstream_buffer_size
,
buf_size
+
FF_INPUT_BUFFER_PADDING_SIZE
);
av_fast_malloc
(
&
a
->
bitstream_buffer
,
&
a
->
bitstream_buffer_size
,
buf_size
+
FF_INPUT_BUFFER_PADDING_SIZE
);
if
(
!
a
->
bitstream_buffer
)
if
(
!
a
->
bitstream_buffer
)
return
AVERROR
(
ENOMEM
);
return
AVERROR
(
ENOMEM
);
for
(
i
=
0
;
i
<
buf_size
;
i
+=
2
)
{
for
(
i
=
0
;
i
<
buf_size
;
i
+=
2
)
{
a
->
bitstream_buffer
[
i
]
=
buf
[
i
+
1
];
a
->
bitstream_buffer
[
i
]
=
buf
[
i
+
1
];
a
->
bitstream_buffer
[
i
+
1
]
=
buf
[
i
];
a
->
bitstream_buffer
[
i
+
1
]
=
buf
[
i
];
}
}
init_get_bits
(
&
a
->
gb
,
a
->
bitstream_buffer
,
buf_size
*
8
);
init_get_bits
(
&
a
->
gb
,
a
->
bitstream_buffer
,
buf_size
*
8
);
/* skip over 4 preamble bytes in stream (typically 0xXX 0xXX 0x00 0x38) */
/* skip over 4 preamble bytes in stream (typically 0xXX 0xXX 0x00 0x38) */
skip_bits
(
&
a
->
gb
,
32
);
skip_bits
(
&
a
->
gb
,
32
);
a
->
qscale
=
get_bits
(
&
a
->
gb
,
16
);
a
->
qscale
=
get_bits
(
&
a
->
gb
,
16
);
a
->
version
=
get_bits
(
&
a
->
gb
,
16
);
a
->
version
=
get_bits
(
&
a
->
gb
,
16
);
a
->
last_dc
[
0
]
=
a
->
last_dc
[
0
]
=
a
->
last_dc
[
1
]
=
a
->
last_dc
[
2
]
=
128
;
a
->
last_dc
[
1
]
=
a
->
last_dc
[
2
]
=
128
;
for
(
a
->
mb_x
=
0
;
a
->
mb_x
<
a
->
mb_width
;
a
->
mb_x
++
)
{
for
(
a
->
mb_x
=
0
;
a
->
mb_x
<
a
->
mb_width
;
a
->
mb_x
++
)
{
for
(
a
->
mb_y
=
0
;
a
->
mb_y
<
a
->
mb_height
;
a
->
mb_y
++
)
{
for
(
a
->
mb_y
=
0
;
a
->
mb_y
<
a
->
mb_height
;
a
->
mb_y
++
)
{
if
(
decode_mb
(
a
,
a
->
block
)
<
0
)
if
(
decode_mb
(
a
,
a
->
block
)
<
0
)
return
-
1
;
return
-
1
;
idct_put
(
a
,
a
->
mb_x
,
a
->
mb_y
);
idct_put
(
a
,
a
->
mb_x
,
a
->
mb_y
);
}
}
}
}
p
->
quality
=
a
->
qscale
*
FF_QP2LAMBDA
;
p
->
quality
=
a
->
qscale
*
FF_QP2LAMBDA
;
memset
(
p
->
qscale_table
,
a
->
qscale
,
a
->
mb_width
);
memset
(
p
->
qscale_table
,
a
->
qscale
,
a
->
mb_width
);
*
picture
=
a
->
picture
;
*
picture
=
a
->
picture
;
*
got_frame
=
1
;
*
got_frame
=
1
;
return
(
get_bits_count
(
&
a
->
gb
)
+
31
)
/
32
*
4
;
return
(
get_bits_count
(
&
a
->
gb
)
+
31
)
/
32
*
4
;
}
}
static
av_cold
int
decode_init
(
AVCodecContext
*
avctx
){
static
av_cold
int
decode_init
(
AVCodecContext
*
avctx
)
{
MDECContext
*
const
a
=
avctx
->
priv_data
;
MDECContext
*
const
a
=
avctx
->
priv_data
;
AVFrame
*
p
=
&
a
->
picture
;
AVFrame
*
p
=
&
a
->
picture
;
a
->
mb_width
=
(
avctx
->
coded_width
+
15
)
/
16
;
a
->
mb_width
=
(
avctx
->
coded_width
+
15
)
/
16
;
a
->
mb_height
=
(
avctx
->
coded_height
+
15
)
/
16
;
a
->
mb_height
=
(
avctx
->
coded_height
+
15
)
/
16
;
avctx
->
coded_frame
=
&
a
->
picture
;
avctx
->
coded_frame
=
&
a
->
picture
;
a
->
avctx
=
avctx
;
a
->
avctx
=
avctx
;
ff_dsputil_init
(
&
a
->
dsp
,
avctx
);
ff_dsputil_init
(
&
a
->
dsp
,
avctx
);
ff_mpeg12_init_vlcs
();
ff_mpeg12_init_vlcs
();
ff_init_scantable
(
a
->
dsp
.
idct_permutation
,
&
a
->
scantable
,
ff_zigzag_direct
);
ff_init_scantable
(
a
->
dsp
.
idct_permutation
,
&
a
->
scantable
,
ff_zigzag_direct
);
if
(
avctx
->
idct_algo
==
FF_IDCT_AUTO
)
if
(
avctx
->
idct_algo
==
FF_IDCT_AUTO
)
avctx
->
idct_algo
=
FF_IDCT_SIMPLE
;
avctx
->
idct_algo
=
FF_IDCT_SIMPLE
;
p
->
qstride
=
0
;
p
->
qstride
=
0
;
p
->
qscale_table
=
av_mallocz
(
a
->
mb_width
);
p
->
qscale_table
=
av_mallocz
(
a
->
mb_width
);
avctx
->
pix_fmt
=
AV_PIX_FMT_YUVJ420P
;
avctx
->
pix_fmt
=
AV_PIX_FMT_YUVJ420P
;
return
0
;
return
0
;
}
}
static
av_cold
int
decode_init_thread_copy
(
AVCodecContext
*
avctx
){
static
av_cold
int
decode_init_thread_copy
(
AVCodecContext
*
avctx
)
{
MDECContext
*
const
a
=
avctx
->
priv_data
;
MDECContext
*
const
a
=
avctx
->
priv_data
;
AVFrame
*
p
=
&
a
->
picture
;
AVFrame
*
p
=
&
a
->
picture
;
avctx
->
coded_frame
=
p
;
avctx
->
coded_frame
=
p
;
a
->
avctx
=
avctx
;
a
->
avctx
=
avctx
;
p
->
qscale_table
=
av_mallocz
(
a
->
mb_width
);
p
->
qscale_table
=
av_mallocz
(
a
->
mb_width
);
return
0
;
return
0
;
}
}
static
av_cold
int
decode_end
(
AVCodecContext
*
avctx
){
static
av_cold
int
decode_end
(
AVCodecContext
*
avctx
)
{
MDECContext
*
const
a
=
avctx
->
priv_data
;
MDECContext
*
const
a
=
avctx
->
priv_data
;
if
(
a
->
picture
.
data
[
0
])
if
(
a
->
picture
.
data
[
0
])
avctx
->
release_buffer
(
avctx
,
&
a
->
picture
);
avctx
->
release_buffer
(
avctx
,
&
a
->
picture
);
av_freep
(
&
a
->
bitstream_buffer
);
av_freep
(
&
a
->
bitstream_buffer
);
av_freep
(
&
a
->
picture
.
qscale_table
);
av_freep
(
&
a
->
picture
.
qscale_table
);
a
->
bitstream_buffer_size
=
0
;
a
->
bitstream_buffer_size
=
0
;
return
0
;
return
0
;
}
}
...
...
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