Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
75439bb3
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,发现更多精彩内容 >>
提交
75439bb3
编写于
2月 03, 2015
作者:
D
Diego Biurrun
提交者:
Vittorio Giovara
2月 03, 2015
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
siff: K&R formatting cosmetics
上级
11e05533
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
41 addition
and
40 deletion
+41
-40
libavformat/siff.c
libavformat/siff.c
+41
-40
未找到文件。
libavformat/siff.c
浏览文件 @
75439bb3
...
...
@@ -21,10 +21,11 @@
#include "libavutil/channel_layout.h"
#include "libavutil/intreadwrite.h"
#include "avformat.h"
#include "internal.h"
enum
SIFFTags
{
enum
SIFFTags
{
TAG_SIFF
=
MKTAG
(
'S'
,
'I'
,
'F'
,
'F'
),
TAG_BODY
=
MKTAG
(
'B'
,
'O'
,
'D'
,
'Y'
),
TAG_VBHD
=
MKTAG
(
'V'
,
'B'
,
'H'
,
'D'
),
...
...
@@ -33,7 +34,7 @@ enum SIFFTags{
TAG_SOUN
=
MKTAG
(
'S'
,
'O'
,
'U'
,
'N'
),
};
enum
VBFlags
{
enum
VBFlags
{
VB_HAS_GMC
=
0x01
,
VB_HAS_AUDIO
=
0x04
,
VB_HAS_VIDEO
=
0x08
,
...
...
@@ -41,7 +42,7 @@ enum VBFlags{
VB_HAS_LENGTH
=
0x20
};
typedef
struct
SIFFContext
{
typedef
struct
SIFFContext
{
int
frames
;
int
cur_frame
;
int
rate
;
...
...
@@ -58,7 +59,7 @@ typedef struct SIFFContext{
int
flags
;
uint8_t
gmc
[
4
];
}
SIFFContext
;
}
SIFFContext
;
static
int
siff_probe
(
AVProbeData
*
p
)
{
...
...
@@ -76,14 +77,14 @@ static int create_audio_stream(AVFormatContext *s, SIFFContext *c)
ast
=
avformat_new_stream
(
s
,
NULL
);
if
(
!
ast
)
return
-
1
;
ast
->
codec
->
codec_type
=
AVMEDIA_TYPE_AUDIO
;
ast
->
codec
->
codec_id
=
AV_CODEC_ID_PCM_U8
;
ast
->
codec
->
channels
=
1
;
ast
->
codec
->
channel_layout
=
AV_CH_LAYOUT_MONO
;
ast
->
codec
->
codec_type
=
AVMEDIA_TYPE_AUDIO
;
ast
->
codec
->
codec_id
=
AV_CODEC_ID_PCM_U8
;
ast
->
codec
->
channels
=
1
;
ast
->
codec
->
channel_layout
=
AV_CH_LAYOUT_MONO
;
ast
->
codec
->
bits_per_coded_sample
=
8
;
ast
->
codec
->
sample_rate
=
c
->
rate
;
ast
->
codec
->
sample_rate
=
c
->
rate
;
avpriv_set_pts_info
(
ast
,
16
,
1
,
c
->
rate
);
ast
->
start_time
=
0
;
ast
->
start_time
=
0
;
return
0
;
}
...
...
@@ -92,31 +93,31 @@ static int siff_parse_vbv1(AVFormatContext *s, SIFFContext *c, AVIOContext *pb)
AVStream
*
st
;
int
width
,
height
;
if
(
avio_rl32
(
pb
)
!=
TAG_VBHD
){
if
(
avio_rl32
(
pb
)
!=
TAG_VBHD
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"Header chunk is missing
\n
"
);
return
-
1
;
}
if
(
avio_rb32
(
pb
)
!=
32
)
{
if
(
avio_rb32
(
pb
)
!=
32
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"Header chunk size is incorrect
\n
"
);
return
-
1
;
}
if
(
avio_rl16
(
pb
)
!=
1
)
{
if
(
avio_rl16
(
pb
)
!=
1
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"Incorrect header version
\n
"
);
return
-
1
;
}
width
=
avio_rl16
(
pb
);
width
=
avio_rl16
(
pb
);
height
=
avio_rl16
(
pb
);
avio_skip
(
pb
,
4
);
c
->
frames
=
avio_rl16
(
pb
);
if
(
!
c
->
frames
)
{
if
(
!
c
->
frames
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"File contains no frames ???
\n
"
);
return
-
1
;
}
c
->
bits
=
avio_rl16
(
pb
);
c
->
rate
=
avio_rl16
(
pb
);
c
->
bits
=
avio_rl16
(
pb
);
c
->
rate
=
avio_rl16
(
pb
);
c
->
block_align
=
c
->
rate
*
(
c
->
bits
>>
3
);
avio_skip
(
pb
,
16
);
//zeroes
avio_skip
(
pb
,
16
);
//
zeroes
st
=
avformat_new_stream
(
s
,
NULL
);
if
(
!
st
)
...
...
@@ -132,7 +133,7 @@ static int siff_parse_vbv1(AVFormatContext *s, SIFFContext *c, AVIOContext *pb)
c
->
cur_frame
=
0
;
c
->
has_video
=
1
;
c
->
has_audio
=
!!
c
->
rate
;
c
->
curstrm
=
-
1
;
c
->
curstrm
=
-
1
;
if
(
c
->
has_audio
&&
create_audio_stream
(
s
,
c
)
<
0
)
return
-
1
;
return
0
;
...
...
@@ -140,17 +141,17 @@ static int siff_parse_vbv1(AVFormatContext *s, SIFFContext *c, AVIOContext *pb)
static
int
siff_parse_soun
(
AVFormatContext
*
s
,
SIFFContext
*
c
,
AVIOContext
*
pb
)
{
if
(
avio_rl32
(
pb
)
!=
TAG_SHDR
){
if
(
avio_rl32
(
pb
)
!=
TAG_SHDR
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"Header chunk is missing
\n
"
);
return
-
1
;
}
if
(
avio_rb32
(
pb
)
!=
8
)
{
if
(
avio_rb32
(
pb
)
!=
8
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"Header chunk size is incorrect
\n
"
);
return
-
1
;
}
avio_skip
(
pb
,
4
);
//unknown value
c
->
rate
=
avio_rl16
(
pb
);
c
->
bits
=
avio_rl16
(
pb
);
avio_skip
(
pb
,
4
);
//
unknown value
c
->
rate
=
avio_rl16
(
pb
);
c
->
bits
=
avio_rl16
(
pb
);
c
->
block_align
=
c
->
rate
*
(
c
->
bits
>>
3
);
return
create_audio_stream
(
s
,
c
);
}
...
...
@@ -158,15 +159,15 @@ static int siff_parse_soun(AVFormatContext *s, SIFFContext *c, AVIOContext *pb)
static
int
siff_read_header
(
AVFormatContext
*
s
)
{
AVIOContext
*
pb
=
s
->
pb
;
SIFFContext
*
c
=
s
->
priv_data
;
SIFFContext
*
c
=
s
->
priv_data
;
uint32_t
tag
;
if
(
avio_rl32
(
pb
)
!=
TAG_SIFF
)
return
-
1
;
avio_skip
(
pb
,
4
);
//ignore size
avio_skip
(
pb
,
4
);
//
ignore size
tag
=
avio_rl32
(
pb
);
if
(
tag
!=
TAG_VBV1
&&
tag
!=
TAG_SOUN
){
if
(
tag
!=
TAG_VBV1
&&
tag
!=
TAG_SOUN
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"Not a VBV file
\n
"
);
return
-
1
;
}
...
...
@@ -175,11 +176,11 @@ static int siff_read_header(AVFormatContext *s)
return
-
1
;
if
(
tag
==
TAG_SOUN
&&
siff_parse_soun
(
s
,
c
,
pb
)
<
0
)
return
-
1
;
if
(
avio_rl32
(
pb
)
!=
MKTAG
(
'B'
,
'O'
,
'D'
,
'Y'
)){
if
(
avio_rl32
(
pb
)
!=
MKTAG
(
'B'
,
'O'
,
'D'
,
'Y'
))
{
av_log
(
s
,
AV_LOG_ERROR
,
"'BODY' chunk is missing
\n
"
);
return
-
1
;
}
avio_skip
(
pb
,
4
);
//ignore size
avio_skip
(
pb
,
4
);
//
ignore size
return
0
;
}
...
...
@@ -189,20 +190,20 @@ static int siff_read_packet(AVFormatContext *s, AVPacket *pkt)
SIFFContext
*
c
=
s
->
priv_data
;
int
size
;
if
(
c
->
has_video
){
if
(
c
->
has_video
)
{
if
(
c
->
cur_frame
>=
c
->
frames
)
return
AVERROR
(
EIO
);
if
(
c
->
curstrm
==
-
1
){
if
(
c
->
curstrm
==
-
1
)
{
c
->
pktsize
=
avio_rl32
(
s
->
pb
)
-
4
;
c
->
flags
=
avio_rl16
(
s
->
pb
);
c
->
flags
=
avio_rl16
(
s
->
pb
);
c
->
gmcsize
=
(
c
->
flags
&
VB_HAS_GMC
)
?
4
:
0
;
if
(
c
->
gmcsize
)
avio_read
(
s
->
pb
,
c
->
gmc
,
c
->
gmcsize
);
c
->
sndsize
=
(
c
->
flags
&
VB_HAS_AUDIO
)
?
avio_rl32
(
s
->
pb
)
:
0
;
c
->
sndsize
=
(
c
->
flags
&
VB_HAS_AUDIO
)
?
avio_rl32
(
s
->
pb
)
:
0
;
c
->
curstrm
=
!!
(
c
->
flags
&
VB_HAS_AUDIO
);
}
if
(
!
c
->
curstrm
){
if
(
!
c
->
curstrm
)
{
size
=
c
->
pktsize
-
c
->
sndsize
;
if
(
av_new_packet
(
pkt
,
size
)
<
0
)
return
AVERROR
(
ENOMEM
);
...
...
@@ -211,21 +212,21 @@ static int siff_read_packet(AVFormatContext *s, AVPacket *pkt)
memcpy
(
pkt
->
data
+
2
,
c
->
gmc
,
c
->
gmcsize
);
avio_read
(
s
->
pb
,
pkt
->
data
+
2
+
c
->
gmcsize
,
size
-
c
->
gmcsize
-
2
);
pkt
->
stream_index
=
0
;
c
->
curstrm
=
-
1
;
}
else
{
c
->
curstrm
=
-
1
;
}
else
{
if
((
size
=
av_get_packet
(
s
->
pb
,
pkt
,
c
->
sndsize
-
4
))
<
0
)
return
AVERROR
(
EIO
);
pkt
->
stream_index
=
1
;
pkt
->
duration
=
size
;
c
->
curstrm
=
0
;
c
->
curstrm
=
0
;
}
if
(
!
c
->
cur_frame
||
c
->
curstrm
)
if
(
!
c
->
cur_frame
||
c
->
curstrm
)
pkt
->
flags
|=
AV_PKT_FLAG_KEY
;
if
(
c
->
curstrm
==
-
1
)
c
->
cur_frame
++
;
}
else
{
}
else
{
size
=
av_get_packet
(
s
->
pb
,
pkt
,
c
->
block_align
);
if
(
size
<=
0
)
if
(
size
<=
0
)
return
AVERROR
(
EIO
);
pkt
->
duration
=
size
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录