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
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