00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "avformat.h"
00024 #include "internal.h"
00025 #include "avio_internal.h"
00026 #include "rawdec.h"
00027 #include "libavutil/opt.h"
00028 #include "libavutil/parseutils.h"
00029 #include "libavutil/pixdesc.h"
00030 #include "libavutil/avassert.h"
00031
00032 #define RAW_PACKET_SIZE 1024
00033
00034 int ff_raw_read_partial_packet(AVFormatContext *s, AVPacket *pkt)
00035 {
00036 int ret, size;
00037
00038 size = RAW_PACKET_SIZE;
00039
00040 if (av_new_packet(pkt, size) < 0)
00041 return AVERROR(ENOMEM);
00042
00043 pkt->pos= avio_tell(s->pb);
00044 pkt->stream_index = 0;
00045 ret = ffio_read_partial(s->pb, pkt->data, size);
00046 if (ret < 0) {
00047 av_free_packet(pkt);
00048 return ret;
00049 }
00050 av_shrink_packet(pkt, ret);
00051 return ret;
00052 }
00053
00054 int ff_raw_audio_read_header(AVFormatContext *s)
00055 {
00056 AVStream *st = avformat_new_stream(s, NULL);
00057 if (!st)
00058 return AVERROR(ENOMEM);
00059 st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
00060 st->codec->codec_id = s->iformat->raw_codec_id;
00061 st->need_parsing = AVSTREAM_PARSE_FULL_RAW;
00062 st->start_time = 0;
00063
00064
00065 return 0;
00066 }
00067
00068
00069 int ff_raw_video_read_header(AVFormatContext *s)
00070 {
00071 AVStream *st;
00072 FFRawVideoDemuxerContext *s1 = s->priv_data;
00073 AVRational framerate;
00074 int ret = 0;
00075
00076
00077 st = avformat_new_stream(s, NULL);
00078 if (!st) {
00079 ret = AVERROR(ENOMEM);
00080 goto fail;
00081 }
00082
00083 st->codec->codec_type = AVMEDIA_TYPE_VIDEO;
00084 st->codec->codec_id = s->iformat->raw_codec_id;
00085 st->need_parsing = AVSTREAM_PARSE_FULL_RAW;
00086
00087 if ((ret = av_parse_video_rate(&framerate, s1->framerate)) < 0) {
00088 av_log(s, AV_LOG_ERROR, "Could not parse framerate: %s.\n", s1->framerate);
00089 goto fail;
00090 }
00091
00092 st->codec->time_base = av_inv_q(framerate);
00093 avpriv_set_pts_info(st, 64, 1, 1200000);
00094
00095 fail:
00096 return ret;
00097 }
00098
00099
00100
00101 #define OFFSET(x) offsetof(FFRawVideoDemuxerContext, x)
00102 #define DEC AV_OPT_FLAG_DECODING_PARAM
00103 const AVOption ff_rawvideo_options[] = {
00104 { "framerate", "", OFFSET(framerate), AV_OPT_TYPE_STRING, {.str = "25"}, 0, 0, DEC},
00105 { NULL },
00106 };
00107
00108 #if CONFIG_LATM_DEMUXER
00109 AVInputFormat ff_latm_demuxer = {
00110 .name = "latm",
00111 .long_name = NULL_IF_CONFIG_SMALL("raw LOAS/LATM"),
00112 .read_header = ff_raw_audio_read_header,
00113 .read_packet = ff_raw_read_partial_packet,
00114 .flags = AVFMT_GENERIC_INDEX,
00115 .extensions = "latm",
00116 .raw_codec_id = AV_CODEC_ID_AAC_LATM,
00117 };
00118 #endif
00119
00120 #if CONFIG_MJPEG_DEMUXER
00121 FF_DEF_RAWVIDEO_DEMUXER(mjpeg, "raw MJPEG video", NULL, "mjpg,mjpeg,mpo", AV_CODEC_ID_MJPEG)
00122 #endif
00123
00124 #if CONFIG_MLP_DEMUXER
00125 AVInputFormat ff_mlp_demuxer = {
00126 .name = "mlp",
00127 .long_name = NULL_IF_CONFIG_SMALL("raw MLP"),
00128 .read_header = ff_raw_audio_read_header,
00129 .read_packet = ff_raw_read_partial_packet,
00130 .flags = AVFMT_GENERIC_INDEX,
00131 .extensions = "mlp",
00132 .raw_codec_id = AV_CODEC_ID_MLP,
00133 };
00134 #endif
00135
00136 #if CONFIG_TRUEHD_DEMUXER
00137 AVInputFormat ff_truehd_demuxer = {
00138 .name = "truehd",
00139 .long_name = NULL_IF_CONFIG_SMALL("raw TrueHD"),
00140 .read_header = ff_raw_audio_read_header,
00141 .read_packet = ff_raw_read_partial_packet,
00142 .flags = AVFMT_GENERIC_INDEX,
00143 .extensions = "thd",
00144 .raw_codec_id = AV_CODEC_ID_TRUEHD,
00145 };
00146 #endif
00147
00148 #if CONFIG_SHORTEN_DEMUXER
00149 AVInputFormat ff_shorten_demuxer = {
00150 .name = "shn",
00151 .long_name = NULL_IF_CONFIG_SMALL("raw Shorten"),
00152 .read_header = ff_raw_audio_read_header,
00153 .read_packet = ff_raw_read_partial_packet,
00154 .flags = AVFMT_NOBINSEARCH | AVFMT_NOGENSEARCH | AVFMT_NO_BYTE_SEEK,
00155 .extensions = "shn",
00156 .raw_codec_id = AV_CODEC_ID_SHORTEN,
00157 };
00158 #endif
00159
00160 #if CONFIG_VC1_DEMUXER
00161 FF_DEF_RAWVIDEO_DEMUXER(vc1, "raw VC-1", NULL, "vc1", AV_CODEC_ID_VC1)
00162 #endif