X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Frawdec.c;h=c162b52940af2731399cae064ed6b883f484717b;hb=4be1714b12b6c311a99a64888ea5f279c3ed9885;hp=b38a4b5e5d4bacf8e1e65df222290069fd60bc46;hpb=c00579ab32aa620116c97dbc52c4c31418bc7fbb;p=ffmpeg diff --git a/libavformat/rawdec.c b/libavformat/rawdec.c index b38a4b5e5d4..c162b52940a 100644 --- a/libavformat/rawdec.c +++ b/libavformat/rawdec.c @@ -34,12 +34,13 @@ 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); + if ((ret = av_new_packet(pkt, size)) < 0) + return ret; pkt->pos= avio_tell(s->pb); pkt->stream_index = 0; @@ -91,6 +92,17 @@ fail: return ret; } +int ff_raw_subtitle_read_header(AVFormatContext *s) +{ + AVStream *st = avformat_new_stream(s, NULL); + if (!st) + return AVERROR(ENOMEM); + st->codecpar->codec_type = AVMEDIA_TYPE_SUBTITLE; + st->codecpar->codec_id = s->iformat->raw_codec_id; + st->start_time = 0; + return 0; +} + int ff_raw_data_read_header(AVFormatContext *s) { AVStream *st = avformat_new_stream(s, NULL); @@ -108,22 +120,33 @@ int ff_raw_data_read_header(AVFormatContext *s) #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 }, +}; +#undef OFFSET +#define OFFSET(x) offsetof(FFRawDemuxerContext, x) +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 -AVInputFormat ff_data_demuxer = { +FF_RAW_DEMUXER_CLASS(raw_data) + +const AVInputFormat ff_data_demuxer = { .name = "data", .long_name = NULL_IF_CONFIG_SMALL("raw data"), .read_header = ff_raw_data_read_header, .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 #if CONFIG_MJPEG_DEMUXER -static int mjpeg_probe(AVProbeData *p) +static int mjpeg_probe(const AVProbeData *p) { int i; int state = -1; @@ -185,6 +208,8 @@ static int mjpeg_probe(AVProbeData *p) return AVPROBE_SCORE_EXTENSION / 2; return AVPROBE_SCORE_EXTENSION / 4; } + if (!nb_invalid && nb_frames) + return AVPROBE_SCORE_EXTENSION / 4; return 0; }