* commit '1b891d17c531e8a63c2974aab4bf997ce70746f3':
avconv: fix bitrate report when writing to /dev/null
avfilter: fix graphparser memleaks on error paths
rawdec: remove ff_raw_read_header
pcmdec: remove dependency from rawdec
g722: refactor out of rawdec.c
rawvideo: use a specific read_header
Conflicts:
ffmpeg.c
libavformat/Makefile
libavformat/rawdec.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
... | ... |
@@ -1082,10 +1082,14 @@ static void print_report(int is_last_report, int64_t timer_start, int64_t cur_ti |
1082 | 1082 |
oc = output_files[0]->ctx; |
1083 | 1083 |
|
1084 | 1084 |
total_size = avio_size(oc->pb); |
1085 |
- if (total_size < 0) { // FIXME improve avio_size() so it works with non seekable output too |
|
1085 |
+ if (total_size <= 0) // FIXME improve avio_size() so it works with non seekable output too |
|
1086 | 1086 |
total_size = avio_tell(oc->pb); |
1087 |
- if (total_size < 0) |
|
1088 |
- total_size = 0; |
|
1087 |
+ if (total_size < 0) { |
|
1088 |
+ char errbuf[128]; |
|
1089 |
+ av_strerror(total_size, errbuf, sizeof(errbuf)); |
|
1090 |
+ av_log(NULL, AV_LOG_VERBOSE, "Bitrate not available, " |
|
1091 |
+ "avio_tell() failed: %s\n", errbuf); |
|
1092 |
+ total_size = 0; |
|
1089 | 1093 |
} |
1090 | 1094 |
|
1091 | 1095 |
buf[0] = '\0'; |
... | ... |
@@ -239,10 +239,11 @@ static int link_filter_inouts(AVFilterContext *filt_ctx, |
239 | 239 |
return AVERROR(ENOMEM); |
240 | 240 |
|
241 | 241 |
if (p->filter_ctx) { |
242 |
- if ((ret = link_filter(p->filter_ctx, p->pad_idx, filt_ctx, pad, log_ctx)) < 0) |
|
243 |
- return ret; |
|
242 |
+ ret = link_filter(p->filter_ctx, p->pad_idx, filt_ctx, pad, log_ctx); |
|
244 | 243 |
av_free(p->name); |
245 | 244 |
av_free(p); |
245 |
+ if (ret < 0) |
|
246 |
+ return ret; |
|
246 | 247 |
} else { |
247 | 248 |
p->filter_ctx = filt_ctx; |
248 | 249 |
p->pad_idx = pad; |
... | ... |
@@ -290,8 +291,10 @@ static int parse_inputs(const char **buf, AVFilterInOut **curr_inputs, |
290 | 290 |
av_free(name); |
291 | 291 |
} else { |
292 | 292 |
/* Not in the list, so add it as an input */ |
293 |
- if (!(match = av_mallocz(sizeof(AVFilterInOut)))) |
|
293 |
+ if (!(match = av_mallocz(sizeof(AVFilterInOut)))) { |
|
294 |
+ av_free(name); |
|
294 | 295 |
return AVERROR(ENOMEM); |
296 |
+ } |
|
295 | 297 |
match->name = name; |
296 | 298 |
match->pad_idx = pad; |
297 | 299 |
} |
... | ... |
@@ -319,24 +322,27 @@ static int parse_outputs(const char **buf, AVFilterInOut **curr_inputs, |
319 | 319 |
AVFilterInOut *match; |
320 | 320 |
|
321 | 321 |
AVFilterInOut *input = *curr_inputs; |
322 |
+ |
|
323 |
+ if (!name) |
|
324 |
+ return AVERROR(EINVAL); |
|
325 |
+ |
|
322 | 326 |
if (!input) { |
323 | 327 |
av_log(log_ctx, AV_LOG_ERROR, |
324 |
- "No output pad can be associated to link label '%s'.\n", |
|
325 |
- name); |
|
328 |
+ "No output pad can be associated to link label '%s'.\n", name); |
|
329 |
+ av_free(name); |
|
326 | 330 |
return AVERROR(EINVAL); |
327 | 331 |
} |
328 | 332 |
*curr_inputs = (*curr_inputs)->next; |
329 | 333 |
|
330 |
- if (!name) |
|
331 |
- return AVERROR(EINVAL); |
|
332 |
- |
|
333 | 334 |
/* First check if the label is not in the open_inputs list */ |
334 | 335 |
match = extract_inout(name, open_inputs); |
335 | 336 |
|
336 | 337 |
if (match) { |
337 | 338 |
if ((ret = link_filter(input->filter_ctx, input->pad_idx, |
338 |
- match->filter_ctx, match->pad_idx, log_ctx)) < 0) |
|
339 |
+ match->filter_ctx, match->pad_idx, log_ctx)) < 0) { |
|
340 |
+ av_free(name); |
|
339 | 341 |
return ret; |
342 |
+ } |
|
340 | 343 |
av_free(match->name); |
341 | 344 |
av_free(name); |
342 | 345 |
av_free(match); |
... | ... |
@@ -112,7 +112,7 @@ OBJS-$(CONFIG_GIF_MUXER) += gif.o |
112 | 112 |
OBJS-$(CONFIG_GSM_DEMUXER) += gsmdec.o |
113 | 113 |
OBJS-$(CONFIG_GXF_DEMUXER) += gxf.o |
114 | 114 |
OBJS-$(CONFIG_GXF_MUXER) += gxfenc.o audiointerleave.o |
115 |
-OBJS-$(CONFIG_G722_DEMUXER) += rawdec.o |
|
115 |
+OBJS-$(CONFIG_G722_DEMUXER) += g722.o rawdec.o |
|
116 | 116 |
OBJS-$(CONFIG_G722_MUXER) += rawenc.o |
117 | 117 |
OBJS-$(CONFIG_G723_1_DEMUXER) += g723_1.o |
118 | 118 |
OBJS-$(CONFIG_G723_1_MUXER) += rawenc.o |
... | ... |
@@ -220,51 +220,51 @@ OBJS-$(CONFIG_OGG_MUXER) += oggenc.o \ |
220 | 220 |
OBJS-$(CONFIG_OMA_DEMUXER) += omadec.o pcm.o oma.o |
221 | 221 |
OBJS-$(CONFIG_OMA_MUXER) += omaenc.o rawenc.o oma.o id3v2enc.o |
222 | 222 |
OBJS-$(CONFIG_PAF_DEMUXER) += paf.o |
223 |
-OBJS-$(CONFIG_PCM_ALAW_DEMUXER) += pcmdec.o pcm.o rawdec.o |
|
223 |
+OBJS-$(CONFIG_PCM_ALAW_DEMUXER) += pcmdec.o pcm.o |
|
224 | 224 |
OBJS-$(CONFIG_PCM_ALAW_MUXER) += pcmenc.o rawenc.o |
225 |
-OBJS-$(CONFIG_PCM_F32BE_DEMUXER) += pcmdec.o pcm.o rawdec.o |
|
225 |
+OBJS-$(CONFIG_PCM_F32BE_DEMUXER) += pcmdec.o pcm.o |
|
226 | 226 |
OBJS-$(CONFIG_PCM_F32BE_MUXER) += pcmenc.o rawenc.o |
227 |
-OBJS-$(CONFIG_PCM_F32LE_DEMUXER) += pcmdec.o pcm.o rawdec.o |
|
227 |
+OBJS-$(CONFIG_PCM_F32LE_DEMUXER) += pcmdec.o pcm.o |
|
228 | 228 |
OBJS-$(CONFIG_PCM_F32LE_MUXER) += pcmenc.o rawenc.o |
229 |
-OBJS-$(CONFIG_PCM_F64BE_DEMUXER) += pcmdec.o pcm.o rawdec.o |
|
229 |
+OBJS-$(CONFIG_PCM_F64BE_DEMUXER) += pcmdec.o pcm.o |
|
230 | 230 |
OBJS-$(CONFIG_PCM_F64BE_MUXER) += pcmenc.o rawenc.o |
231 |
-OBJS-$(CONFIG_PCM_F64LE_DEMUXER) += pcmdec.o pcm.o rawdec.o |
|
231 |
+OBJS-$(CONFIG_PCM_F64LE_DEMUXER) += pcmdec.o pcm.o |
|
232 | 232 |
OBJS-$(CONFIG_PCM_F64LE_MUXER) += pcmenc.o rawenc.o |
233 |
-OBJS-$(CONFIG_PCM_MULAW_DEMUXER) += pcmdec.o pcm.o rawdec.o |
|
233 |
+OBJS-$(CONFIG_PCM_MULAW_DEMUXER) += pcmdec.o pcm.o |
|
234 | 234 |
OBJS-$(CONFIG_PCM_MULAW_MUXER) += pcmenc.o rawenc.o |
235 |
-OBJS-$(CONFIG_PCM_S16BE_DEMUXER) += pcmdec.o pcm.o rawdec.o |
|
235 |
+OBJS-$(CONFIG_PCM_S16BE_DEMUXER) += pcmdec.o pcm.o |
|
236 | 236 |
OBJS-$(CONFIG_PCM_S16BE_MUXER) += pcmenc.o rawenc.o |
237 |
-OBJS-$(CONFIG_PCM_S16LE_DEMUXER) += pcmdec.o pcm.o rawdec.o |
|
237 |
+OBJS-$(CONFIG_PCM_S16LE_DEMUXER) += pcmdec.o pcm.o |
|
238 | 238 |
OBJS-$(CONFIG_PCM_S16LE_MUXER) += pcmenc.o rawenc.o |
239 |
-OBJS-$(CONFIG_PCM_S24BE_DEMUXER) += pcmdec.o pcm.o rawdec.o |
|
239 |
+OBJS-$(CONFIG_PCM_S24BE_DEMUXER) += pcmdec.o pcm.o |
|
240 | 240 |
OBJS-$(CONFIG_PCM_S24BE_MUXER) += pcmenc.o rawenc.o |
241 |
-OBJS-$(CONFIG_PCM_S24LE_DEMUXER) += pcmdec.o pcm.o rawdec.o |
|
241 |
+OBJS-$(CONFIG_PCM_S24LE_DEMUXER) += pcmdec.o pcm.o |
|
242 | 242 |
OBJS-$(CONFIG_PCM_S24LE_MUXER) += pcmenc.o rawenc.o |
243 |
-OBJS-$(CONFIG_PCM_S32BE_DEMUXER) += pcmdec.o pcm.o rawdec.o |
|
243 |
+OBJS-$(CONFIG_PCM_S32BE_DEMUXER) += pcmdec.o pcm.o |
|
244 | 244 |
OBJS-$(CONFIG_PCM_S32BE_MUXER) += pcmenc.o rawenc.o |
245 |
-OBJS-$(CONFIG_PCM_S32LE_DEMUXER) += pcmdec.o pcm.o rawdec.o |
|
245 |
+OBJS-$(CONFIG_PCM_S32LE_DEMUXER) += pcmdec.o pcm.o |
|
246 | 246 |
OBJS-$(CONFIG_PCM_S32LE_MUXER) += pcmenc.o rawenc.o |
247 |
-OBJS-$(CONFIG_PCM_S8_DEMUXER) += pcmdec.o pcm.o rawdec.o |
|
247 |
+OBJS-$(CONFIG_PCM_S8_DEMUXER) += pcmdec.o pcm.o |
|
248 | 248 |
OBJS-$(CONFIG_PCM_S8_MUXER) += pcmenc.o rawenc.o |
249 |
-OBJS-$(CONFIG_PCM_U16BE_DEMUXER) += pcmdec.o pcm.o rawdec.o |
|
249 |
+OBJS-$(CONFIG_PCM_U16BE_DEMUXER) += pcmdec.o pcm.o |
|
250 | 250 |
OBJS-$(CONFIG_PCM_U16BE_MUXER) += pcmenc.o rawenc.o |
251 |
-OBJS-$(CONFIG_PCM_U16LE_DEMUXER) += pcmdec.o pcm.o rawdec.o |
|
251 |
+OBJS-$(CONFIG_PCM_U16LE_DEMUXER) += pcmdec.o pcm.o |
|
252 | 252 |
OBJS-$(CONFIG_PCM_U16LE_MUXER) += pcmenc.o rawenc.o |
253 |
-OBJS-$(CONFIG_PCM_U24BE_DEMUXER) += pcmdec.o pcm.o rawdec.o |
|
253 |
+OBJS-$(CONFIG_PCM_U24BE_DEMUXER) += pcmdec.o pcm.o |
|
254 | 254 |
OBJS-$(CONFIG_PCM_U24BE_MUXER) += pcmenc.o rawenc.o |
255 |
-OBJS-$(CONFIG_PCM_U24LE_DEMUXER) += pcmdec.o pcm.o rawdec.o |
|
255 |
+OBJS-$(CONFIG_PCM_U24LE_DEMUXER) += pcmdec.o pcm.o |
|
256 | 256 |
OBJS-$(CONFIG_PCM_U24LE_MUXER) += pcmenc.o rawenc.o |
257 |
-OBJS-$(CONFIG_PCM_U32BE_DEMUXER) += pcmdec.o pcm.o rawdec.o |
|
257 |
+OBJS-$(CONFIG_PCM_U32BE_DEMUXER) += pcmdec.o pcm.o |
|
258 | 258 |
OBJS-$(CONFIG_PCM_U32BE_MUXER) += pcmenc.o rawenc.o |
259 |
-OBJS-$(CONFIG_PCM_U32LE_DEMUXER) += pcmdec.o pcm.o rawdec.o |
|
259 |
+OBJS-$(CONFIG_PCM_U32LE_DEMUXER) += pcmdec.o pcm.o |
|
260 | 260 |
OBJS-$(CONFIG_PCM_U32LE_MUXER) += pcmenc.o rawenc.o |
261 |
-OBJS-$(CONFIG_PCM_U8_DEMUXER) += pcmdec.o pcm.o rawdec.o |
|
261 |
+OBJS-$(CONFIG_PCM_U8_DEMUXER) += pcmdec.o pcm.o |
|
262 | 262 |
OBJS-$(CONFIG_PCM_U8_MUXER) += pcmenc.o rawenc.o |
263 | 263 |
OBJS-$(CONFIG_PMP_DEMUXER) += pmpdec.o |
264 | 264 |
OBJS-$(CONFIG_PVA_DEMUXER) += pva.o |
265 | 265 |
OBJS-$(CONFIG_QCP_DEMUXER) += qcp.o |
266 | 266 |
OBJS-$(CONFIG_R3D_DEMUXER) += r3d.o |
267 |
-OBJS-$(CONFIG_RAWVIDEO_DEMUXER) += rawvideodec.o rawdec.o |
|
267 |
+OBJS-$(CONFIG_RAWVIDEO_DEMUXER) += rawvideodec.o |
|
268 | 268 |
OBJS-$(CONFIG_RAWVIDEO_MUXER) += rawenc.o |
269 | 269 |
OBJS-$(CONFIG_REALTEXT_DEMUXER) += realtextdec.o |
270 | 270 |
OBJS-$(CONFIG_RL2_DEMUXER) += rl2.o |
271 | 271 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,57 @@ |
0 |
+/* |
|
1 |
+ * g722 raw demuxer |
|
2 |
+ * Copyright (c) 2010 Martin Storsjo |
|
3 |
+ * |
|
4 |
+ * This file is part of FFmpeg. |
|
5 |
+ * |
|
6 |
+ * FFmpeg is free software; you can redistribute it and/or |
|
7 |
+ * modify it under the terms of the GNU Lesser General Public |
|
8 |
+ * License as published by the Free Software Foundation; either |
|
9 |
+ * version 2.1 of the License, or (at your option) any later version. |
|
10 |
+ * |
|
11 |
+ * FFmpeg is distributed in the hope that it will be useful, |
|
12 |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
13 |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
14 |
+ * Lesser General Public License for more details. |
|
15 |
+ * |
|
16 |
+ * You should have received a copy of the GNU Lesser General Public |
|
17 |
+ * License along with FFmpeg; if not, write to the Free Software |
|
18 |
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
|
19 |
+ */ |
|
20 |
+ |
|
21 |
+#include "libavutil/avassert.h" |
|
22 |
+#include "avformat.h" |
|
23 |
+#include "internal.h" |
|
24 |
+#include "rawdec.h" |
|
25 |
+ |
|
26 |
+static int g722_read_header(AVFormatContext *s) |
|
27 |
+{ |
|
28 |
+ AVStream *st; |
|
29 |
+ |
|
30 |
+ st = avformat_new_stream(s, NULL); |
|
31 |
+ if (!st) |
|
32 |
+ return AVERROR(ENOMEM); |
|
33 |
+ |
|
34 |
+ st->codec->codec_type = AVMEDIA_TYPE_AUDIO; |
|
35 |
+ st->codec->codec_id = AV_CODEC_ID_ADPCM_G722; |
|
36 |
+ st->codec->sample_rate = 16000; |
|
37 |
+ st->codec->channels = 1; |
|
38 |
+ |
|
39 |
+ st->codec->bits_per_coded_sample = |
|
40 |
+ av_get_bits_per_sample(st->codec->codec_id); |
|
41 |
+ |
|
42 |
+ av_assert0(st->codec->bits_per_coded_sample > 0); |
|
43 |
+ |
|
44 |
+ avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate); |
|
45 |
+ return 0; |
|
46 |
+} |
|
47 |
+ |
|
48 |
+AVInputFormat ff_g722_demuxer = { |
|
49 |
+ .name = "g722", |
|
50 |
+ .long_name = NULL_IF_CONFIG_SMALL("raw G.722"), |
|
51 |
+ .read_header = g722_read_header, |
|
52 |
+ .read_packet = ff_raw_read_partial_packet, |
|
53 |
+ .flags = AVFMT_GENERIC_INDEX, |
|
54 |
+ .extensions = "g722,722", |
|
55 |
+ .raw_codec_id = AV_CODEC_ID_ADPCM_G722, |
|
56 |
+}; |
... | ... |
@@ -20,7 +20,7 @@ |
20 | 20 |
*/ |
21 | 21 |
|
22 | 22 |
#include "avformat.h" |
23 |
-#include "rawdec.h" |
|
23 |
+#include "internal.h" |
|
24 | 24 |
#include "pcm.h" |
25 | 25 |
#include "libavutil/log.h" |
26 | 26 |
#include "libavutil/opt.h" |
... | ... |
@@ -28,6 +28,39 @@ |
28 | 28 |
|
29 | 29 |
#define RAW_SAMPLES 1024 |
30 | 30 |
|
31 |
+typedef struct RawAudioDemuxerContext { |
|
32 |
+ AVClass *class; |
|
33 |
+ int sample_rate; |
|
34 |
+ int channels; |
|
35 |
+} RawAudioDemuxerContext; |
|
36 |
+ |
|
37 |
+static int raw_read_header(AVFormatContext *s) |
|
38 |
+{ |
|
39 |
+ RawAudioDemuxerContext *s1 = s->priv_data; |
|
40 |
+ AVStream *st; |
|
41 |
+ |
|
42 |
+ st = avformat_new_stream(s, NULL); |
|
43 |
+ if (!st) |
|
44 |
+ return AVERROR(ENOMEM); |
|
45 |
+ |
|
46 |
+ |
|
47 |
+ st->codec->codec_type = AVMEDIA_TYPE_AUDIO; |
|
48 |
+ st->codec->codec_id = s->iformat->raw_codec_id; |
|
49 |
+ st->codec->sample_rate = s1->sample_rate; |
|
50 |
+ st->codec->channels = s1->channels; |
|
51 |
+ |
|
52 |
+ st->codec->bits_per_coded_sample = |
|
53 |
+ av_get_bits_per_sample(st->codec->codec_id); |
|
54 |
+ |
|
55 |
+ av_assert0(st->codec->bits_per_coded_sample > 0); |
|
56 |
+ |
|
57 |
+ st->codec->block_align = |
|
58 |
+ st->codec->bits_per_coded_sample * st->codec->channels / 8; |
|
59 |
+ |
|
60 |
+ avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate); |
|
61 |
+ return 0; |
|
62 |
+} |
|
63 |
+ |
|
31 | 64 |
static int raw_read_packet(AVFormatContext *s, AVPacket *pkt) |
32 | 65 |
{ |
33 | 66 |
int ret, size, bps; |
... | ... |
@@ -51,8 +84,8 @@ static int raw_read_packet(AVFormatContext *s, AVPacket *pkt) |
51 | 51 |
} |
52 | 52 |
|
53 | 53 |
static const AVOption pcm_options[] = { |
54 |
- { "sample_rate", "", offsetof(RawAudioDemuxerContext, sample_rate), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM }, |
|
55 |
- { "channels", "", offsetof(RawAudioDemuxerContext, channels), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM }, |
|
54 |
+ { "sample_rate", "", offsetof(RawAudioDemuxerContext, sample_rate), AV_OPT_TYPE_INT, {.i64 = 44100}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM }, |
|
55 |
+ { "channels", "", offsetof(RawAudioDemuxerContext, channels), AV_OPT_TYPE_INT, {.i64 = 1}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM }, |
|
56 | 56 |
{ NULL }, |
57 | 57 |
}; |
58 | 58 |
|
... | ... |
@@ -67,7 +100,7 @@ AVInputFormat ff_pcm_ ## name_ ## _demuxer = { \ |
67 | 67 |
.name = #name_, \ |
68 | 68 |
.long_name = NULL_IF_CONFIG_SMALL(long_name_), \ |
69 | 69 |
.priv_data_size = sizeof(RawAudioDemuxerContext), \ |
70 |
- .read_header = ff_raw_read_header, \ |
|
70 |
+ .read_header = raw_read_header, \ |
|
71 | 71 |
.read_packet = raw_read_packet, \ |
72 | 72 |
.read_seek = ff_pcm_read_seek, \ |
73 | 73 |
.flags = AVFMT_GENERIC_INDEX, \ |
... | ... |
@@ -29,82 +29,6 @@ |
29 | 29 |
#include "libavutil/pixdesc.h" |
30 | 30 |
#include "libavutil/avassert.h" |
31 | 31 |
|
32 |
-/* raw input */ |
|
33 |
-int ff_raw_read_header(AVFormatContext *s) |
|
34 |
-{ |
|
35 |
- AVStream *st; |
|
36 |
- enum AVCodecID id; |
|
37 |
- |
|
38 |
- st = avformat_new_stream(s, NULL); |
|
39 |
- if (!st) |
|
40 |
- return AVERROR(ENOMEM); |
|
41 |
- |
|
42 |
- id = s->iformat->raw_codec_id; |
|
43 |
- if (id == AV_CODEC_ID_RAWVIDEO) { |
|
44 |
- st->codec->codec_type = AVMEDIA_TYPE_VIDEO; |
|
45 |
- } else { |
|
46 |
- st->codec->codec_type = AVMEDIA_TYPE_AUDIO; |
|
47 |
- } |
|
48 |
- st->codec->codec_id = id; |
|
49 |
- |
|
50 |
- switch(st->codec->codec_type) { |
|
51 |
- case AVMEDIA_TYPE_AUDIO: { |
|
52 |
- RawAudioDemuxerContext *s1 = s->priv_data; |
|
53 |
- |
|
54 |
- st->codec->channels = 1; |
|
55 |
- |
|
56 |
- if (id == AV_CODEC_ID_ADPCM_G722) |
|
57 |
- st->codec->sample_rate = 16000; |
|
58 |
- |
|
59 |
- if (s1 && s1->sample_rate) |
|
60 |
- st->codec->sample_rate = s1->sample_rate; |
|
61 |
- if (st->codec->sample_rate <= 0) { |
|
62 |
- av_log(s, AV_LOG_WARNING, "Invalid sample rate %d specified using default of 44100\n", |
|
63 |
- st->codec->sample_rate); |
|
64 |
- st->codec->sample_rate= 44100; |
|
65 |
- } |
|
66 |
- |
|
67 |
- if (s1 && s1->channels) |
|
68 |
- st->codec->channels = s1->channels; |
|
69 |
- |
|
70 |
- st->codec->bits_per_coded_sample = av_get_bits_per_sample(st->codec->codec_id); |
|
71 |
- av_assert0(st->codec->bits_per_coded_sample > 0); |
|
72 |
- st->codec->block_align = st->codec->bits_per_coded_sample*st->codec->channels/8; |
|
73 |
- avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate); |
|
74 |
- break; |
|
75 |
- } |
|
76 |
- case AVMEDIA_TYPE_VIDEO: { |
|
77 |
- FFRawVideoDemuxerContext *s1 = s->priv_data; |
|
78 |
- int width = 0, height = 0, ret = 0; |
|
79 |
- enum AVPixelFormat pix_fmt; |
|
80 |
- AVRational framerate; |
|
81 |
- |
|
82 |
- if (s1->video_size && (ret = av_parse_video_size(&width, &height, s1->video_size)) < 0) { |
|
83 |
- av_log(s, AV_LOG_ERROR, "Couldn't parse video size.\n"); |
|
84 |
- goto fail; |
|
85 |
- } |
|
86 |
- if ((pix_fmt = av_get_pix_fmt(s1->pixel_format)) == AV_PIX_FMT_NONE) { |
|
87 |
- av_log(s, AV_LOG_ERROR, "No such pixel format: %s.\n", s1->pixel_format); |
|
88 |
- ret = AVERROR(EINVAL); |
|
89 |
- goto fail; |
|
90 |
- } |
|
91 |
- if ((ret = av_parse_video_rate(&framerate, s1->framerate)) < 0) { |
|
92 |
- av_log(s, AV_LOG_ERROR, "Could not parse framerate: %s.\n", s1->framerate); |
|
93 |
- goto fail; |
|
94 |
- } |
|
95 |
- avpriv_set_pts_info(st, 64, framerate.den, framerate.num); |
|
96 |
- st->codec->width = width; |
|
97 |
- st->codec->height = height; |
|
98 |
- st->codec->pix_fmt = pix_fmt; |
|
99 |
-fail: |
|
100 |
- return ret; |
|
101 |
- } |
|
102 |
- default: |
|
103 |
- return -1; |
|
104 |
- } |
|
105 |
- return 0; |
|
106 |
-} |
|
107 |
- |
|
108 | 32 |
#define RAW_PACKET_SIZE 1024 |
109 | 33 |
|
110 | 34 |
int ff_raw_read_partial_packet(AVFormatContext *s, AVPacket *pkt) |
... | ... |
@@ -181,18 +105,6 @@ const AVOption ff_rawvideo_options[] = { |
181 | 181 |
{ NULL }, |
182 | 182 |
}; |
183 | 183 |
|
184 |
-#if CONFIG_G722_DEMUXER |
|
185 |
-AVInputFormat ff_g722_demuxer = { |
|
186 |
- .name = "g722", |
|
187 |
- .long_name = NULL_IF_CONFIG_SMALL("raw G.722"), |
|
188 |
- .read_header = ff_raw_read_header, |
|
189 |
- .read_packet = ff_raw_read_partial_packet, |
|
190 |
- .flags = AVFMT_GENERIC_INDEX, |
|
191 |
- .extensions = "g722,722", |
|
192 |
- .raw_codec_id = AV_CODEC_ID_ADPCM_G722, |
|
193 |
-}; |
|
194 |
-#endif |
|
195 |
- |
|
196 | 184 |
#if CONFIG_LATM_DEMUXER |
197 | 185 |
AVInputFormat ff_latm_demuxer = { |
198 | 186 |
.name = "latm", |
... | ... |
@@ -26,12 +26,6 @@ |
26 | 26 |
#include "libavutil/log.h" |
27 | 27 |
#include "libavutil/opt.h" |
28 | 28 |
|
29 |
-typedef struct RawAudioDemuxerContext { |
|
30 |
- AVClass *class; |
|
31 |
- int sample_rate; |
|
32 |
- int channels; |
|
33 |
-} RawAudioDemuxerContext; |
|
34 |
- |
|
35 | 29 |
typedef struct FFRawVideoDemuxerContext { |
36 | 30 |
const AVClass *class; /**< Class for private options. */ |
37 | 31 |
char *video_size; /**< String describing video size, set by a private option. */ |
... | ... |
@@ -41,8 +35,6 @@ typedef struct FFRawVideoDemuxerContext { |
41 | 41 |
|
42 | 42 |
extern const AVOption ff_rawvideo_options[]; |
43 | 43 |
|
44 |
-int ff_raw_read_header(AVFormatContext *s); |
|
45 |
- |
|
46 | 44 |
int ff_raw_read_partial_packet(AVFormatContext *s, AVPacket *pkt); |
47 | 45 |
|
48 | 46 |
int ff_raw_audio_read_header(AVFormatContext *s); |
... | ... |
@@ -19,8 +19,63 @@ |
19 | 19 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
20 | 20 |
*/ |
21 | 21 |
|
22 |
+#include "libavutil/parseutils.h" |
|
23 |
+#include "libavutil/pixdesc.h" |
|
24 |
+#include "libavutil/opt.h" |
|
25 |
+#include "internal.h" |
|
22 | 26 |
#include "avformat.h" |
23 |
-#include "rawdec.h" |
|
27 |
+ |
|
28 |
+typedef struct RawVideoDemuxerContext { |
|
29 |
+ const AVClass *class; /**< Class for private options. */ |
|
30 |
+ char *video_size; /**< String describing video size, set by a private option. */ |
|
31 |
+ char *pixel_format; /**< Set by a private option. */ |
|
32 |
+ char *framerate; /**< String describing framerate, set by a private option. */ |
|
33 |
+} RawVideoDemuxerContext; |
|
34 |
+ |
|
35 |
+ |
|
36 |
+static int rawvideo_read_header(AVFormatContext *ctx) |
|
37 |
+{ |
|
38 |
+ RawVideoDemuxerContext *s = ctx->priv_data; |
|
39 |
+ int width = 0, height = 0, ret = 0; |
|
40 |
+ enum AVPixelFormat pix_fmt; |
|
41 |
+ AVRational framerate; |
|
42 |
+ AVStream *st; |
|
43 |
+ |
|
44 |
+ st = avformat_new_stream(ctx, NULL); |
|
45 |
+ if (!st) |
|
46 |
+ return AVERROR(ENOMEM); |
|
47 |
+ |
|
48 |
+ st->codec->codec_type = AVMEDIA_TYPE_VIDEO; |
|
49 |
+ |
|
50 |
+ st->codec->codec_id = ctx->iformat->raw_codec_id; |
|
51 |
+ |
|
52 |
+ if (s->video_size && |
|
53 |
+ (ret = av_parse_video_size(&width, &height, s->video_size)) < 0) { |
|
54 |
+ av_log(ctx, AV_LOG_ERROR, "Couldn't parse video size.\n"); |
|
55 |
+ return ret; |
|
56 |
+ } |
|
57 |
+ |
|
58 |
+ if ((pix_fmt = av_get_pix_fmt(s->pixel_format)) == AV_PIX_FMT_NONE) { |
|
59 |
+ av_log(ctx, AV_LOG_ERROR, "No such pixel format: %s.\n", |
|
60 |
+ s->pixel_format); |
|
61 |
+ return AVERROR(EINVAL); |
|
62 |
+ } |
|
63 |
+ |
|
64 |
+ if ((ret = av_parse_video_rate(&framerate, s->framerate)) < 0) { |
|
65 |
+ av_log(ctx, AV_LOG_ERROR, "Could not parse framerate: %s.\n", |
|
66 |
+ s->framerate); |
|
67 |
+ return ret; |
|
68 |
+ } |
|
69 |
+ |
|
70 |
+ avpriv_set_pts_info(st, 64, framerate.den, framerate.num); |
|
71 |
+ |
|
72 |
+ st->codec->width = width; |
|
73 |
+ st->codec->height = height; |
|
74 |
+ st->codec->pix_fmt = pix_fmt; |
|
75 |
+ |
|
76 |
+ return 0; |
|
77 |
+} |
|
78 |
+ |
|
24 | 79 |
|
25 | 80 |
static int rawvideo_read_packet(AVFormatContext *s, AVPacket *pkt) |
26 | 81 |
{ |
... | ... |
@@ -34,9 +89,8 @@ static int rawvideo_read_packet(AVFormatContext *s, AVPacket *pkt) |
34 | 34 |
if (packet_size < 0) |
35 | 35 |
return -1; |
36 | 36 |
|
37 |
- ret= av_get_packet(s->pb, pkt, packet_size); |
|
38 |
- pkt->pts= |
|
39 |
- pkt->dts= pkt->pos / packet_size; |
|
37 |
+ ret = av_get_packet(s->pb, pkt, packet_size); |
|
38 |
+ pkt->pts = pkt->dts = pkt->pos / packet_size; |
|
40 | 39 |
|
41 | 40 |
pkt->stream_index = 0; |
42 | 41 |
if (ret < 0) |
... | ... |
@@ -44,7 +98,7 @@ static int rawvideo_read_packet(AVFormatContext *s, AVPacket *pkt) |
44 | 44 |
return 0; |
45 | 45 |
} |
46 | 46 |
|
47 |
-#define OFFSET(x) offsetof(FFRawVideoDemuxerContext, x) |
|
47 |
+#define OFFSET(x) offsetof(RawVideoDemuxerContext, x) |
|
48 | 48 |
#define DEC AV_OPT_FLAG_DECODING_PARAM |
49 | 49 |
static const AVOption rawvideo_options[] = { |
50 | 50 |
{ "video_size", "A string describing frame size, such as 640x480 or hd720.", OFFSET(video_size), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, DEC }, |
... | ... |
@@ -63,8 +117,8 @@ static const AVClass rawvideo_demuxer_class = { |
63 | 63 |
AVInputFormat ff_rawvideo_demuxer = { |
64 | 64 |
.name = "rawvideo", |
65 | 65 |
.long_name = NULL_IF_CONFIG_SMALL("raw video"), |
66 |
- .priv_data_size = sizeof(FFRawVideoDemuxerContext), |
|
67 |
- .read_header = ff_raw_read_header, |
|
66 |
+ .priv_data_size = sizeof(RawVideoDemuxerContext), |
|
67 |
+ .read_header = rawvideo_read_header, |
|
68 | 68 |
.read_packet = rawvideo_read_packet, |
69 | 69 |
.flags = AVFMT_GENERIC_INDEX, |
70 | 70 |
.extensions = "yuv,cif,qcif,rgb", |