Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
0bef08e5
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,发现更多精彩内容 >>
提交
0bef08e5
编写于
7月 12, 2008
作者:
M
Michael Niedermayer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
New codec probing system try #1.
Originally committed as revision 14184 to
svn://svn.ffmpeg.org/ffmpeg/trunk
上级
3e86dba2
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
46 addition
and
2 deletion
+46
-2
libavcodec/avcodec.h
libavcodec/avcodec.h
+2
-0
libavformat/asf.c
libavformat/asf.c
+1
-1
libavformat/avformat.h
libavformat/avformat.h
+10
-0
libavformat/utils.c
libavformat/utils.c
+33
-1
未找到文件。
libavcodec/avcodec.h
浏览文件 @
0bef08e5
...
...
@@ -313,6 +313,8 @@ enum CodecID {
/* other specific kind of codecs (generally used for attachments) */
CODEC_ID_TTF
=
0x18000
,
CODEC_ID_PROBE
=
0x19000
,
///< codec_id is not known (like CODEC_ID_NONE) but lavf should attempt to identify it
CODEC_ID_MPEG2TS
=
0x20000
,
/**< _FAKE_ codec to indicate a raw MPEG-2 TS
* stream (only used by libavformat) */
};
...
...
libavformat/asf.c
浏览文件 @
0bef08e5
...
...
@@ -264,7 +264,7 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
if
(
is_dvr_ms_audio
)
{
// codec_id and codec_tag are unreliable in dvr_ms
// files. Set them later by probing stream.
st
->
codec
->
codec_id
=
CODEC_ID_
NON
E
;
st
->
codec
->
codec_id
=
CODEC_ID_
PROB
E
;
st
->
codec
->
codec_tag
=
0
;
}
st
->
need_parsing
=
AVSTREAM_PARSE_FULL
;
...
...
libavformat/avformat.h
浏览文件 @
0bef08e5
...
...
@@ -391,6 +391,8 @@ typedef struct AVStream {
char
*
filename
;
/**< source filename of the stream */
int
disposition
;
/**< AV_DISPOSITION_* bitfield */
AVProbeData
probe_data
;
}
AVStream
;
#define AV_PROGRAM_RUNNING 1
...
...
@@ -555,6 +557,14 @@ typedef struct AVFormatContext {
*/
int
debug
;
#define FF_FDEBUG_TS 0x0001
/**
* raw packets from the demuxer, prior to parsing and decoding.
* This buffer is used for buffering packets until the codec can
* be identified, as parsing cannot be done without knowing the
* codec.
*/
struct
AVPacketList
*
raw_packet_buffer
;
}
AVFormatContext
;
typedef
struct
AVPacketList
{
...
...
libavformat/utils.c
浏览文件 @
0bef08e5
...
...
@@ -540,12 +540,30 @@ int av_read_packet(AVFormatContext *s, AVPacket *pkt)
{
int
ret
;
AVStream
*
st
;
for
(;;){
AVPacketList
*
pktl
=
s
->
raw_packet_buffer
;
if
(
pktl
)
{
*
pkt
=
pktl
->
pkt
;
if
(
s
->
streams
[
pkt
->
stream_index
]
->
codec
->
codec_id
!=
CODEC_ID_PROBE
){
s
->
raw_packet_buffer
=
pktl
->
next
;
av_free
(
pktl
);
return
0
;
}
}
av_init_packet
(
pkt
);
ret
=
s
->
iformat
->
read_packet
(
s
,
pkt
);
if
(
ret
<
0
)
return
ret
;
st
=
s
->
streams
[
pkt
->
stream_index
];
if
(
!
pktl
&&
st
->
codec
->
codec_id
!=
CODEC_ID_PROBE
)
return
ret
;
add_to_pktbuf
(
&
s
->
raw_packet_buffer
,
pkt
);
switch
(
st
->
codec
->
codec_type
){
case
CODEC_TYPE_VIDEO
:
if
(
s
->
video_codec_id
)
st
->
codec
->
codec_id
=
s
->
video_codec_id
;
...
...
@@ -558,7 +576,21 @@ int av_read_packet(AVFormatContext *s, AVPacket *pkt)
break
;
}
return
ret
;
if
(
st
->
codec
->
codec_id
==
CODEC_ID_PROBE
){
AVProbeData
*
pd
=
&
st
->
probe_data
;
pd
->
buf
=
av_realloc
(
pd
->
buf
,
pd
->
buf_size
+
pkt
->
size
+
AVPROBE_PADDING_SIZE
);
memcpy
(
pd
->
buf
+
pd
->
buf_size
,
pkt
->
data
,
pkt
->
size
);
pd
->
buf_size
+=
pkt
->
size
;
memset
(
pd
->
buf
+
pd
->
buf_size
,
0
,
AVPROBE_PADDING_SIZE
);
set_codec_from_probe_data
(
st
,
pd
,
1
);
if
(
st
->
codec
->
codec_id
!=
CODEC_ID_PROBE
){
pd
->
buf_size
=
0
;
av_freep
(
&
pd
->
buf
);
}
}
}
}
/**********************************************************/
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录