Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
1dc1ed99
F
Ffmpeg
项目概览
小白菜888
/
Ffmpeg
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
Ffmpeg
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
1dc1ed99
编写于
11月 07, 2003
作者:
R
Roberto Togni
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8BPS decoder
Originally committed as revision 2486 to
svn://svn.ffmpeg.org/ffmpeg/trunk
上级
e02c251e
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
234 addition
and
1 deletion
+234
-1
doc/ffmpeg-doc.texi
doc/ffmpeg-doc.texi
+1
-0
libavcodec/8bps.c
libavcodec/8bps.c
+228
-0
libavcodec/Makefile
libavcodec/Makefile
+1
-1
libavcodec/allcodecs.c
libavcodec/allcodecs.c
+1
-0
libavcodec/avcodec.h
libavcodec/avcodec.h
+2
-0
libavformat/mov.c
libavformat/mov.c
+1
-0
未找到文件。
doc/ffmpeg-doc.texi
浏览文件 @
1dc1ed99
...
...
@@ -701,6 +701,7 @@ following image formats are supported:
@item Microsoft Video-1 @tab @tab X
@item Westwood VQA @tab @tab X
@item Id Cinematic Video @tab @tab X @tab used in Quake II
@item Planar RGB @tab @tab X @tab fourcc: 8BPS
@end multitable
@code
{
X
}
means that the encoding (resp. decoding) is supported.
...
...
libavcodec/8bps.c
0 → 100644
浏览文件 @
1dc1ed99
/*
* Quicktime Planar RGB (8BPS) Video Decoder
* Copyright (C) 2003 Roberto Togni
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
/**
* @file 8bps.c
* QT 8BPS Video Decoder by Roberto Togni <rtogni at bresciaonline dot it>
* For more information about the 8BPS format, visit:
* http://www.pcisys.net/~melanson/codecs/
*
* Supports: PAL8 (RGB 8bpp, paletted)
* : BGR24 (RGB 24bpp) (can also output it as RGBA32)
* : RGBA32 (RGB 32bpp, 4th plane is probably alpha and it's ignored)
*
*/
#include <stdio.h>
#include <stdlib.h>
#include "common.h"
#include "avcodec.h"
const
enum
PixelFormat
pixfmt_rgb24
[]
=
{
PIX_FMT_BGR24
,
PIX_FMT_RGBA32
,
-
1
};
/*
* Decoder context
*/
typedef
struct
EightBpsContext
{
AVCodecContext
*
avctx
;
AVFrame
pic
;
unsigned
char
planes
;
unsigned
char
planemap
[
4
];
}
EightBpsContext
;
/*
*
* Decode a frame
*
*/
static
int
decode_frame
(
AVCodecContext
*
avctx
,
void
*
data
,
int
*
data_size
,
uint8_t
*
buf
,
int
buf_size
)
{
EightBpsContext
*
const
c
=
(
EightBpsContext
*
)
avctx
->
priv_data
;
unsigned
char
*
encoded
=
(
unsigned
char
*
)
buf
;
unsigned
char
*
pixptr
;
unsigned
int
height
=
avctx
->
height
;
// Real image height
unsigned
int
dlen
,
p
,
row
;
unsigned
char
*
lp
,
*
dp
;
unsigned
char
count
;
unsigned
int
px_inc
;
unsigned
int
planes
=
c
->
planes
;
unsigned
char
*
planemap
=
c
->
planemap
;
/* no supplementary picture */
if
(
buf_size
==
0
)
return
0
;
if
(
c
->
pic
.
data
[
0
])
avctx
->
release_buffer
(
avctx
,
&
c
->
pic
);
c
->
pic
.
reference
=
0
;
c
->
pic
.
buffer_hints
=
FF_BUFFER_HINTS_VALID
;
if
(
avctx
->
get_buffer
(
avctx
,
&
c
->
pic
)
<
0
){
av_log
(
avctx
,
AV_LOG_ERROR
,
"get_buffer() failed
\n
"
);
return
-
1
;
}
/* Set data pointer after line lengths */
dp
=
encoded
+
planes
*
(
height
<<
1
);
/* Ignore alpha plane, don't know what to do with it */
if
(
planes
==
4
)
planes
--
;
px_inc
=
planes
+
(
avctx
->
pix_fmt
==
PIX_FMT_RGBA32
);
for
(
p
=
0
;
p
<
planes
;
p
++
)
{
/* Lines length pointer for this plane */
lp
=
encoded
+
p
*
(
height
<<
1
);
/* Decode a plane */
for
(
row
=
0
;
row
<
height
;
row
++
)
{
pixptr
=
c
->
pic
.
data
[
0
]
+
row
*
c
->
pic
.
linesize
[
0
]
+
planemap
[
p
];
dlen
=
be2me_16
(
*
(
unsigned
short
*
)(
lp
+
row
*
2
));
/* Decode a row of this plane */
while
(
dlen
>
0
)
{
if
((
count
=
*
dp
++
)
<=
127
)
{
count
++
;
dlen
-=
count
+
1
;
while
(
count
--
)
{
*
pixptr
=
*
dp
++
;
pixptr
+=
px_inc
;
}
}
else
{
count
=
257
-
count
;
while
(
count
--
)
{
*
pixptr
=
*
dp
;
pixptr
+=
px_inc
;
}
dp
++
;
dlen
-=
2
;
}
}
}
}
if
(
avctx
->
palctrl
)
{
memcpy
(
c
->
pic
.
data
[
1
],
avctx
->
palctrl
->
palette
,
AVPALETTE_SIZE
);
if
(
avctx
->
palctrl
->
palette_changed
)
{
c
->
pic
.
palette_has_changed
=
1
;
avctx
->
palctrl
->
palette_changed
=
0
;
}
else
c
->
pic
.
palette_has_changed
=
0
;
}
*
data_size
=
sizeof
(
AVFrame
);
*
(
AVFrame
*
)
data
=
c
->
pic
;
/* always report that the buffer was completely consumed */
return
buf_size
;
}
/*
*
* Init 8BPS decoder
*
*/
static
int
decode_init
(
AVCodecContext
*
avctx
)
{
EightBpsContext
*
const
c
=
(
EightBpsContext
*
)
avctx
->
priv_data
;
c
->
avctx
=
avctx
;
avctx
->
has_b_frames
=
0
;
c
->
pic
.
data
[
0
]
=
NULL
;
switch
(
avctx
->
bits_per_sample
)
{
case
8
:
avctx
->
pix_fmt
=
PIX_FMT_PAL8
;
c
->
planes
=
1
;
c
->
planemap
[
0
]
=
0
;
// 1st plane is palette indexes
if
(
avctx
->
palctrl
==
NULL
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Error: PAL8 format but no palette from demuxer.
\n
"
);
return
-
1
;
}
break
;
case
24
:
avctx
->
pix_fmt
=
avctx
->
get_format
(
avctx
,
pixfmt_rgb24
);
c
->
planes
=
3
;
c
->
planemap
[
0
]
=
2
;
// 1st plane is red
c
->
planemap
[
1
]
=
1
;
// 2nd plane is green
c
->
planemap
[
2
]
=
0
;
// 3rd plane is blue
break
;
case
32
:
avctx
->
pix_fmt
=
PIX_FMT_RGBA32
;
c
->
planes
=
4
;
#ifdef WORDS_BIGENDIAN
c
->
planemap
[
0
]
=
1
;
// 1st plane is red
c
->
planemap
[
1
]
=
2
;
// 2nd plane is green
c
->
planemap
[
2
]
=
3
;
// 3rd plane is blue
c
->
planemap
[
3
]
=
0
;
// 4th plane is alpha???
#else
c
->
planemap
[
0
]
=
2
;
// 1st plane is red
c
->
planemap
[
1
]
=
1
;
// 2nd plane is green
c
->
planemap
[
2
]
=
0
;
// 3rd plane is blue
c
->
planemap
[
3
]
=
3
;
// 4th plane is alpha???
#endif
break
;
default:
av_log
(
avctx
,
AV_LOG_ERROR
,
"Error: Unsupported color depth: %u.
\n
"
,
avctx
->
bits_per_sample
);
return
-
1
;
}
return
0
;
}
/*
*
* Uninit 8BPS decoder
*
*/
static
int
decode_end
(
AVCodecContext
*
avctx
)
{
EightBpsContext
*
const
c
=
(
EightBpsContext
*
)
avctx
->
priv_data
;
if
(
c
->
pic
.
data
[
0
])
avctx
->
release_buffer
(
avctx
,
&
c
->
pic
);
return
0
;
}
AVCodec
eightbps_decoder
=
{
"8bps"
,
CODEC_TYPE_VIDEO
,
CODEC_ID_8BPS
,
sizeof
(
EightBpsContext
),
decode_init
,
NULL
,
decode_end
,
decode_frame
,
CODEC_CAP_DR1
,
};
libavcodec/Makefile
浏览文件 @
1dc1ed99
...
...
@@ -18,7 +18,7 @@ OBJS= common.o utils.o mem.o allcodecs.o \
fft.o mdct.o mace.o huffyuv.o cyuv.o opts.o raw.o h264.o golomb.o
\
vp3.o asv1.o 4xm.o cabac.o ffv1.o ra144.o ra288.o vcr1.o cljr.o
\
roqvideo.o dpcm.o interplayvideo.o xan.o rpza.o cinepak.o msrle.o
\
msvideo1.o vqavideo.o idcinvideo.o adx.o rational.o faandct.o
msvideo1.o vqavideo.o idcinvideo.o adx.o rational.o faandct.o
8bps.o
ifeq
($(AMR_NB),yes)
ifeq
($(AMR_NB_FIXED),yes)
...
...
libavcodec/allcodecs.c
浏览文件 @
1dc1ed99
...
...
@@ -134,6 +134,7 @@ void avcodec_register_all(void)
register_avcodec
(
&
msvideo1_decoder
);
register_avcodec
(
&
vqa_decoder
);
register_avcodec
(
&
idcin_decoder
);
register_avcodec
(
&
eightbps_decoder
);
#ifdef CONFIG_AC3
register_avcodec
(
&
ac3_decoder
);
#endif
...
...
libavcodec/avcodec.h
浏览文件 @
1dc1ed99
...
...
@@ -83,6 +83,7 @@ enum CodecID {
CODEC_ID_MSRLE
,
CODEC_ID_MSVIDEO1
,
CODEC_ID_IDCIN
,
CODEC_ID_8BPS
,
/* various pcm "codecs" */
CODEC_ID_PCM_S16LE
,
...
...
@@ -1566,6 +1567,7 @@ extern AVCodec msrle_decoder;
extern
AVCodec
msvideo1_decoder
;
extern
AVCodec
vqa_decoder
;
extern
AVCodec
idcin_decoder
;
extern
AVCodec
eightbps_decoder
;
extern
AVCodec
ra_144_decoder
;
extern
AVCodec
ra_288_decoder
;
extern
AVCodec
roq_dpcm_decoder
;
...
...
libavformat/mov.c
浏览文件 @
1dc1ed99
...
...
@@ -101,6 +101,7 @@ static const CodecTag mov_video_tags[] = {
{
CODEC_ID_VP3
,
MKTAG
(
'V'
,
'P'
,
'3'
,
'1'
)
},
/* On2 VP3 */
{
CODEC_ID_RPZA
,
MKTAG
(
'r'
,
'p'
,
'z'
,
'a'
)
},
/* Apple Video (RPZA) */
{
CODEC_ID_CINEPAK
,
MKTAG
(
'c'
,
'v'
,
'i'
,
'd'
)
},
/* Cinepak */
{
CODEC_ID_8BPS
,
MKTAG
(
'8'
,
'B'
,
'P'
,
'S'
)
},
/* Planar RGB (8BPS) */
{
CODEC_ID_NONE
,
0
},
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录