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
0ce033f8
Commit
0ce033f8
authored
Jan 03, 2013
by
Anton Khirnov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
rawdec: cosmetics, reformat
parent
b965cb90
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
68 additions
and
58 deletions
+68
-58
rawdec.c
libavcodec/rawdec.c
+68
-58
No files found.
libavcodec/rawdec.c
View file @
0ce033f8
...
@@ -32,8 +32,8 @@
...
@@ -32,8 +32,8 @@
typedef
struct
RawVideoContext
{
typedef
struct
RawVideoContext
{
uint32_t
palette
[
AVPALETTE_COUNT
];
uint32_t
palette
[
AVPALETTE_COUNT
];
unsigned
char
*
buffer
;
/* block of memory for holding one frame */
unsigned
char
*
buffer
;
/* block of memory for holding one frame */
int
length
;
/* number of bytes in buffer */
int
length
;
/* number of bytes in buffer */
int
flip
;
int
flip
;
AVFrame
pic
;
///< AVCodecContext.coded_frame
AVFrame
pic
;
///< AVCodecContext.coded_frame
}
RawVideoContext
;
}
RawVideoContext
;
...
@@ -46,7 +46,7 @@ static const PixelFormatTag pix_fmt_bps_avi[] = {
...
@@ -46,7 +46,7 @@ static const PixelFormatTag pix_fmt_bps_avi[] = {
{
AV_PIX_FMT_RGB555
,
16
},
{
AV_PIX_FMT_RGB555
,
16
},
{
AV_PIX_FMT_BGR24
,
24
},
{
AV_PIX_FMT_BGR24
,
24
},
{
AV_PIX_FMT_RGB32
,
32
},
{
AV_PIX_FMT_RGB32
,
32
},
{
AV_PIX_FMT_NONE
,
0
},
{
AV_PIX_FMT_NONE
,
0
},
};
};
static
const
PixelFormatTag
pix_fmt_bps_mov
[]
=
{
static
const
PixelFormatTag
pix_fmt_bps_mov
[]
=
{
...
@@ -60,10 +60,11 @@ static const PixelFormatTag pix_fmt_bps_mov[] = {
...
@@ -60,10 +60,11 @@ static const PixelFormatTag pix_fmt_bps_mov[] = {
{
AV_PIX_FMT_RGB24
,
24
},
{
AV_PIX_FMT_RGB24
,
24
},
{
AV_PIX_FMT_ARGB
,
32
},
{
AV_PIX_FMT_ARGB
,
32
},
{
AV_PIX_FMT_MONOWHITE
,
33
},
{
AV_PIX_FMT_MONOWHITE
,
33
},
{
AV_PIX_FMT_NONE
,
0
},
{
AV_PIX_FMT_NONE
,
0
},
};
};
static
enum
AVPixelFormat
find_pix_fmt
(
const
PixelFormatTag
*
tags
,
unsigned
int
fourcc
)
static
enum
AVPixelFormat
find_pix_fmt
(
const
PixelFormatTag
*
tags
,
unsigned
int
fourcc
)
{
{
while
(
tags
->
pix_fmt
>=
0
)
{
while
(
tags
->
pix_fmt
>=
0
)
{
if
(
tags
->
fourcc
==
fourcc
)
if
(
tags
->
fourcc
==
fourcc
)
...
@@ -77,20 +78,24 @@ static av_cold int raw_init_decoder(AVCodecContext *avctx)
...
@@ -77,20 +78,24 @@ static av_cold int raw_init_decoder(AVCodecContext *avctx)
{
{
RawVideoContext
*
context
=
avctx
->
priv_data
;
RawVideoContext
*
context
=
avctx
->
priv_data
;
if
(
avctx
->
codec_tag
==
MKTAG
(
'r'
,
'a'
,
'w'
,
' '
))
if
(
avctx
->
codec_tag
==
MKTAG
(
'r'
,
'a'
,
'w'
,
' '
))
avctx
->
pix_fmt
=
find_pix_fmt
(
pix_fmt_bps_mov
,
avctx
->
bits_per_coded_sample
);
avctx
->
pix_fmt
=
find_pix_fmt
(
pix_fmt_bps_mov
,
else
if
(
avctx
->
codec_tag
==
MKTAG
(
'W'
,
'R'
,
'A'
,
'W'
))
avctx
->
bits_per_coded_sample
);
avctx
->
pix_fmt
=
find_pix_fmt
(
pix_fmt_bps_avi
,
avctx
->
bits_per_coded_sample
);
else
if
(
avctx
->
codec_tag
==
MKTAG
(
'W'
,
'R'
,
'A'
,
'W'
))
avctx
->
pix_fmt
=
find_pix_fmt
(
pix_fmt_bps_avi
,
avctx
->
bits_per_coded_sample
);
else
if
(
avctx
->
codec_tag
)
else
if
(
avctx
->
codec_tag
)
avctx
->
pix_fmt
=
find_pix_fmt
(
ff_raw_pix_fmt_tags
,
avctx
->
codec_tag
);
avctx
->
pix_fmt
=
find_pix_fmt
(
ff_raw_pix_fmt_tags
,
avctx
->
codec_tag
);
else
if
(
avctx
->
pix_fmt
==
AV_PIX_FMT_NONE
&&
avctx
->
bits_per_coded_sample
)
else
if
(
avctx
->
pix_fmt
==
AV_PIX_FMT_NONE
&&
avctx
->
bits_per_coded_sample
)
avctx
->
pix_fmt
=
find_pix_fmt
(
pix_fmt_bps_avi
,
avctx
->
bits_per_coded_sample
);
avctx
->
pix_fmt
=
find_pix_fmt
(
pix_fmt_bps_avi
,
avctx
->
bits_per_coded_sample
);
avpriv_set_systematic_pal2
(
context
->
palette
,
avctx
->
pix_fmt
);
avpriv_set_systematic_pal2
(
context
->
palette
,
avctx
->
pix_fmt
);
context
->
length
=
avpicture_get_size
(
avctx
->
pix_fmt
,
avctx
->
width
,
avctx
->
height
);
context
->
length
=
avpicture_get_size
(
avctx
->
pix_fmt
,
avctx
->
width
,
if
((
avctx
->
bits_per_coded_sample
==
4
||
avctx
->
bits_per_coded_sample
==
2
)
&&
avctx
->
height
);
avctx
->
pix_fmt
==
AV_PIX_FMT_PAL8
&&
if
((
avctx
->
bits_per_coded_sample
==
4
||
avctx
->
bits_per_coded_sample
==
2
)
&&
(
!
avctx
->
codec_tag
||
avctx
->
codec_tag
==
MKTAG
(
'r'
,
'a'
,
'w'
,
' '
))){
avctx
->
pix_fmt
==
AV_PIX_FMT_PAL8
&&
(
!
avctx
->
codec_tag
||
avctx
->
codec_tag
==
MKTAG
(
'r'
,
'a'
,
'w'
,
' '
)))
{
context
->
buffer
=
av_malloc
(
context
->
length
);
context
->
buffer
=
av_malloc
(
context
->
length
);
if
(
!
context
->
buffer
)
if
(
!
context
->
buffer
)
return
-
1
;
return
-
1
;
...
@@ -98,28 +103,30 @@ static av_cold int raw_init_decoder(AVCodecContext *avctx)
...
@@ -98,28 +103,30 @@ static av_cold int raw_init_decoder(AVCodecContext *avctx)
context
->
pic
.
pict_type
=
AV_PICTURE_TYPE_I
;
context
->
pic
.
pict_type
=
AV_PICTURE_TYPE_I
;
context
->
pic
.
key_frame
=
1
;
context
->
pic
.
key_frame
=
1
;
avctx
->
coded_frame
=
&
context
->
pic
;
avctx
->
coded_frame
=
&
context
->
pic
;
if
((
avctx
->
extradata_size
>=
9
&&
!
memcmp
(
avctx
->
extradata
+
avctx
->
extradata_size
-
9
,
"BottomUp"
,
9
))
||
if
((
avctx
->
extradata_size
>=
9
&&
avctx
->
codec_tag
==
MKTAG
(
3
,
0
,
0
,
0
)
||
avctx
->
codec_tag
==
MKTAG
(
'W'
,
'R'
,
'A'
,
'W'
))
!
memcmp
(
avctx
->
extradata
+
avctx
->
extradata_size
-
9
,
"BottomUp"
,
9
))
||
context
->
flip
=
1
;
avctx
->
codec_tag
==
MKTAG
(
3
,
0
,
0
,
0
)
||
avctx
->
codec_tag
==
MKTAG
(
'W'
,
'R'
,
'A'
,
'W'
))
context
->
flip
=
1
;
return
0
;
return
0
;
}
}
static
void
flip
(
AVCodecContext
*
avctx
,
AVPicture
*
picture
){
static
void
flip
(
AVCodecContext
*
avctx
,
AVPicture
*
picture
)
picture
->
data
[
0
]
+=
picture
->
linesize
[
0
]
*
(
avctx
->
height
-
1
);
{
picture
->
data
[
0
]
+=
picture
->
linesize
[
0
]
*
(
avctx
->
height
-
1
);
picture
->
linesize
[
0
]
*=
-
1
;
picture
->
linesize
[
0
]
*=
-
1
;
}
}
static
int
raw_decode
(
AVCodecContext
*
avctx
,
static
int
raw_decode
(
AVCodecContext
*
avctx
,
void
*
data
,
int
*
got_frame
,
void
*
data
,
int
*
got_frame
,
AVPacket
*
avpkt
)
AVPacket
*
avpkt
)
{
{
const
uint8_t
*
buf
=
avpkt
->
data
;
int
buf_size
=
avpkt
->
size
;
RawVideoContext
*
context
=
avctx
->
priv_data
;
const
AVPixFmtDescriptor
*
desc
=
av_pix_fmt_desc_get
(
avctx
->
pix_fmt
);
const
AVPixFmtDescriptor
*
desc
=
av_pix_fmt_desc_get
(
avctx
->
pix_fmt
);
RawVideoContext
*
context
=
avctx
->
priv_data
;
const
uint8_t
*
buf
=
avpkt
->
data
;
int
buf_size
=
avpkt
->
size
;
int
res
;
int
res
;
AVFrame
*
frame
=
data
;
AVFrame
*
frame
=
data
;
...
@@ -127,71 +134,74 @@ static int raw_decode(AVCodecContext *avctx,
...
@@ -127,71 +134,74 @@ static int raw_decode(AVCodecContext *avctx,
frame
->
pict_type
=
avctx
->
coded_frame
->
pict_type
;
frame
->
pict_type
=
avctx
->
coded_frame
->
pict_type
;
frame
->
interlaced_frame
=
avctx
->
coded_frame
->
interlaced_frame
;
frame
->
interlaced_frame
=
avctx
->
coded_frame
->
interlaced_frame
;
frame
->
top_field_first
=
avctx
->
coded_frame
->
top_field_first
;
frame
->
top_field_first
=
avctx
->
coded_frame
->
top_field_first
;
frame
->
reordered_opaque
=
avctx
->
reordered_opaque
;
frame
->
reordered_opaque
=
avctx
->
reordered_opaque
;
frame
->
pkt_pts
=
avctx
->
pkt
->
pts
;
frame
->
pkt_pts
=
avctx
->
pkt
->
pts
;
if
(
buf_size
<
context
->
length
-
(
avctx
->
pix_fmt
==
AV_PIX_FMT_PAL8
?
256
*
4
:
0
))
if
(
buf_size
<
context
->
length
-
(
avctx
->
pix_fmt
==
AV_PIX_FMT_PAL8
?
256
*
4
:
0
))
return
-
1
;
return
-
1
;
//2bpp and 4bpp raw in avi and mov (yes this is ugly ...)
//2bpp and 4bpp raw in avi and mov (yes this is ugly ...)
if
(
context
->
buffer
)
{
if
(
context
->
buffer
)
{
int
i
;
int
i
;
uint8_t
*
dst
=
context
->
buffer
;
uint8_t
*
dst
=
context
->
buffer
;
buf_size
=
context
->
length
-
256
*
4
;
buf_size
=
context
->
length
-
256
*
4
;
if
(
avctx
->
bits_per_coded_sample
==
4
){
if
(
avctx
->
bits_per_coded_sample
==
4
)
{
for
(
i
=
0
;
2
*
i
+
1
<
buf_size
;
i
++
)
{
for
(
i
=
0
;
2
*
i
+
1
<
buf_size
;
i
++
)
{
dst
[
2
*
i
+
0
]
=
buf
[
i
]
>>
4
;
dst
[
2
*
i
+
0
]
=
buf
[
i
]
>>
4
;
dst
[
2
*
i
+
1
]
=
buf
[
i
]
&
15
;
dst
[
2
*
i
+
1
]
=
buf
[
i
]
&
15
;
}
}
}
else
}
else
{
for
(
i
=
0
;
4
*
i
+
3
<
buf_size
;
i
++
)
{
for
(
i
=
0
;
4
*
i
+
3
<
buf_size
;
i
++
)
{
dst
[
4
*
i
+
0
]
=
buf
[
i
]
>>
6
;
dst
[
4
*
i
+
0
]
=
buf
[
i
]
>>
6
;
dst
[
4
*
i
+
1
]
=
buf
[
i
]
>>
4
&
3
;
dst
[
4
*
i
+
1
]
=
buf
[
i
]
>>
4
&
3
;
dst
[
4
*
i
+
2
]
=
buf
[
i
]
>>
2
&
3
;
dst
[
4
*
i
+
2
]
=
buf
[
i
]
>>
2
&
3
;
dst
[
4
*
i
+
3
]
=
buf
[
i
]
&
3
;
dst
[
4
*
i
+
3
]
=
buf
[
i
]
&
3
;
}
}
buf
=
dst
;
}
buf
=
dst
;
}
}
if
(
avctx
->
codec_tag
==
MKTAG
(
'A'
,
'V'
,
'1'
,
'x'
)
||
if
(
avctx
->
codec_tag
==
MKTAG
(
'A'
,
'V'
,
'1'
,
'x'
)
||
avctx
->
codec_tag
==
MKTAG
(
'A'
,
'V'
,
'u'
,
'p'
))
avctx
->
codec_tag
==
MKTAG
(
'A'
,
'V'
,
'u'
,
'p'
))
buf
+=
buf_size
-
context
->
length
;
buf
+=
buf_size
-
context
->
length
;
if
((
res
=
avpicture_fill
(
picture
,
buf
,
avctx
->
pix_fmt
,
if
((
res
=
avpicture_fill
(
picture
,
buf
,
avctx
->
pix_fmt
,
avctx
->
width
,
avctx
->
height
))
<
0
)
avctx
->
width
,
avctx
->
height
))
<
0
)
return
res
;
return
res
;
if
((
avctx
->
pix_fmt
==
AV_PIX_FMT_PAL8
&&
buf_size
<
context
->
length
)
||
if
((
avctx
->
pix_fmt
==
AV_PIX_FMT_PAL8
&&
buf_size
<
context
->
length
)
||
(
desc
->
flags
&
PIX_FMT_PSEUDOPAL
))
{
(
desc
->
flags
&
PIX_FMT_PSEUDOPAL
))
{
frame
->
data
[
1
]
=
context
->
palette
;
frame
->
data
[
1
]
=
context
->
palette
;
}
}
if
(
avctx
->
pix_fmt
==
AV_PIX_FMT_PAL8
)
{
if
(
avctx
->
pix_fmt
==
AV_PIX_FMT_PAL8
)
{
const
uint8_t
*
pal
=
av_packet_get_side_data
(
avpkt
,
AV_PKT_DATA_PALETTE
,
NULL
);
const
uint8_t
*
pal
=
av_packet_get_side_data
(
avpkt
,
AV_PKT_DATA_PALETTE
,
NULL
);
if
(
pal
)
{
if
(
pal
)
{
memcpy
(
frame
->
data
[
1
],
pal
,
AVPALETTE_SIZE
);
memcpy
(
frame
->
data
[
1
],
pal
,
AVPALETTE_SIZE
);
frame
->
palette_has_changed
=
1
;
frame
->
palette_has_changed
=
1
;
}
}
}
}
if
(
avctx
->
pix_fmt
==
AV_PIX_FMT_BGR24
&&
((
frame
->
linesize
[
0
]
+
3
)
&~
3
)
*
avctx
->
height
<=
buf_size
)
if
(
avctx
->
pix_fmt
==
AV_PIX_FMT_BGR24
&&
frame
->
linesize
[
0
]
=
(
frame
->
linesize
[
0
]
+
3
)
&~
3
;
((
frame
->
linesize
[
0
]
+
3
)
&
~
3
)
*
avctx
->
height
<=
buf_size
)
frame
->
linesize
[
0
]
=
(
frame
->
linesize
[
0
]
+
3
)
&
~
3
;
if
(
context
->
flip
)
if
(
context
->
flip
)
flip
(
avctx
,
picture
);
flip
(
avctx
,
picture
);
if
(
avctx
->
codec_tag
==
MKTAG
(
'Y'
,
'V'
,
'1'
,
'2'
)
if
(
avctx
->
codec_tag
==
MKTAG
(
'Y'
,
'V'
,
'1'
,
'2'
)
||
||
avctx
->
codec_tag
==
MKTAG
(
'Y'
,
'V'
,
'1'
,
'6'
)
avctx
->
codec_tag
==
MKTAG
(
'Y'
,
'V'
,
'1'
,
'6'
)
||
||
avctx
->
codec_tag
==
MKTAG
(
'Y'
,
'V'
,
'2'
,
'4'
)
avctx
->
codec_tag
==
MKTAG
(
'Y'
,
'V'
,
'2'
,
'4'
)
||
||
avctx
->
codec_tag
==
MKTAG
(
'Y'
,
'V'
,
'U'
,
'9'
))
avctx
->
codec_tag
==
MKTAG
(
'Y'
,
'V'
,
'U'
,
'9'
))
FFSWAP
(
uint8_t
*
,
picture
->
data
[
1
],
picture
->
data
[
2
]);
FFSWAP
(
uint8_t
*
,
picture
->
data
[
1
],
picture
->
data
[
2
]);
if
(
avctx
->
codec_tag
==
AV_RL32
(
"yuv2"
)
&&
if
(
avctx
->
codec_tag
==
AV_RL32
(
"yuv2"
)
&&
avctx
->
pix_fmt
==
AV_PIX_FMT_YUYV422
)
{
avctx
->
pix_fmt
==
AV_PIX_FMT_YUYV422
)
{
int
x
,
y
;
int
x
,
y
;
uint8_t
*
line
=
picture
->
data
[
0
];
uint8_t
*
line
=
picture
->
data
[
0
];
for
(
y
=
0
;
y
<
avctx
->
height
;
y
++
)
{
for
(
y
=
0
;
y
<
avctx
->
height
;
y
++
)
{
for
(
x
=
0
;
x
<
avctx
->
width
;
x
++
)
for
(
x
=
0
;
x
<
avctx
->
width
;
x
++
)
line
[
2
*
x
+
1
]
^=
0x80
;
line
[
2
*
x
+
1
]
^=
0x80
;
line
+=
picture
->
linesize
[
0
];
line
+=
picture
->
linesize
[
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