FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavformat
ncdec.c
Go to the documentation of this file.
1
/*
2
* NC camera feed demuxer
3
* Copyright (c) 2009 Nicolas Martin (martinic at iro dot umontreal dot ca)
4
* Edouard Auvinet
5
*
6
* This file is part of FFmpeg.
7
*
8
* FFmpeg is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU Lesser General Public
10
* License as published by the Free Software Foundation; either
11
* version 2.1 of the License, or (at your option) any later version.
12
*
13
* FFmpeg is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
* Lesser General Public License for more details.
17
*
18
* You should have received a copy of the GNU Lesser General Public
19
* License along with FFmpeg; if not, write to the Free Software
20
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
*/
22
23
#include "
libavutil/intreadwrite.h
"
24
#include "
avformat.h
"
25
#include "
internal.h
"
26
27
#define NC_VIDEO_FLAG 0x1A5
28
29
static
int
nc_probe
(
AVProbeData
*probe_packet)
30
{
31
int
size
;
32
33
if
(
AV_RB32
(probe_packet->
buf
) !=
NC_VIDEO_FLAG
)
34
return
0;
35
36
size =
AV_RL16
(probe_packet->
buf
+ 5);
37
38
if
(size + 20 > probe_packet->
buf_size
)
39
return
AVPROBE_SCORE_MAX
/4;
40
41
if
(
AV_RB32
(probe_packet->
buf
+16+size) ==
NC_VIDEO_FLAG
)
42
return
AVPROBE_SCORE_MAX
;
43
44
return
0;
45
}
46
47
static
int
nc_read_header
(
AVFormatContext
*
s
)
48
{
49
AVStream
*st =
avformat_new_stream
(s, NULL);
50
51
if
(!st)
52
return
AVERROR
(ENOMEM);
53
54
st->
codec
->
codec_type
=
AVMEDIA_TYPE_VIDEO
;
55
st->
codec
->
codec_id
=
AV_CODEC_ID_MPEG4
;
56
st->
need_parsing
=
AVSTREAM_PARSE_FULL
;
57
58
avpriv_set_pts_info
(st, 64, 1, 100);
59
60
return
0;
61
}
62
63
static
int
nc_read_packet
(
AVFormatContext
*
s
,
AVPacket
*
pkt
)
64
{
65
int
size
;
66
int
ret
;
67
68
uint32_t
state
=-1;
69
while
(state !=
NC_VIDEO_FLAG
) {
70
if
(
avio_feof
(s->
pb
))
71
return
AVERROR
(EIO);
72
state = (state<<8) +
avio_r8
(s->
pb
);
73
}
74
75
avio_r8
(s->
pb
);
76
size =
avio_rl16
(s->
pb
);
77
avio_skip
(s->
pb
, 9);
78
79
if
(size == 0) {
80
av_log
(s,
AV_LOG_DEBUG
,
"Next packet size is zero\n"
);
81
return
AVERROR
(EAGAIN);
82
}
83
84
ret =
av_get_packet
(s->
pb
, pkt, size);
85
if
(ret != size) {
86
if
(ret > 0)
av_free_packet
(pkt);
87
return
AVERROR
(EIO);
88
}
89
90
pkt->
stream_index
= 0;
91
return
size
;
92
}
93
94
AVInputFormat
ff_nc_demuxer
= {
95
.
name
=
"nc"
,
96
.long_name =
NULL_IF_CONFIG_SMALL
(
"NC camera feed"
),
97
.read_probe =
nc_probe
,
98
.read_header =
nc_read_header
,
99
.read_packet =
nc_read_packet
,
100
.extensions =
"v"
,
101
};
Generated on Sun Sep 14 2014 18:56:14 for FFmpeg by
1.8.2