This allows testing parsers with a wider range of input packet sizes.
Which is important and usefull for regression testing, some of our
parsers in fact to not work if the packet size is changed from 1024
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
return ac3_eac3_probe(p, AV_CODEC_ID_AC3);
}
+FF_RAW_DEMUXER_CLASS(ac3)
AVInputFormat ff_ac3_demuxer = {
.name = "ac3",
.long_name = NULL_IF_CONFIG_SMALL("raw AC-3"),
.flags= AVFMT_GENERIC_INDEX,
.extensions = "ac3",
.raw_codec_id = AV_CODEC_ID_AC3,
+ .priv_data_size = sizeof(FFRawDemuxerContext),
+ .priv_class = &ac3_demuxer_class,
};
#endif
return ac3_eac3_probe(p, AV_CODEC_ID_EAC3);
}
+FF_RAW_DEMUXER_CLASS(eac3)
AVInputFormat ff_eac3_demuxer = {
.name = "eac3",
.long_name = NULL_IF_CONFIG_SMALL("raw E-AC-3"),
.flags = AVFMT_GENERIC_INDEX,
.extensions = "eac3",
.raw_codec_id = AV_CODEC_ID_EAC3,
+ .priv_data_size = sizeof(FFRawDemuxerContext),
+ .priv_class = &eac3_demuxer_class,
};
#endif
return 0;
}
+FF_RAW_DEMUXER_CLASS(acm)
AVInputFormat ff_acm_demuxer = {
.name = "acm",
.long_name = NULL_IF_CONFIG_SMALL("Interplay ACM"),
.flags = AVFMT_NOBINSEARCH | AVFMT_NOGENSEARCH | AVFMT_NO_BYTE_SEEK | AVFMT_NOTIMESTAMPS,
.extensions = "acm",
.raw_codec_id = AV_CODEC_ID_INTERPLAY_ACM,
+ .priv_data_size = sizeof(FFRawDemuxerContext),
+ .priv_class = &acm_demuxer_class,
};
return 0;
}
+FF_RAW_DEMUXER_CLASS(dts)
AVInputFormat ff_dts_demuxer = {
.name = "dts",
.long_name = NULL_IF_CONFIG_SMALL("raw DTS"),
.flags = AVFMT_GENERIC_INDEX,
.extensions = "dts",
.raw_codec_id = AV_CODEC_ID_DTS,
-};
+ .priv_data_size = sizeof(FFRawDemuxerContext),
+ .priv_class = &dts_demuxer_class,};
#define SEEKPOINT_SIZE 18
typedef struct FLACDecContext {
+ AVClass *class;
+ int raw_packet_size;
int found_seektable;
} FLACDecContext;
return -1;
}
+FF_RAW_DEMUXER_CLASS(flac)
AVInputFormat ff_flac_demuxer = {
.name = "flac",
.long_name = NULL_IF_CONFIG_SMALL("raw FLAC"),
.extensions = "flac",
.raw_codec_id = AV_CODEC_ID_FLAC,
.priv_data_size = sizeof(FLACDecContext),
+ .priv_class = &flac_demuxer_class,
};
return 0;
}
+FF_RAW_DEMUXER_CLASS(g722)
AVInputFormat ff_g722_demuxer = {
.name = "g722",
.long_name = NULL_IF_CONFIG_SMALL("raw G.722"),
.flags = AVFMT_GENERIC_INDEX,
.extensions = "g722,722",
.raw_codec_id = AV_CODEC_ID_ADPCM_G722,
-};
+ .priv_data_size = sizeof(FFRawDemuxerContext),
+ .priv_class = &g722_demuxer_class,};
return 0;
}
+FF_RAW_DEMUXER_CLASS(loas)
AVInputFormat ff_loas_demuxer = {
.name = "loas",
.long_name = NULL_IF_CONFIG_SMALL("LOAS AudioSyncStream"),
.read_packet = ff_raw_read_partial_packet,
.flags= AVFMT_GENERIC_INDEX,
.raw_codec_id = AV_CODEC_ID_AAC_LATM,
+ .priv_data_size = sizeof(FFRawDemuxerContext),
+ .priv_class = &loas_demuxer_class,
};
return mlp_thd_probe(p, 0xf8726fbb);
}
+FF_RAW_DEMUXER_CLASS(mlp)
AVInputFormat ff_mlp_demuxer = {
.name = "mlp",
.long_name = NULL_IF_CONFIG_SMALL("raw MLP"),
.flags = AVFMT_GENERIC_INDEX | AVFMT_NOTIMESTAMPS,
.extensions = "mlp",
.raw_codec_id = AV_CODEC_ID_MLP,
+ .priv_data_size = sizeof(FFRawDemuxerContext),
+ .priv_class = &mlp_demuxer_class,
};
#endif
return mlp_thd_probe(p, 0xf8726fba);
}
+FF_RAW_DEMUXER_CLASS(truehd)
AVInputFormat ff_truehd_demuxer = {
.name = "truehd",
.long_name = NULL_IF_CONFIG_SMALL("raw TrueHD"),
.flags = AVFMT_GENERIC_INDEX | AVFMT_NOTIMESTAMPS,
.extensions = "thd",
.raw_codec_id = AV_CODEC_ID_TRUEHD,
+ .priv_data_size = sizeof(FFRawDemuxerContext),
+ .priv_class = &truehd_demuxer_class,
};
#endif
int ff_raw_read_partial_packet(AVFormatContext *s, AVPacket *pkt)
{
+ FFRawDemuxerContext *raw = s->priv_data;
int ret, size;
- size = RAW_PACKET_SIZE;
+ size = raw->raw_packet_size;
if (av_new_packet(pkt, size) < 0)
return AVERROR(ENOMEM);
#define DEC AV_OPT_FLAG_DECODING_PARAM
const AVOption ff_rawvideo_options[] = {
{ "framerate", "", OFFSET(framerate), AV_OPT_TYPE_VIDEO_RATE, {.str = "25"}, 0, INT_MAX, DEC},
+ { "raw_packet_size", "", OFFSET(raw_packet_size), AV_OPT_TYPE_INT, {.i64 = RAW_PACKET_SIZE }, 1, INT_MAX, DEC},
+ { NULL },
+};
+const AVOption ff_raw_options[] = {
+ { "raw_packet_size", "", OFFSET(raw_packet_size), AV_OPT_TYPE_INT, {.i64 = RAW_PACKET_SIZE }, 1, INT_MAX, DEC},
{ NULL },
};
#if CONFIG_DATA_DEMUXER
+FF_RAW_DEMUXER_CLASS(raw_data)
+
AVInputFormat ff_data_demuxer = {
.name = "data",
.long_name = NULL_IF_CONFIG_SMALL("raw data"),
.read_packet = ff_raw_read_partial_packet,
.raw_codec_id = AV_CODEC_ID_NONE,
.flags = AVFMT_NOTIMESTAMPS,
+ .priv_data_size = sizeof(FFRawDemuxerContext),\
+ .priv_class = &raw_data_demuxer_class,\
};
#endif
typedef struct FFRawVideoDemuxerContext {
const AVClass *class; /**< Class for private options. */
+ int raw_packet_size;
char *video_size; /**< String describing video size, set by a private option. */
char *pixel_format; /**< Set by a private option. */
AVRational framerate; /**< AVRational describing framerate, set by a private option. */
} FFRawVideoDemuxerContext;
+typedef struct FFRawDemuxerContext {
+ const AVClass *class; /**< Class for private options. */
+ int raw_packet_size;
+} FFRawDemuxerContext;
+
extern const AVOption ff_rawvideo_options[];
+extern const AVOption ff_raw_options[];
int ff_raw_read_partial_packet(AVFormatContext *s, AVPacket *pkt);
int ff_raw_data_read_header(AVFormatContext *s);
+#define FF_RAW_DEMUXER_CLASS(name)\
+static const AVClass name ## _demuxer_class = {\
+ .class_name = #name " demuxer",\
+ .item_name = av_default_item_name,\
+ .option = ff_raw_options,\
+ .version = LIBAVUTIL_VERSION_INT,\
+};
+
#define FF_RAWVIDEO_DEMUXER_CLASS(name)\
static const AVClass name ## _demuxer_class = {\
.class_name = #name " demuxer",\
static const AVClass name ## _demuxer_class = {\
.class_name = #name " demuxer",\
.item_name = av_default_item_name,\
- .option = NULL,\
+ .option = ff_raw_options,\
.version = LIBAVUTIL_VERSION_INT,\
};
.extensions = ext,\
.flags = flag,\
.raw_codec_id = id,\
- .priv_data_size = 0,\
+ .priv_data_size = sizeof(FFRawDemuxerContext),\
.priv_class = &shortname ## _demuxer_class,\
};
#include "avformat.h"
#include "rawdec.h"
+FF_RAW_DEMUXER_CLASS(sbc)
AVInputFormat ff_sbc_demuxer = {
.name = "sbc",
.long_name = NULL_IF_CONFIG_SMALL("raw SBC (low-complexity subband codec)"),
.read_header = ff_raw_audio_read_header,
.read_packet = ff_raw_read_partial_packet,
.flags = AVFMT_GENERIC_INDEX,
+ .priv_data_size = sizeof(FFRawDemuxerContext),
+ .priv_class = &sbc_demuxer_class,
};
return AVPROBE_SCORE_EXTENSION + 1;
}
+FF_RAW_DEMUXER_CLASS(shorten)
AVInputFormat ff_shorten_demuxer = {
.name = "shn",
.long_name = NULL_IF_CONFIG_SMALL("raw Shorten"),
.flags = AVFMT_NOBINSEARCH | AVFMT_NOGENSEARCH | AVFMT_NO_BYTE_SEEK | AVFMT_NOTIMESTAMPS,
.extensions = "shn",
.raw_codec_id = AV_CODEC_ID_SHORTEN,
+ .priv_data_size = sizeof(FFRawDemuxerContext),
+ .priv_class = &shorten_demuxer_class,
};
#include "rawdec.h"
typedef struct TAKDemuxContext {
+ AVClass *class;
+ int raw_packet_size;
int mlast_frame;
int64_t data_end;
} TAKDemuxContext;
return ret;
}
+FF_RAW_DEMUXER_CLASS(tak)
AVInputFormat ff_tak_demuxer = {
.name = "tak",
.long_name = NULL_IF_CONFIG_SMALL("raw TAK"),
.flags = AVFMT_GENERIC_INDEX,
.extensions = "tak",
.raw_codec_id = AV_CODEC_ID_TAK,
+ .priv_class = &tak_demuxer_class,
};
return avio_seek(pb, data_offset, SEEK_SET);
}
+FF_RAW_DEMUXER_CLASS(wsd)
AVInputFormat ff_wsd_demuxer = {
.name = "wsd",
.long_name = NULL_IF_CONFIG_SMALL("Wideband Single-bit Data (WSD)"),
.extensions = "wsd",
.flags = AVFMT_GENERIC_INDEX | AVFMT_NO_BYTE_SEEK,
.raw_codec_id = AV_CODEC_ID_DSD_MSBF,
+ .priv_data_size = sizeof(FFRawDemuxerContext),
+ .priv_class = &wsd_demuxer_class,
};