Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
ba118447
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,发现更多精彩内容 >>
提交
ba118447
编写于
9月 12, 2003
作者:
M
Mike Melanson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
deploy palette control API
Originally committed as revision 2266 to
svn://svn.ffmpeg.org/ffmpeg/trunk
上级
50f52fcd
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
30 addition
and
18 deletion
+30
-18
libavcodec/avcodec.h
libavcodec/avcodec.h
+19
-0
libavcodec/xan.c
libavcodec/xan.c
+6
-6
libavformat/wc3movie.c
libavformat/wc3movie.c
+5
-12
未找到文件。
libavcodec/avcodec.h
浏览文件 @
ba118447
...
...
@@ -1305,6 +1305,25 @@ typedef struct AVPicture {
int
linesize
[
4
];
///< number of bytes per line
}
AVPicture
;
/**
* AVPaletteControl
* This structure defines a method for communicating palette changes
* between and demuxer and a decoder.
*/
typedef
struct
AVPaletteControl
{
/* demuxer sets this to 1 to indicate the palette has changed;
* decoder resets to 0 */
int
palette_changed
;
/* 256 3-byte RGB palette entries; the components should be
* formatted in the buffer as "RGBRGB..." and should be scaled to
* 8 bits if they originally represented 6-bit VGA palette
* components */
unsigned
char
palette
[
256
*
3
];
}
AVPaletteControl
;
extern
AVCodec
ac3_encoder
;
extern
AVCodec
mp2_encoder
;
extern
AVCodec
mp3lame_encoder
;
...
...
libavcodec/xan.c
浏览文件 @
ba118447
...
...
@@ -115,9 +115,9 @@ static int xan_decode_init(AVCodecContext *avctx)
s
->
avctx
=
avctx
;
if
((
avctx
->
codec
->
id
==
CODEC_ID_XAN_WC3
)
&&
(
s
->
avctx
->
extradata_size
!=
PALETTE_CONTROL_SIZE
))
{
(
s
->
avctx
->
extradata_size
!=
sizeof
(
AVPaletteControl
)
))
{
printf
(
" WC3 Xan video: expected extradata_size of %d
\n
"
,
PALETTE_CONTROL_SIZE
);
sizeof
(
AVPaletteControl
)
);
return
-
1
;
}
...
...
@@ -809,13 +809,13 @@ static int xan_decode_frame(AVCodecContext *avctx,
uint8_t
*
buf
,
int
buf_size
)
{
XanContext
*
s
=
avctx
->
priv_data
;
unsigned
char
*
palette_control
=
avctx
->
extradata
;
AVPaletteControl
*
palette_control
=
(
AVPaletteControl
*
)
avctx
->
extradata
;
int
keyframe
=
0
;
if
(
palette_control
[
0
]
)
{
if
(
palette_control
->
palette_changed
)
{
/* load the new palette and reset the palette control */
xan_wc3_build_palette
(
s
,
&
palette_control
[
1
]
);
palette_control
[
0
]
=
0
;
xan_wc3_build_palette
(
s
,
palette_control
->
palette
);
palette_control
->
palette_changed
=
0
;
keyframe
=
1
;
}
...
...
libavformat/wc3movie.c
浏览文件 @
ba118447
...
...
@@ -74,9 +74,6 @@
#define PALETTE_SIZE (256 * 3)
#define PALETTE_COUNT 256
/* palette is 3 bytes per entry plus 1 byte at the front to indicate to the
* decoder if the palette has changed */
#define PALETTE_CONTROL_SIZE ((PALETTE_COUNT * 3) + 1)
typedef
struct
Wc3DemuxContext
{
int
width
;
...
...
@@ -87,8 +84,7 @@ typedef struct Wc3DemuxContext {
int
video_stream_index
;
int
audio_stream_index
;
/* save a reference to extradata */
unsigned
char
*
palette_control
;
AVPaletteControl
palette_control
;
}
Wc3DemuxContext
;
...
...
@@ -163,7 +159,6 @@ static int wc3_read_header(AVFormatContext *s,
wc3
->
palette_count
=
0
;
wc3
->
pts
=
0
;
wc3
->
video_stream_index
=
wc3
->
audio_stream_index
=
0
;
wc3
->
palette_control
=
av_mallocz
(
PALETTE_CONTROL_SIZE
);;
/* skip the first 3 32-bit numbers */
url_fseek
(
pb
,
12
,
SEEK_CUR
);
...
...
@@ -263,8 +258,8 @@ static int wc3_read_header(AVFormatContext *s,
st
->
codec
.
height
=
wc3
->
height
;
/* palette considerations */
st
->
codec
.
extradata_size
=
PALETTE_CONTROL_SIZE
;
st
->
codec
.
extradata
=
wc3
->
palette_control
;
st
->
codec
.
extradata_size
=
sizeof
(
AVPaletteControl
)
;
st
->
codec
.
extradata
=
&
wc3
->
palette_control
;
st
=
av_new_stream
(
s
,
0
);
if
(
!
st
)
...
...
@@ -324,11 +319,10 @@ static int wc3_read_packet(AVFormatContext *s,
palette_number
=
LE_32
(
&
preamble
[
0
]);
if
(
palette_number
>=
wc3
->
palette_count
)
return
AVERROR_INVALIDDATA
;
memcpy
(
wc3
->
palette_control
+
1
,
memcpy
(
wc3
->
palette_control
.
palette
,
&
wc3
->
palettes
[
palette_number
*
PALETTE_COUNT
*
3
],
PALETTE_COUNT
*
3
);
/* indicate a palette change */
wc3
->
palette_control
[
0
]
=
1
;
wc3
->
palette_control
.
palette_changed
=
1
;
break
;
case
VGA__TAG
:
...
...
@@ -396,7 +390,6 @@ static int wc3_read_close(AVFormatContext *s)
Wc3DemuxContext
*
wc3
=
(
Wc3DemuxContext
*
)
s
->
priv_data
;
av_free
(
wc3
->
palettes
);
av_free
(
wc3
->
palette_control
);
return
0
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录