FFmpeg
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
•
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavformat
pvfdec.c
Go to the documentation of this file.
1
/*
2
* PVF demuxer
3
* Copyright (c) 2012 Paul B Mahol
4
*
5
* This file is part of FFmpeg.
6
*
7
* FFmpeg is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU Lesser General Public
9
* License as published by the Free Software Foundation; either
10
* version 2.1 of the License, or (at your option) any later version.
11
*
12
* FFmpeg is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
* Lesser General Public License for more details.
16
*
17
* You should have received a copy of the GNU Lesser General Public
18
* License along with FFmpeg; if not, write to the Free Software
19
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
*/
21
22
#include "
avformat.h
"
23
#include "
internal.h
"
24
#include "
pcm.h
"
25
26
static
int
pvf_probe
(
AVProbeData
*p)
27
{
28
if
(!memcmp(p->
buf
,
"PVF1\n"
, 5))
29
return
AVPROBE_SCORE_MAX
;
30
return
0;
31
}
32
33
static
int
pvf_read_header
(
AVFormatContext
*s)
34
{
35
char
buffer
[32];
36
AVStream
*st;
37
int
bps
, channels,
sample_rate
;
38
39
avio_skip
(s->
pb
, 5);
40
ff_get_line
(s->
pb
, buffer,
sizeof
(buffer));
41
if
(sscanf(buffer,
"%d %d %d"
,
42
&channels,
43
&sample_rate,
44
&bps) != 3)
45
return
AVERROR_INVALIDDATA
;
46
47
if
(channels <= 0 || bps <= 0 || sample_rate <= 0)
48
return
AVERROR_INVALIDDATA
;
49
50
st =
avformat_new_stream
(s,
NULL
);
51
if
(!st)
52
return
AVERROR
(ENOMEM);
53
54
st->
codec
->
codec_type
=
AVMEDIA_TYPE_AUDIO
;
55
st->
codec
->
channels
= channels;
56
st->
codec
->
sample_rate
=
sample_rate
;
57
st->
codec
->
codec_id
=
ff_get_pcm_codec_id
(bps, 0, 1, 0xFFFF);
58
st->
codec
->
bits_per_coded_sample
=
bps
;
59
st->
codec
->
block_align
= bps * st->
codec
->
channels
/ 8;
60
61
avpriv_set_pts_info
(st, 64, 1, st->
codec
->
sample_rate
);
62
63
return
0;
64
}
65
66
AVInputFormat
ff_pvf_demuxer
= {
67
.
name
=
"pvf"
,
68
.long_name =
NULL_IF_CONFIG_SMALL
(
"PVF (Portable Voice Format)"
),
69
.read_probe =
pvf_probe
,
70
.read_header =
pvf_read_header
,
71
.read_packet =
ff_pcm_read_packet
,
72
.read_seek =
ff_pcm_read_seek
,
73
.extensions =
"pvf"
,
74
.flags =
AVFMT_GENERIC_INDEX
,
75
};
Generated on Sat May 25 2013 03:58:48 for FFmpeg by
1.8.2