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
txd.c
Go to the documentation of this file.
1
/*
2
* Renderware TeXture Dictionary (.txd) demuxer
3
* Copyright (c) 2007 Ivo van Poorten
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 "
libavutil/intreadwrite.h
"
23
#include "
avformat.h
"
24
#include "
internal.h
"
25
26
#define TXD_FILE 0x16
27
#define TXD_INFO 0x01
28
#define TXD_EXTRA 0x03
29
#define TXD_TEXTURE 0x15
30
#define TXD_TEXTURE_DATA 0x01
31
#define TXD_MARKER 0x1803ffff
32
#define TXD_MARKER2 0x1003ffff
33
34
static
int
txd_probe
(
AVProbeData
* pd) {
35
if
(
AV_RL32
(pd->
buf
) ==
TXD_FILE
&&
36
(
AV_RL32
(pd->
buf
+8) ==
TXD_MARKER
||
AV_RL32
(pd->
buf
+8) ==
TXD_MARKER2
))
37
return
AVPROBE_SCORE_MAX
;
38
return
0;
39
}
40
41
static
int
txd_read_header
(
AVFormatContext
*
s
) {
42
AVStream
*st;
43
44
st =
avformat_new_stream
(s,
NULL
);
45
if
(!st)
46
return
AVERROR
(ENOMEM);
47
st->
codec
->
codec_type
=
AVMEDIA_TYPE_VIDEO
;
48
st->
codec
->
codec_id
=
AV_CODEC_ID_TXD
;
49
avpriv_set_pts_info
(st, 64, 1, 5);
50
st->
avg_frame_rate
=
av_inv_q
(st->
time_base
);
51
/* the parameters will be extracted from the compressed bitstream */
52
53
return
0;
54
}
55
56
static
int
txd_read_packet
(
AVFormatContext
*
s
,
AVPacket
*
pkt
) {
57
AVIOContext
*pb = s->
pb
;
58
unsigned
int
id
, chunk_size, marker;
59
int
ret
;
60
61
next_chunk:
62
id
=
avio_rl32
(pb);
63
chunk_size =
avio_rl32
(pb);
64
marker =
avio_rl32
(pb);
65
66
if
(
avio_feof
(s->
pb
))
67
return
AVERROR_EOF
;
68
if
(marker !=
TXD_MARKER
&& marker !=
TXD_MARKER2
) {
69
av_log
(s,
AV_LOG_ERROR
,
"marker does not match\n"
);
70
return
AVERROR_INVALIDDATA
;
71
}
72
73
switch
(
id
) {
74
case
TXD_INFO
:
75
if
(chunk_size > 100)
76
break
;
77
case
TXD_EXTRA
:
78
avio_skip
(s->
pb
, chunk_size);
79
case
TXD_FILE
:
80
case
TXD_TEXTURE
:
81
goto
next_chunk;
82
default
:
83
av_log
(s,
AV_LOG_ERROR
,
"unknown chunk id %i\n"
,
id
);
84
return
AVERROR_INVALIDDATA
;
85
}
86
87
ret =
av_get_packet
(s->
pb
, pkt, chunk_size);
88
if
(ret < 0)
89
return
ret
;
90
pkt->
stream_index
= 0;
91
92
return
0;
93
}
94
95
AVInputFormat
ff_txd_demuxer
= {
96
.
name
=
"txd"
,
97
.long_name =
NULL_IF_CONFIG_SMALL
(
"Renderware TeXture Dictionary"
),
98
.read_probe =
txd_probe
,
99
.read_header =
txd_read_header
,
100
.read_packet =
txd_read_packet
,
101
};
Generated on Sun Mar 8 2015 02:35:01 for FFmpeg by
1.8.2