1 /*
2 * Cryo Interactive Entertainment HNM4 demuxer
3 *
4 * Copyright (c) 2012 David Kment
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 <inttypes.h>
24
28
29 #define HNM4_TAG MKTAG('H', 'N', 'M', '4')
30
31 #define HNM4_SAMPLE_RATE 22050
32 #define HNM4_FRAME_FPS 24
33
34 #define HNM4_CHUNK_ID_PL 19536
35 #define HNM4_CHUNK_ID_IZ 23113
36 #define HNM4_CHUNK_ID_IU 21833
37 #define HNM4_CHUNK_ID_SD 17491
38
54
56 {
58 return 0;
59
60 // check for HNM4 header.
61 // currently only HNM v4/v4A is supported
64
65 return 0;
66 }
67
69 {
73
74 /* default context members */
79
81
92
94
98 "invalid resolution: %ux%u\n", hnm->
width, hnm->
height);
100 }
101
102 // TODO: find a better way to detect HNM4A
103 if (hnm->
width == 640)
105 else
107
110
117
120
122
124
125 return 0;
126 }
127
129 {
132 int ret = 0;
133
134 uint32_t superchunk_size, chunk_size;
135 uint16_t chunk_id;
136
139
141 /* parse next superchunk */
144
146 }
147
152
155 "invalid chunk size: %"PRIu32", offset: %"PRId64"\n",
159 }
160
161 switch (chunk_id) {
170 break;
171
175 break;
176
177 default:
182 break;
183 }
184
185 return ret;
186 }
187
189 {
191
194
195 return 0;
196 }
197
207 };
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
static int hnm_probe(AVProbeData *p)
#define AV_LOG_WARNING
Something somehow does not look correct.
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
fseek() equivalent for AVIOContext.
int64_t avio_skip(AVIOContext *s, int64_t offset)
Skip given number of bytes forward.
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
AVStream * avformat_new_stream(AVFormatContext *s, const AVCodec *c)
Add a new stream to a media file.
static int hnm_read_packet(AVFormatContext *s, AVPacket *pkt)
#define AVERROR_EOF
End of file.
static av_cold int read_close(AVFormatContext *ctx)
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
unsigned int avio_rl32(AVIOContext *s)
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
enum AVMediaType codec_type
General type of the encoded data.
int extradata_size
Size of the extradata content in bytes.
int buf_size
Size of buf except extra allocated bytes.
unsigned char * buf
Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero.
uint32_t superchunk_remaining
AVInputFormat ff_hnm_demuxer
static int hnm_read_header(AVFormatContext *s)
static int read_header(FFV1Context *f)
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
static int hnm_read_close(AVFormatContext *s)
AVIOContext * pb
I/O context.
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
This structure contains the data a format has to probe a file.
unsigned int avio_rl16(AVIOContext *s)
int64_t start_time
Decoding: pts of the first frame of the stream in presentation order, in stream time base...
void av_init_packet(AVPacket *pkt)
Initialize optional fields of a packet with default values.
int eof_reached
true if eof reached
void * priv_data
Format private data.
uint8_t * extradata
Extra binary data needed for initializing the decoder, codec-dependent.
AVCodecParameters * codecpar
Codec parameters associated with this stream.
uint32_t codec_tag
Additional information about the codec (corresponds to the AVI FOURCC).
unsigned int avio_rl24(AVIOContext *s)
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_RL32
This structure stores compressed data.