History

Merge commit '1b891d17c531e8a63c2974aab4bf997ce70746f3'

* 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

Michael Niedermayer committed 14 years ago

Commit 507f2942 parents 9f36ec6 1b891d18 files · +199 −141Browse files

Unified · Split

8 files
  1. ffmpeg.c +7 −3
  2. libavfilter/graphparser.c +15 −9
  3. libavformat/Makefile +22 −22
  4. libavformat/g722.c +57 −0
  5. libavformat/pcmdec.c +37 −4
  6. libavformat/rawdec.c +0 −88
  7. libavformat/rawdec.h +0 −8
  8. libavformat/rawvideodec.c +61 −7
ffmpeg.c+7−3
@@ -1082,10 +1082,14 @@ static void print_report(int is_last_report, int64_t timer_start, int64_t cur_ti · 1081 unmodified lines
1082 oc = output_files[0]->ctx;1082 oc = output_files[0]->ctx;
1083 1083
1084 total_size = avio_size(oc->pb);1084 total_size = avio_size(oc->pb);
1085 if (total_size < 0) { // FIXME improve avio_size() so it works with non seekable output too1085 if (total_size <= 0) // FIXME improve avio_size() so it works with non seekable output too
1086 total_size = avio_tell(oc->pb);1086 total_size = avio_tell(oc->pb);
1087 if (total_size < 0)1087 if (total_size < 0) {
1088 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 buf[0] = '\0';1095 buf[0] = '\0';
libavfilter/graphparser.c+15−9
@@ -239,10 +239,11 @@ static int link_filter_inouts(AVFilterContext *filt_ctx, · 238 unmodified lines
239 return AVERROR(ENOMEM);239 return AVERROR(ENOMEM);
240 240
241 if (p->filter_ctx) {241 if (p->filter_ctx) {
242 if ((ret = link_filter(p->filter_ctx, p->pad_idx, filt_ctx, pad, log_ctx)) < 0)242 ret = link_filter(p->filter_ctx, p->pad_idx, filt_ctx, pad, log_ctx);
243 return ret;
244 av_free(p->name);243 av_free(p->name);
245 av_free(p);244 av_free(p);
245 if (ret < 0)
246 return ret;
246 } else {247 } else {
247 p->filter_ctx = filt_ctx;248 p->filter_ctx = filt_ctx;
248 p->pad_idx = pad;249 p->pad_idx = pad;
@@ -290,8 +291,10 @@ static int parse_inputs(const char **buf, AVFilterInOut **curr_inputs, · 41 unmodified lines
290 av_free(name);291 av_free(name);
291 } else {292 } else {
292 /* Not in the list, so add it as an input */293 /* Not in the list, so add it as an input */
293 if (!(match = av_mallocz(sizeof(AVFilterInOut))))294 if (!(match = av_mallocz(sizeof(AVFilterInOut)))) {
295 av_free(name);
294 return AVERROR(ENOMEM);296 return AVERROR(ENOMEM);
297 }
295 match->name = name;298 match->name = name;
296 match->pad_idx = pad;299 match->pad_idx = pad;
297 }300 }
@@ -319,24 +322,27 @@ static int parse_outputs(const char **buf, AVFilterInOut **curr_inputs, · 21 unmodified lines
319 AVFilterInOut *match;322 AVFilterInOut *match;
320 323
321 AVFilterInOut *input = *curr_inputs;324 AVFilterInOut *input = *curr_inputs;
325
326 if (!name)
327 return AVERROR(EINVAL);
328
322 if (!input) {329 if (!input) {
323 av_log(log_ctx, AV_LOG_ERROR,330 av_log(log_ctx, AV_LOG_ERROR,
324 "No output pad can be associated to link label '%s'.\n",331 "No output pad can be associated to link label '%s'.\n", name);
325 name);332 av_free(name);
326 return AVERROR(EINVAL);333 return AVERROR(EINVAL);
327 }334 }
328 *curr_inputs = (*curr_inputs)->next;335 *curr_inputs = (*curr_inputs)->next;
329 336
330 if (!name)
331 return AVERROR(EINVAL);
332
333 /* First check if the label is not in the open_inputs list */337 /* First check if the label is not in the open_inputs list */
334 match = extract_inout(name, open_inputs);338 match = extract_inout(name, open_inputs);
335 339
336 if (match) {340 if (match) {
337 if ((ret = link_filter(input->filter_ctx, input->pad_idx,341 if ((ret = link_filter(input->filter_ctx, input->pad_idx,
338 match->filter_ctx, match->pad_idx, log_ctx)) < 0)342 match->filter_ctx, match->pad_idx, log_ctx)) < 0) {
343 av_free(name);
339 return ret;344 return ret;
345 }
340 av_free(match->name);346 av_free(match->name);
341 av_free(name);347 av_free(name);
342 av_free(match);348 av_free(match);
libavformat/Makefile+22−22
@@ -112,7 +112,7 @@ OBJS-$(CONFIG_GIF_MUXER) += gif.o · 111 unmodified lines
112OBJS-$(CONFIG_GSM_DEMUXER) += gsmdec.o112OBJS-$(CONFIG_GSM_DEMUXER) += gsmdec.o
113OBJS-$(CONFIG_GXF_DEMUXER) += gxf.o113OBJS-$(CONFIG_GXF_DEMUXER) += gxf.o
114OBJS-$(CONFIG_GXF_MUXER) += gxfenc.o audiointerleave.o114OBJS-$(CONFIG_GXF_MUXER) += gxfenc.o audiointerleave.o
115OBJS-$(CONFIG_G722_DEMUXER) += rawdec.o115OBJS-$(CONFIG_G722_DEMUXER) += g722.o rawdec.o
116OBJS-$(CONFIG_G722_MUXER) += rawenc.o116OBJS-$(CONFIG_G722_MUXER) += rawenc.o
117OBJS-$(CONFIG_G723_1_DEMUXER) += g723_1.o117OBJS-$(CONFIG_G723_1_DEMUXER) += g723_1.o
118OBJS-$(CONFIG_G723_1_MUXER) += rawenc.o118OBJS-$(CONFIG_G723_1_MUXER) += rawenc.o
@@ -220,51 +220,51 @@ OBJS-$(CONFIG_OGG_MUXER) += oggenc.o \ · 101 unmodified lines
220OBJS-$(CONFIG_OMA_DEMUXER) += omadec.o pcm.o oma.o220OBJS-$(CONFIG_OMA_DEMUXER) += omadec.o pcm.o oma.o
221OBJS-$(CONFIG_OMA_MUXER) += omaenc.o rawenc.o oma.o id3v2enc.o221OBJS-$(CONFIG_OMA_MUXER) += omaenc.o rawenc.o oma.o id3v2enc.o
222OBJS-$(CONFIG_PAF_DEMUXER) += paf.o222OBJS-$(CONFIG_PAF_DEMUXER) += paf.o
223OBJS-$(CONFIG_PCM_ALAW_DEMUXER) += pcmdec.o pcm.o rawdec.o223OBJS-$(CONFIG_PCM_ALAW_DEMUXER) += pcmdec.o pcm.o
224OBJS-$(CONFIG_PCM_ALAW_MUXER) += pcmenc.o rawenc.o224OBJS-$(CONFIG_PCM_ALAW_MUXER) += pcmenc.o rawenc.o
225OBJS-$(CONFIG_PCM_F32BE_DEMUXER) += pcmdec.o pcm.o rawdec.o225OBJS-$(CONFIG_PCM_F32BE_DEMUXER) += pcmdec.o pcm.o
226OBJS-$(CONFIG_PCM_F32BE_MUXER) += pcmenc.o rawenc.o226OBJS-$(CONFIG_PCM_F32BE_MUXER) += pcmenc.o rawenc.o
227OBJS-$(CONFIG_PCM_F32LE_DEMUXER) += pcmdec.o pcm.o rawdec.o227OBJS-$(CONFIG_PCM_F32LE_DEMUXER) += pcmdec.o pcm.o
228OBJS-$(CONFIG_PCM_F32LE_MUXER) += pcmenc.o rawenc.o228OBJS-$(CONFIG_PCM_F32LE_MUXER) += pcmenc.o rawenc.o
229OBJS-$(CONFIG_PCM_F64BE_DEMUXER) += pcmdec.o pcm.o rawdec.o229OBJS-$(CONFIG_PCM_F64BE_DEMUXER) += pcmdec.o pcm.o
230OBJS-$(CONFIG_PCM_F64BE_MUXER) += pcmenc.o rawenc.o230OBJS-$(CONFIG_PCM_F64BE_MUXER) += pcmenc.o rawenc.o
231OBJS-$(CONFIG_PCM_F64LE_DEMUXER) += pcmdec.o pcm.o rawdec.o231OBJS-$(CONFIG_PCM_F64LE_DEMUXER) += pcmdec.o pcm.o
232OBJS-$(CONFIG_PCM_F64LE_MUXER) += pcmenc.o rawenc.o232OBJS-$(CONFIG_PCM_F64LE_MUXER) += pcmenc.o rawenc.o
233OBJS-$(CONFIG_PCM_MULAW_DEMUXER) += pcmdec.o pcm.o rawdec.o233OBJS-$(CONFIG_PCM_MULAW_DEMUXER) += pcmdec.o pcm.o
234OBJS-$(CONFIG_PCM_MULAW_MUXER) += pcmenc.o rawenc.o234OBJS-$(CONFIG_PCM_MULAW_MUXER) += pcmenc.o rawenc.o
235OBJS-$(CONFIG_PCM_S16BE_DEMUXER) += pcmdec.o pcm.o rawdec.o235OBJS-$(CONFIG_PCM_S16BE_DEMUXER) += pcmdec.o pcm.o
236OBJS-$(CONFIG_PCM_S16BE_MUXER) += pcmenc.o rawenc.o236OBJS-$(CONFIG_PCM_S16BE_MUXER) += pcmenc.o rawenc.o
237OBJS-$(CONFIG_PCM_S16LE_DEMUXER) += pcmdec.o pcm.o rawdec.o237OBJS-$(CONFIG_PCM_S16LE_DEMUXER) += pcmdec.o pcm.o
238OBJS-$(CONFIG_PCM_S16LE_MUXER) += pcmenc.o rawenc.o238OBJS-$(CONFIG_PCM_S16LE_MUXER) += pcmenc.o rawenc.o
239OBJS-$(CONFIG_PCM_S24BE_DEMUXER) += pcmdec.o pcm.o rawdec.o239OBJS-$(CONFIG_PCM_S24BE_DEMUXER) += pcmdec.o pcm.o
240OBJS-$(CONFIG_PCM_S24BE_MUXER) += pcmenc.o rawenc.o240OBJS-$(CONFIG_PCM_S24BE_MUXER) += pcmenc.o rawenc.o
241OBJS-$(CONFIG_PCM_S24LE_DEMUXER) += pcmdec.o pcm.o rawdec.o241OBJS-$(CONFIG_PCM_S24LE_DEMUXER) += pcmdec.o pcm.o
242OBJS-$(CONFIG_PCM_S24LE_MUXER) += pcmenc.o rawenc.o242OBJS-$(CONFIG_PCM_S24LE_MUXER) += pcmenc.o rawenc.o
243OBJS-$(CONFIG_PCM_S32BE_DEMUXER) += pcmdec.o pcm.o rawdec.o243OBJS-$(CONFIG_PCM_S32BE_DEMUXER) += pcmdec.o pcm.o
244OBJS-$(CONFIG_PCM_S32BE_MUXER) += pcmenc.o rawenc.o244OBJS-$(CONFIG_PCM_S32BE_MUXER) += pcmenc.o rawenc.o
245OBJS-$(CONFIG_PCM_S32LE_DEMUXER) += pcmdec.o pcm.o rawdec.o245OBJS-$(CONFIG_PCM_S32LE_DEMUXER) += pcmdec.o pcm.o
246OBJS-$(CONFIG_PCM_S32LE_MUXER) += pcmenc.o rawenc.o246OBJS-$(CONFIG_PCM_S32LE_MUXER) += pcmenc.o rawenc.o
247OBJS-$(CONFIG_PCM_S8_DEMUXER) += pcmdec.o pcm.o rawdec.o247OBJS-$(CONFIG_PCM_S8_DEMUXER) += pcmdec.o pcm.o
248OBJS-$(CONFIG_PCM_S8_MUXER) += pcmenc.o rawenc.o248OBJS-$(CONFIG_PCM_S8_MUXER) += pcmenc.o rawenc.o
249OBJS-$(CONFIG_PCM_U16BE_DEMUXER) += pcmdec.o pcm.o rawdec.o249OBJS-$(CONFIG_PCM_U16BE_DEMUXER) += pcmdec.o pcm.o
250OBJS-$(CONFIG_PCM_U16BE_MUXER) += pcmenc.o rawenc.o250OBJS-$(CONFIG_PCM_U16BE_MUXER) += pcmenc.o rawenc.o
251OBJS-$(CONFIG_PCM_U16LE_DEMUXER) += pcmdec.o pcm.o rawdec.o251OBJS-$(CONFIG_PCM_U16LE_DEMUXER) += pcmdec.o pcm.o
252OBJS-$(CONFIG_PCM_U16LE_MUXER) += pcmenc.o rawenc.o252OBJS-$(CONFIG_PCM_U16LE_MUXER) += pcmenc.o rawenc.o
253OBJS-$(CONFIG_PCM_U24BE_DEMUXER) += pcmdec.o pcm.o rawdec.o253OBJS-$(CONFIG_PCM_U24BE_DEMUXER) += pcmdec.o pcm.o
254OBJS-$(CONFIG_PCM_U24BE_MUXER) += pcmenc.o rawenc.o254OBJS-$(CONFIG_PCM_U24BE_MUXER) += pcmenc.o rawenc.o
255OBJS-$(CONFIG_PCM_U24LE_DEMUXER) += pcmdec.o pcm.o rawdec.o255OBJS-$(CONFIG_PCM_U24LE_DEMUXER) += pcmdec.o pcm.o
256OBJS-$(CONFIG_PCM_U24LE_MUXER) += pcmenc.o rawenc.o256OBJS-$(CONFIG_PCM_U24LE_MUXER) += pcmenc.o rawenc.o
257OBJS-$(CONFIG_PCM_U32BE_DEMUXER) += pcmdec.o pcm.o rawdec.o257OBJS-$(CONFIG_PCM_U32BE_DEMUXER) += pcmdec.o pcm.o
258OBJS-$(CONFIG_PCM_U32BE_MUXER) += pcmenc.o rawenc.o258OBJS-$(CONFIG_PCM_U32BE_MUXER) += pcmenc.o rawenc.o
259OBJS-$(CONFIG_PCM_U32LE_DEMUXER) += pcmdec.o pcm.o rawdec.o259OBJS-$(CONFIG_PCM_U32LE_DEMUXER) += pcmdec.o pcm.o
260OBJS-$(CONFIG_PCM_U32LE_MUXER) += pcmenc.o rawenc.o260OBJS-$(CONFIG_PCM_U32LE_MUXER) += pcmenc.o rawenc.o
261OBJS-$(CONFIG_PCM_U8_DEMUXER) += pcmdec.o pcm.o rawdec.o261OBJS-$(CONFIG_PCM_U8_DEMUXER) += pcmdec.o pcm.o
262OBJS-$(CONFIG_PCM_U8_MUXER) += pcmenc.o rawenc.o262OBJS-$(CONFIG_PCM_U8_MUXER) += pcmenc.o rawenc.o
263OBJS-$(CONFIG_PMP_DEMUXER) += pmpdec.o263OBJS-$(CONFIG_PMP_DEMUXER) += pmpdec.o
264OBJS-$(CONFIG_PVA_DEMUXER) += pva.o264OBJS-$(CONFIG_PVA_DEMUXER) += pva.o
265OBJS-$(CONFIG_QCP_DEMUXER) += qcp.o265OBJS-$(CONFIG_QCP_DEMUXER) += qcp.o
266OBJS-$(CONFIG_R3D_DEMUXER) += r3d.o266OBJS-$(CONFIG_R3D_DEMUXER) += r3d.o
267OBJS-$(CONFIG_RAWVIDEO_DEMUXER) += rawvideodec.o rawdec.o267OBJS-$(CONFIG_RAWVIDEO_DEMUXER) += rawvideodec.o
268OBJS-$(CONFIG_RAWVIDEO_MUXER) += rawenc.o268OBJS-$(CONFIG_RAWVIDEO_MUXER) += rawenc.o
269OBJS-$(CONFIG_REALTEXT_DEMUXER) += realtextdec.o269OBJS-$(CONFIG_REALTEXT_DEMUXER) += realtextdec.o
270OBJS-$(CONFIG_RL2_DEMUXER) += rl2.o270OBJS-$(CONFIG_RL2_DEMUXER) += rl2.o
libavformat/g722.c+57−0
@@ -0,0 +1,57 @@
1/*
2 * g722 raw demuxer
3 * Copyright (c) 2010 Martin Storsjo
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/avassert.h"
23#include "avformat.h"
24#include "internal.h"
25#include "rawdec.h"
26
27static int g722_read_header(AVFormatContext *s)
28{
29 AVStream *st;
30
31 st = avformat_new_stream(s, NULL);
32 if (!st)
33 return AVERROR(ENOMEM);
34
35 st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
36 st->codec->codec_id = AV_CODEC_ID_ADPCM_G722;
37 st->codec->sample_rate = 16000;
38 st->codec->channels = 1;
39
40 st->codec->bits_per_coded_sample =
41 av_get_bits_per_sample(st->codec->codec_id);
42
43 av_assert0(st->codec->bits_per_coded_sample > 0);
44
45 avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate);
46 return 0;
47}
48
49AVInputFormat ff_g722_demuxer = {
50 .name = "g722",
51 .long_name = NULL_IF_CONFIG_SMALL("raw G.722"),
52 .read_header = g722_read_header,
53 .read_packet = ff_raw_read_partial_packet,
54 .flags = AVFMT_GENERIC_INDEX,
55 .extensions = "g722,722",
56 .raw_codec_id = AV_CODEC_ID_ADPCM_G722,
57};
libavformat/pcmdec.c+37−4
@@ -20,7 +20,7 @@ · 19 unmodified lines
20 */20 */
21 21
22#include "avformat.h"22#include "avformat.h"
23#include "rawdec.h"23#include "internal.h"
24#include "pcm.h"24#include "pcm.h"
25#include "libavutil/log.h"25#include "libavutil/log.h"
26#include "libavutil/opt.h"26#include "libavutil/opt.h"
@@ -28,6 +28,39 @@ · 1 unmodified line
28 28
29#define RAW_SAMPLES 102429#define RAW_SAMPLES 1024
30 30
31typedef struct RawAudioDemuxerContext {
32 AVClass *class;
33 int sample_rate;
34 int channels;
35} RawAudioDemuxerContext;
36
37static 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
31static int raw_read_packet(AVFormatContext *s, AVPacket *pkt)64static int raw_read_packet(AVFormatContext *s, AVPacket *pkt)
32{65{
33 int ret, size, bps;66 int ret, size, bps;
@@ -51,8 +84,8 @@ static int raw_read_packet(AVFormatContext *s, AVPacket *pkt) · 17 unmodified lines
51}84}
52 85
53static const AVOption pcm_options[] = {86static 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 },87 { "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 = 0}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM },88 { "channels", "", offsetof(RawAudioDemuxerContext, channels), AV_OPT_TYPE_INT, {.i64 = 1}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM },
56 { NULL },89 { NULL },
57};90};
58 91
@@ -67,7 +100,7 @@ AVInputFormat ff_pcm_ ## name_ ## _demuxer = { \ · 8 unmodified lines
67 .name = #name_, \100 .name = #name_, \
68 .long_name = NULL_IF_CONFIG_SMALL(long_name_), \101 .long_name = NULL_IF_CONFIG_SMALL(long_name_), \
69 .priv_data_size = sizeof(RawAudioDemuxerContext), \102 .priv_data_size = sizeof(RawAudioDemuxerContext), \
70 .read_header = ff_raw_read_header, \103 .read_header = raw_read_header, \
71 .read_packet = raw_read_packet, \104 .read_packet = raw_read_packet, \
72 .read_seek = ff_pcm_read_seek, \105 .read_seek = ff_pcm_read_seek, \
73 .flags = AVFMT_GENERIC_INDEX, \106 .flags = AVFMT_GENERIC_INDEX, \
libavformat/rawdec.c+0−88
@@ -29,82 +29,6 @@ · 28 unmodified lines
29#include "libavutil/pixdesc.h"29#include "libavutil/pixdesc.h"
30#include "libavutil/avassert.h"30#include "libavutil/avassert.h"
31 31
32/* raw input */
33int 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;
99fail:
100 return ret;
101 }
102 default:
103 return -1;
104 }
105 return 0;
106}
107
108#define RAW_PACKET_SIZE 102432#define RAW_PACKET_SIZE 1024
109 33
110int ff_raw_read_partial_packet(AVFormatContext *s, AVPacket *pkt)34int ff_raw_read_partial_packet(AVFormatContext *s, AVPacket *pkt)
@@ -181,18 +105,6 @@ const AVOption ff_rawvideo_options[] = { · 70 unmodified lines
181 { NULL },105 { NULL },
182};106};
183 107
184#if CONFIG_G722_DEMUXER
185AVInputFormat 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#if CONFIG_LATM_DEMUXER108#if CONFIG_LATM_DEMUXER
197AVInputFormat ff_latm_demuxer = {109AVInputFormat ff_latm_demuxer = {
198 .name = "latm",110 .name = "latm",
libavformat/rawdec.h+0−8
@@ -26,12 +26,6 @@ · 25 unmodified lines
26#include "libavutil/log.h"26#include "libavutil/log.h"
27#include "libavutil/opt.h"27#include "libavutil/opt.h"
28 28
29typedef struct RawAudioDemuxerContext {
30 AVClass *class;
31 int sample_rate;
32 int channels;
33} RawAudioDemuxerContext;
34
35typedef struct FFRawVideoDemuxerContext {29typedef struct FFRawVideoDemuxerContext {
36 const AVClass *class; /**< Class for private options. */30 const AVClass *class; /**< Class for private options. */
37 char *video_size; /**< String describing video size, set by a private option. */31 char *video_size; /**< String describing video size, set by a private option. */
@@ -41,8 +35,6 @@ typedef struct FFRawVideoDemuxerContext { · 3 unmodified lines
41 35
42extern const AVOption ff_rawvideo_options[];36extern const AVOption ff_rawvideo_options[];
43 37
44int ff_raw_read_header(AVFormatContext *s);
45
46int ff_raw_read_partial_packet(AVFormatContext *s, AVPacket *pkt);38int ff_raw_read_partial_packet(AVFormatContext *s, AVPacket *pkt);
47 39
48int ff_raw_audio_read_header(AVFormatContext *s);40int ff_raw_audio_read_header(AVFormatContext *s);
libavformat/rawvideodec.c+61−7
@@ -19,8 +19,63 @@ · 18 unmodified lines
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA19 * 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#include "avformat.h"26#include "avformat.h"
23#include "rawdec.h"27
28typedef 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
36static 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
25static int rawvideo_read_packet(AVFormatContext *s, AVPacket *pkt)80static int rawvideo_read_packet(AVFormatContext *s, AVPacket *pkt)
26{81{
@@ -34,9 +89,8 @@ static int rawvideo_read_packet(AVFormatContext *s, AVPacket *pkt) · 7 unmodified lines
34 if (packet_size < 0)89 if (packet_size < 0)
35 return -1;90 return -1;
36 91
37 ret= av_get_packet(s->pb, pkt, packet_size);92 ret = av_get_packet(s->pb, pkt, packet_size);
38 pkt->pts=93 pkt->pts = pkt->dts = pkt->pos / packet_size;
39 pkt->dts= pkt->pos / packet_size;
40 94
41 pkt->stream_index = 0;95 pkt->stream_index = 0;
42 if (ret < 0)96 if (ret < 0)
@@ -44,7 +98,7 @@ static int rawvideo_read_packet(AVFormatContext *s, AVPacket *pkt) · 1 unmodified line
44 return 0;98 return 0;
45}99}
46 100
47#define OFFSET(x) offsetof(FFRawVideoDemuxerContext, x)101#define OFFSET(x) offsetof(RawVideoDemuxerContext, x)
48#define DEC AV_OPT_FLAG_DECODING_PARAM102#define DEC AV_OPT_FLAG_DECODING_PARAM
49static const AVOption rawvideo_options[] = {103static const AVOption rawvideo_options[] = {
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 },104 { "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 = { · 12 unmodified lines
63AVInputFormat ff_rawvideo_demuxer = {117AVInputFormat ff_rawvideo_demuxer = {
64 .name = "rawvideo",118 .name = "rawvideo",
65 .long_name = NULL_IF_CONFIG_SMALL("raw video"),119 .long_name = NULL_IF_CONFIG_SMALL("raw video"),
66 .priv_data_size = sizeof(FFRawVideoDemuxerContext),120 .priv_data_size = sizeof(RawVideoDemuxerContext),
67 .read_header = ff_raw_read_header,121 .read_header = rawvideo_read_header,
68 .read_packet = rawvideo_read_packet,122 .read_packet = rawvideo_read_packet,
69 .flags = AVFMT_GENERIC_INDEX,123 .flags = AVFMT_GENERIC_INDEX,
70 .extensions = "yuv,cif,qcif,rgb",124 .extensions = "yuv,cif,qcif,rgb",

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t