00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "libavutil/crc.h"
00024 #include "libavcodec/ac3_parser.h"
00025 #include "libavcodec/bitstream.h"
00026 #include "libavcodec/bytestream.h"
00027 #include "avformat.h"
00028 #include "raw.h"
00029 #include "id3v2.h"
00030
00031
00032
00033 #if CONFIG_ROQ_MUXER
00034 static int roq_write_header(struct AVFormatContext *s)
00035 {
00036 static const uint8_t header[] = {
00037 0x84, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0x1E, 0x00
00038 };
00039
00040 put_buffer(s->pb, header, 8);
00041 put_flush_packet(s->pb);
00042
00043 return 0;
00044 }
00045 #endif
00046
00047 #if CONFIG_NULL_MUXER
00048 static int null_write_packet(struct AVFormatContext *s, AVPacket *pkt)
00049 {
00050 return 0;
00051 }
00052 #endif
00053
00054 #if CONFIG_MUXERS
00055 static int raw_write_packet(struct AVFormatContext *s, AVPacket *pkt)
00056 {
00057 put_buffer(s->pb, pkt->data, pkt->size);
00058 put_flush_packet(s->pb);
00059 return 0;
00060 }
00061 #endif
00062
00063 #if CONFIG_DEMUXERS
00064
00065 static int raw_read_header(AVFormatContext *s, AVFormatParameters *ap)
00066 {
00067 AVStream *st;
00068 int id;
00069
00070 st = av_new_stream(s, 0);
00071 if (!st)
00072 return AVERROR(ENOMEM);
00073
00074 id = s->iformat->value;
00075 if (id == CODEC_ID_RAWVIDEO) {
00076 st->codec->codec_type = CODEC_TYPE_VIDEO;
00077 } else {
00078 st->codec->codec_type = CODEC_TYPE_AUDIO;
00079 }
00080 st->codec->codec_id = id;
00081
00082 switch(st->codec->codec_type) {
00083 case CODEC_TYPE_AUDIO:
00084 st->codec->sample_rate = ap->sample_rate;
00085 if(ap->channels) st->codec->channels = ap->channels;
00086 else st->codec->channels = 1;
00087 av_set_pts_info(st, 64, 1, st->codec->sample_rate);
00088 break;
00089 case CODEC_TYPE_VIDEO:
00090 if(ap->time_base.num)
00091 av_set_pts_info(st, 64, ap->time_base.num, ap->time_base.den);
00092 else
00093 av_set_pts_info(st, 64, 1, 25);
00094 st->codec->width = ap->width;
00095 st->codec->height = ap->height;
00096 st->codec->pix_fmt = ap->pix_fmt;
00097 if(st->codec->pix_fmt == PIX_FMT_NONE)
00098 st->codec->pix_fmt= PIX_FMT_YUV420P;
00099 break;
00100 default:
00101 return -1;
00102 }
00103 return 0;
00104 }
00105
00106 #define RAW_PACKET_SIZE 1024
00107
00108 static int raw_read_packet(AVFormatContext *s, AVPacket *pkt)
00109 {
00110 int ret, size, bps;
00111
00112
00113 size= RAW_PACKET_SIZE;
00114
00115 ret= av_get_packet(s->pb, pkt, size);
00116
00117 pkt->stream_index = 0;
00118 if (ret <= 0) {
00119 return AVERROR(EIO);
00120 }
00121
00122
00123 pkt->size = ret;
00124
00125 bps= av_get_bits_per_sample(s->streams[0]->codec->codec_id);
00126 assert(bps);
00127 pkt->dts=
00128 pkt->pts= pkt->pos*8 / (bps * s->streams[0]->codec->channels);
00129
00130 return ret;
00131 }
00132
00133 int ff_raw_read_partial_packet(AVFormatContext *s, AVPacket *pkt)
00134 {
00135 int ret, size;
00136
00137 size = RAW_PACKET_SIZE;
00138
00139 if (av_new_packet(pkt, size) < 0)
00140 return AVERROR(EIO);
00141
00142 pkt->pos= url_ftell(s->pb);
00143 pkt->stream_index = 0;
00144 ret = get_partial_buffer(s->pb, pkt->data, size);
00145 if (ret <= 0) {
00146 av_free_packet(pkt);
00147 return AVERROR(EIO);
00148 }
00149 pkt->size = ret;
00150 return ret;
00151 }
00152 #endif
00153
00154 #if CONFIG_RAWVIDEO_DEMUXER
00155 static int rawvideo_read_packet(AVFormatContext *s, AVPacket *pkt)
00156 {
00157 int packet_size, ret, width, height;
00158 AVStream *st = s->streams[0];
00159
00160 width = st->codec->width;
00161 height = st->codec->height;
00162
00163 packet_size = avpicture_get_size(st->codec->pix_fmt, width, height);
00164 if (packet_size < 0)
00165 return -1;
00166
00167 ret= av_get_packet(s->pb, pkt, packet_size);
00168 pkt->pts=
00169 pkt->dts= pkt->pos / packet_size;
00170
00171 pkt->stream_index = 0;
00172 if (ret != packet_size) {
00173 return AVERROR(EIO);
00174 } else {
00175 return 0;
00176 }
00177 }
00178 #endif
00179
00180 #if CONFIG_INGENIENT_DEMUXER
00181
00182 static int ingenient_read_packet(AVFormatContext *s, AVPacket *pkt)
00183 {
00184 int ret, size, w, h, unk1, unk2;
00185
00186 if (get_le32(s->pb) != MKTAG('M', 'J', 'P', 'G'))
00187 return AVERROR(EIO);
00188
00189 size = get_le32(s->pb);
00190
00191 w = get_le16(s->pb);
00192 h = get_le16(s->pb);
00193
00194 url_fskip(s->pb, 8);
00195 url_fskip(s->pb, 2);
00196 unk1 = get_le16(s->pb);
00197 unk2 = get_le16(s->pb);
00198 url_fskip(s->pb, 22);
00199
00200 av_log(s, AV_LOG_DEBUG, "Ingenient packet: size=%d, width=%d, height=%d, unk1=%d unk2=%d\n",
00201 size, w, h, unk1, unk2);
00202
00203 if (av_new_packet(pkt, size) < 0)
00204 return AVERROR(EIO);
00205
00206 pkt->pos = url_ftell(s->pb);
00207 pkt->stream_index = 0;
00208 ret = get_buffer(s->pb, pkt->data, size);
00209 if (ret <= 0) {
00210 av_free_packet(pkt);
00211 return AVERROR(EIO);
00212 }
00213 pkt->size = ret;
00214 return ret;
00215 }
00216 #endif
00217
00218 #if CONFIG_DEMUXERS
00219 int pcm_read_seek(AVFormatContext *s,
00220 int stream_index, int64_t timestamp, int flags)
00221 {
00222 AVStream *st;
00223 int block_align, byte_rate, ret;
00224 int64_t pos;
00225
00226 st = s->streams[0];
00227
00228 block_align = st->codec->block_align ? st->codec->block_align :
00229 (av_get_bits_per_sample(st->codec->codec_id) * st->codec->channels) >> 3;
00230 byte_rate = st->codec->bit_rate ? st->codec->bit_rate >> 3 :
00231 block_align * st->codec->sample_rate;
00232
00233 if (block_align <= 0 || byte_rate <= 0)
00234 return -1;
00235
00236
00237 pos = av_rescale_rnd(timestamp * byte_rate,
00238 st->time_base.num,
00239 st->time_base.den * (int64_t)block_align,
00240 (flags & AVSEEK_FLAG_BACKWARD) ? AV_ROUND_DOWN : AV_ROUND_UP);
00241 pos *= block_align;
00242
00243
00244 st->cur_dts = av_rescale(pos, st->time_base.den, byte_rate * (int64_t)st->time_base.num);
00245 if ((ret = url_fseek(s->pb, pos + s->data_offset, SEEK_SET)) < 0)
00246 return ret;
00247 return 0;
00248 }
00249
00250 static int audio_read_header(AVFormatContext *s,
00251 AVFormatParameters *ap)
00252 {
00253 AVStream *st = av_new_stream(s, 0);
00254 if (!st)
00255 return AVERROR(ENOMEM);
00256 st->codec->codec_type = CODEC_TYPE_AUDIO;
00257 st->codec->codec_id = s->iformat->value;
00258 st->need_parsing = AVSTREAM_PARSE_FULL;
00259
00260
00261 return 0;
00262 }
00263
00264
00265 static int video_read_header(AVFormatContext *s,
00266 AVFormatParameters *ap)
00267 {
00268 AVStream *st;
00269
00270 st = av_new_stream(s, 0);
00271 if (!st)
00272 return AVERROR(ENOMEM);
00273
00274 st->codec->codec_type = CODEC_TYPE_VIDEO;
00275 st->codec->codec_id = s->iformat->value;
00276 st->need_parsing = AVSTREAM_PARSE_FULL;
00277
00278
00279
00280 if (ap->time_base.num) {
00281 st->codec->time_base= ap->time_base;
00282 } else if ( st->codec->codec_id == CODEC_ID_MJPEG ||
00283 st->codec->codec_id == CODEC_ID_MPEG4 ||
00284 st->codec->codec_id == CODEC_ID_DIRAC ||
00285 st->codec->codec_id == CODEC_ID_H264) {
00286 st->codec->time_base= (AVRational){1,25};
00287 }
00288 av_set_pts_info(st, 64, 1, 1200000);
00289
00290 return 0;
00291 }
00292 #endif
00293
00294 #if CONFIG_MPEGVIDEO_DEMUXER
00295 #define SEQ_START_CODE 0x000001b3
00296 #define GOP_START_CODE 0x000001b8
00297 #define PICTURE_START_CODE 0x00000100
00298 #define SLICE_START_CODE 0x00000101
00299 #define PACK_START_CODE 0x000001ba
00300 #define VIDEO_ID 0x000001e0
00301 #define AUDIO_ID 0x000001c0
00302
00303 static int mpegvideo_probe(AVProbeData *p)
00304 {
00305 uint32_t code= -1;
00306 int pic=0, seq=0, slice=0, pspack=0, pes=0;
00307 int i;
00308
00309 for(i=0; i<p->buf_size; i++){
00310 code = (code<<8) + p->buf[i];
00311 if ((code & 0xffffff00) == 0x100) {
00312 switch(code){
00313 case SEQ_START_CODE: seq++; break;
00314 case PICTURE_START_CODE: pic++; break;
00315 case SLICE_START_CODE: slice++; break;
00316 case PACK_START_CODE: pspack++; break;
00317 }
00318 if ((code & 0x1f0) == VIDEO_ID) pes++;
00319 else if((code & 0x1e0) == AUDIO_ID) pes++;
00320 }
00321 }
00322 if(seq && seq*9<=pic*10 && pic*9<=slice*10 && !pspack && !pes)
00323 return AVPROBE_SCORE_MAX/2+1;
00324 return 0;
00325 }
00326
00327 #define CAVS_SEQ_START_CODE 0x000001b0
00328 #define CAVS_PIC_I_START_CODE 0x000001b3
00329 #define CAVS_UNDEF_START_CODE 0x000001b4
00330 #define CAVS_PIC_PB_START_CODE 0x000001b6
00331 #define CAVS_VIDEO_EDIT_CODE 0x000001b7
00332 #define CAVS_PROFILE_JIZHUN 0x20
00333
00334 static int cavsvideo_probe(AVProbeData *p)
00335 {
00336 uint32_t code= -1;
00337 int pic=0, seq=0, slice_pos = 0;
00338 int i;
00339
00340 for(i=0; i<p->buf_size; i++){
00341 code = (code<<8) + p->buf[i];
00342 if ((code & 0xffffff00) == 0x100) {
00343 if(code < CAVS_SEQ_START_CODE) {
00344
00345 if(code < slice_pos)
00346 return 0;
00347 slice_pos = code;
00348 } else {
00349 slice_pos = 0;
00350 }
00351 if (code == CAVS_SEQ_START_CODE) {
00352 seq++;
00353
00354 if(p->buf[i+1] != CAVS_PROFILE_JIZHUN)
00355 return 0;
00356 } else if ((code == CAVS_PIC_I_START_CODE) ||
00357 (code == CAVS_PIC_PB_START_CODE)) {
00358 pic++;
00359 } else if ((code == CAVS_UNDEF_START_CODE) ||
00360 (code > CAVS_VIDEO_EDIT_CODE)) {
00361 return 0;
00362 }
00363 }
00364 }
00365 if(seq && seq*9<=pic*10)
00366 return AVPROBE_SCORE_MAX/2;
00367 return 0;
00368 }
00369 #endif
00370
00371 #if CONFIG_M4V_DEMUXER
00372 #define VISUAL_OBJECT_START_CODE 0x000001b5
00373 #define VOP_START_CODE 0x000001b6
00374
00375 static int mpeg4video_probe(AVProbeData *probe_packet)
00376 {
00377 uint32_t temp_buffer= -1;
00378 int VO=0, VOL=0, VOP = 0, VISO = 0, res=0;
00379 int i;
00380
00381 for(i=0; i<probe_packet->buf_size; i++){
00382 temp_buffer = (temp_buffer<<8) + probe_packet->buf[i];
00383 if ((temp_buffer & 0xffffff00) != 0x100)
00384 continue;
00385
00386 if (temp_buffer == VOP_START_CODE) VOP++;
00387 else if (temp_buffer == VISUAL_OBJECT_START_CODE) VISO++;
00388 else if (temp_buffer < 0x120) VO++;
00389 else if (temp_buffer < 0x130) VOL++;
00390 else if ( !(0x1AF < temp_buffer && temp_buffer < 0x1B7)
00391 && !(0x1B9 < temp_buffer && temp_buffer < 0x1C4)) res++;
00392 }
00393
00394 if ( VOP >= VISO && VOP >= VOL && VO >= VOL && VOL > 0 && res==0)
00395 return AVPROBE_SCORE_MAX/2;
00396 return 0;
00397 }
00398 #endif
00399
00400 #if CONFIG_H264_DEMUXER
00401 static int h264_probe(AVProbeData *p)
00402 {
00403 uint32_t code= -1;
00404 int sps=0, pps=0, idr=0, res=0, sli=0;
00405 int i;
00406
00407 for(i=0; i<p->buf_size; i++){
00408 code = (code<<8) + p->buf[i];
00409 if ((code & 0xffffff00) == 0x100) {
00410 int ref_idc= (code>>5)&3;
00411 int type = code & 0x1F;
00412 static const int8_t ref_zero[32]={
00413 2, 0, 0, 0, 0,-1, 1,-1,
00414 -1, 1, 1, 1, 1,-1, 2, 2,
00415 2, 2, 2, 0, 2, 2, 2, 2,
00416 2, 2, 2, 2, 2, 2, 2, 2
00417 };
00418
00419 if(code & 0x80)
00420 return 0;
00421
00422 if(ref_zero[type] == 1 && ref_idc)
00423 return 0;
00424 if(ref_zero[type] ==-1 && !ref_idc)
00425 return 0;
00426 if(ref_zero[type] == 2)
00427 res++;
00428
00429 switch(type){
00430 case 1: sli++; break;
00431 case 5: idr++; break;
00432 case 7:
00433 if(p->buf[i+2]&0x0F)
00434 return 0;
00435 sps++;
00436 break;
00437 case 8: pps++; break;
00438 }
00439 }
00440 }
00441 if(sps && pps && (idr||sli>3) && res<(sps+pps+idr))
00442 return AVPROBE_SCORE_MAX/2+1;
00443 return 0;
00444 }
00445 #endif
00446
00447 #if CONFIG_H263_DEMUXER
00448 static int h263_probe(AVProbeData *p)
00449 {
00450 int code;
00451 const uint8_t *d;
00452
00453 d = p->buf;
00454 code = (d[0] << 14) | (d[1] << 6) | (d[2] >> 2);
00455 if (code == 0x20) {
00456 return 50;
00457 }
00458 return 0;
00459 }
00460 #endif
00461
00462 #if CONFIG_H261_DEMUXER
00463 static int h261_probe(AVProbeData *p)
00464 {
00465 int code;
00466 const uint8_t *d;
00467
00468 d = p->buf;
00469 code = (d[0] << 12) | (d[1] << 4) | (d[2] >> 4);
00470 if (code == 0x10) {
00471 return 50;
00472 }
00473 return 0;
00474 }
00475 #endif
00476
00477 #if CONFIG_DTS_DEMUXER
00478 #define DCA_MARKER_14B_BE 0x1FFFE800
00479 #define DCA_MARKER_14B_LE 0xFF1F00E8
00480 #define DCA_MARKER_RAW_BE 0x7FFE8001
00481 #define DCA_MARKER_RAW_LE 0xFE7F0180
00482 static int dts_probe(AVProbeData *p)
00483 {
00484 const uint8_t *buf, *bufp;
00485 uint32_t state = -1;
00486
00487 buf = p->buf;
00488
00489 for(; buf < (p->buf+p->buf_size)-2; buf+=2) {
00490 bufp = buf;
00491 state = (state << 16) | bytestream_get_be16(&bufp);
00492
00493
00494 if (state == DCA_MARKER_RAW_BE || state == DCA_MARKER_RAW_LE)
00495 return AVPROBE_SCORE_MAX/2+1;
00496
00497
00498 if (state == DCA_MARKER_14B_BE)
00499 if ((bytestream_get_be16(&bufp) & 0xFFF0) == 0x07F0)
00500 return AVPROBE_SCORE_MAX/2+1;
00501
00502
00503 if (state == DCA_MARKER_14B_LE)
00504 if ((bytestream_get_be16(&bufp) & 0xF0FF) == 0xF007)
00505 return AVPROBE_SCORE_MAX/2+1;
00506 }
00507
00508 return 0;
00509 }
00510 #endif
00511
00512 #if CONFIG_DIRAC_DEMUXER
00513 static int dirac_probe(AVProbeData *p)
00514 {
00515 if (AV_RL32(p->buf) == MKTAG('B', 'B', 'C', 'D'))
00516 return AVPROBE_SCORE_MAX;
00517 else
00518 return 0;
00519 }
00520 #endif
00521
00522 #if CONFIG_DNXHD_DEMUXER
00523 static int dnxhd_probe(AVProbeData *p)
00524 {
00525 static const uint8_t header[] = {0x00,0x00,0x02,0x80,0x01};
00526 if (!memcmp(p->buf, header, 5))
00527 return AVPROBE_SCORE_MAX;
00528 else
00529 return 0;
00530 }
00531 #endif
00532
00533 #if CONFIG_AC3_DEMUXER || CONFIG_EAC3_DEMUXER
00534 static int ac3_eac3_probe(AVProbeData *p, enum CodecID expected_codec_id)
00535 {
00536 int max_frames, first_frames = 0, frames;
00537 uint8_t *buf, *buf2, *end;
00538 AC3HeaderInfo hdr;
00539 GetBitContext gbc;
00540 enum CodecID codec_id = CODEC_ID_AC3;
00541
00542 max_frames = 0;
00543 buf = p->buf;
00544 end = buf + p->buf_size;
00545
00546 for(; buf < end; buf++) {
00547 buf2 = buf;
00548
00549 for(frames = 0; buf2 < end; frames++) {
00550 init_get_bits(&gbc, buf2, 54);
00551 if(ff_ac3_parse_header(&gbc, &hdr) < 0)
00552 break;
00553 if(buf2 + hdr.frame_size > end ||
00554 av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, buf2 + 2, hdr.frame_size - 2))
00555 break;
00556 if (hdr.bitstream_id > 10)
00557 codec_id = CODEC_ID_EAC3;
00558 buf2 += hdr.frame_size;
00559 }
00560 max_frames = FFMAX(max_frames, frames);
00561 if(buf == p->buf)
00562 first_frames = frames;
00563 }
00564 if(codec_id != expected_codec_id) return 0;
00565 if (first_frames>=3) return AVPROBE_SCORE_MAX * 3 / 4;
00566 else if(max_frames>=3) return AVPROBE_SCORE_MAX / 2;
00567 else if(max_frames>=1) return 1;
00568 else return 0;
00569 }
00570 #endif
00571
00572 #if CONFIG_AC3_DEMUXER
00573 static int ac3_probe(AVProbeData *p)
00574 {
00575 return ac3_eac3_probe(p, CODEC_ID_AC3);
00576 }
00577 #endif
00578
00579 #if CONFIG_EAC3_DEMUXER
00580 static int eac3_probe(AVProbeData *p)
00581 {
00582 return ac3_eac3_probe(p, CODEC_ID_EAC3);
00583 }
00584 #endif
00585
00586 #if CONFIG_AAC_DEMUXER
00587 static int adts_aac_probe(AVProbeData *p)
00588 {
00589 int max_frames = 0, first_frames = 0;
00590 int fsize, frames;
00591 uint8_t *buf0 = p->buf;
00592 uint8_t *buf2;
00593 uint8_t *buf;
00594 uint8_t *end = buf0 + p->buf_size - 7;
00595
00596 if (ff_id3v2_match(buf0)) {
00597 buf0 += ff_id3v2_tag_len(buf0);
00598 }
00599 buf = buf0;
00600
00601 for(; buf < end; buf= buf2+1) {
00602 buf2 = buf;
00603
00604 for(frames = 0; buf2 < end; frames++) {
00605 uint32_t header = AV_RB16(buf2);
00606 if((header&0xFFF6) != 0xFFF0)
00607 break;
00608 fsize = (AV_RB32(buf2+3)>>13) & 0x8FFF;
00609 if(fsize < 7)
00610 break;
00611 buf2 += fsize;
00612 }
00613 max_frames = FFMAX(max_frames, frames);
00614 if(buf == buf0)
00615 first_frames= frames;
00616 }
00617 if (first_frames>=3) return AVPROBE_SCORE_MAX/2+1;
00618 else if(max_frames>500)return AVPROBE_SCORE_MAX/2;
00619 else if(max_frames>=3) return AVPROBE_SCORE_MAX/4;
00620 else if(max_frames>=1) return 1;
00621 else return 0;
00622 }
00623 #endif
00624
00625
00626
00627 #if CONFIG_AAC_DEMUXER
00628 AVInputFormat aac_demuxer = {
00629 "aac",
00630 NULL_IF_CONFIG_SMALL("raw ADTS AAC"),
00631 0,
00632 adts_aac_probe,
00633 audio_read_header,
00634 ff_raw_read_partial_packet,
00635 .flags= AVFMT_GENERIC_INDEX,
00636 .extensions = "aac",
00637 .value = CODEC_ID_AAC,
00638 };
00639 #endif
00640
00641 #if CONFIG_AC3_DEMUXER
00642 AVInputFormat ac3_demuxer = {
00643 "ac3",
00644 NULL_IF_CONFIG_SMALL("raw AC-3"),
00645 0,
00646 ac3_probe,
00647 audio_read_header,
00648 ff_raw_read_partial_packet,
00649 .flags= AVFMT_GENERIC_INDEX,
00650 .extensions = "ac3",
00651 .value = CODEC_ID_AC3,
00652 };
00653 #endif
00654
00655 #if CONFIG_AC3_MUXER
00656 AVOutputFormat ac3_muxer = {
00657 "ac3",
00658 NULL_IF_CONFIG_SMALL("raw AC-3"),
00659 "audio/x-ac3",
00660 "ac3",
00661 0,
00662 CODEC_ID_AC3,
00663 CODEC_ID_NONE,
00664 NULL,
00665 raw_write_packet,
00666 .flags= AVFMT_NOTIMESTAMPS,
00667 };
00668 #endif
00669
00670 #if CONFIG_DIRAC_DEMUXER
00671 AVInputFormat dirac_demuxer = {
00672 "dirac",
00673 NULL_IF_CONFIG_SMALL("raw Dirac"),
00674 0,
00675 dirac_probe,
00676 video_read_header,
00677 ff_raw_read_partial_packet,
00678 .flags= AVFMT_GENERIC_INDEX,
00679 .value = CODEC_ID_DIRAC,
00680 };
00681 #endif
00682
00683 #if CONFIG_DIRAC_MUXER
00684 AVOutputFormat dirac_muxer = {
00685 "dirac",
00686 NULL_IF_CONFIG_SMALL("raw Dirac"),
00687 NULL,
00688 "drc",
00689 0,
00690 CODEC_ID_NONE,
00691 CODEC_ID_DIRAC,
00692 NULL,
00693 raw_write_packet,
00694 .flags= AVFMT_NOTIMESTAMPS,
00695 };
00696 #endif
00697
00698 #if CONFIG_DNXHD_DEMUXER
00699 AVInputFormat dnxhd_demuxer = {
00700 "dnxhd",
00701 NULL_IF_CONFIG_SMALL("raw DNxHD (SMPTE VC-3)"),
00702 0,
00703 dnxhd_probe,
00704 video_read_header,
00705 ff_raw_read_partial_packet,
00706 .flags= AVFMT_GENERIC_INDEX,
00707 .value = CODEC_ID_DNXHD,
00708 };
00709 #endif
00710
00711 #if CONFIG_DNXHD_MUXER
00712 AVOutputFormat dnxhd_muxer = {
00713 "dnxhd",
00714 NULL_IF_CONFIG_SMALL("raw DNxHD (SMPTE VC-3)"),
00715 NULL,
00716 "dnxhd",
00717 0,
00718 CODEC_ID_NONE,
00719 CODEC_ID_DNXHD,
00720 NULL,
00721 raw_write_packet,
00722 .flags= AVFMT_NOTIMESTAMPS,
00723 };
00724 #endif
00725
00726 #if CONFIG_DTS_DEMUXER
00727 AVInputFormat dts_demuxer = {
00728 "dts",
00729 NULL_IF_CONFIG_SMALL("raw DTS"),
00730 0,
00731 dts_probe,
00732 audio_read_header,
00733 ff_raw_read_partial_packet,
00734 .flags= AVFMT_GENERIC_INDEX,
00735 .extensions = "dts",
00736 .value = CODEC_ID_DTS,
00737 };
00738 #endif
00739
00740 #if CONFIG_DTS_MUXER
00741 AVOutputFormat dts_muxer = {
00742 "dts",
00743 NULL_IF_CONFIG_SMALL("raw DTS"),
00744 "audio/x-dca",
00745 "dts",
00746 0,
00747 CODEC_ID_DTS,
00748 CODEC_ID_NONE,
00749 NULL,
00750 raw_write_packet,
00751 .flags= AVFMT_NOTIMESTAMPS,
00752 };
00753 #endif
00754
00755 #if CONFIG_EAC3_DEMUXER
00756 AVInputFormat eac3_demuxer = {
00757 "eac3",
00758 NULL_IF_CONFIG_SMALL("raw E-AC-3"),
00759 0,
00760 eac3_probe,
00761 audio_read_header,
00762 ff_raw_read_partial_packet,
00763 .flags= AVFMT_GENERIC_INDEX,
00764 .extensions = "eac3",
00765 .value = CODEC_ID_EAC3,
00766 };
00767 #endif
00768
00769 #if CONFIG_EAC3_MUXER
00770 AVOutputFormat eac3_muxer = {
00771 "eac3",
00772 NULL_IF_CONFIG_SMALL("raw E-AC-3"),
00773 "audio/x-eac3",
00774 "eac3",
00775 0,
00776 CODEC_ID_EAC3,
00777 CODEC_ID_NONE,
00778 NULL,
00779 raw_write_packet,
00780 .flags= AVFMT_NOTIMESTAMPS,
00781 };
00782 #endif
00783
00784 #if CONFIG_GSM_DEMUXER
00785 AVInputFormat gsm_demuxer = {
00786 "gsm",
00787 NULL_IF_CONFIG_SMALL("raw GSM"),
00788 0,
00789 NULL,
00790 audio_read_header,
00791 ff_raw_read_partial_packet,
00792 .flags= AVFMT_GENERIC_INDEX,
00793 .extensions = "gsm",
00794 .value = CODEC_ID_GSM,
00795 };
00796 #endif
00797
00798 #if CONFIG_H261_DEMUXER
00799 AVInputFormat h261_demuxer = {
00800 "h261",
00801 NULL_IF_CONFIG_SMALL("raw H.261"),
00802 0,
00803 h261_probe,
00804 video_read_header,
00805 ff_raw_read_partial_packet,
00806 .flags= AVFMT_GENERIC_INDEX,
00807 .extensions = "h261",
00808 .value = CODEC_ID_H261,
00809 };
00810 #endif
00811
00812 #if CONFIG_H261_MUXER
00813 AVOutputFormat h261_muxer = {
00814 "h261",
00815 NULL_IF_CONFIG_SMALL("raw H.261"),
00816 "video/x-h261",
00817 "h261",
00818 0,
00819 CODEC_ID_NONE,
00820 CODEC_ID_H261,
00821 NULL,
00822 raw_write_packet,
00823 .flags= AVFMT_NOTIMESTAMPS,
00824 };
00825 #endif
00826
00827 #if CONFIG_H263_DEMUXER
00828 AVInputFormat h263_demuxer = {
00829 "h263",
00830 NULL_IF_CONFIG_SMALL("raw H.263"),
00831 0,
00832 h263_probe,
00833 video_read_header,
00834 ff_raw_read_partial_packet,
00835 .flags= AVFMT_GENERIC_INDEX,
00836
00837 .value = CODEC_ID_H263,
00838 };
00839 #endif
00840
00841 #if CONFIG_H263_MUXER
00842 AVOutputFormat h263_muxer = {
00843 "h263",
00844 NULL_IF_CONFIG_SMALL("raw H.263"),
00845 "video/x-h263",
00846 "h263",
00847 0,
00848 CODEC_ID_NONE,
00849 CODEC_ID_H263,
00850 NULL,
00851 raw_write_packet,
00852 .flags= AVFMT_NOTIMESTAMPS,
00853 };
00854 #endif
00855
00856 #if CONFIG_H264_DEMUXER
00857 AVInputFormat h264_demuxer = {
00858 "h264",
00859 NULL_IF_CONFIG_SMALL("raw H.264 video format"),
00860 0,
00861 h264_probe,
00862 video_read_header,
00863 ff_raw_read_partial_packet,
00864 .flags= AVFMT_GENERIC_INDEX,
00865 .extensions = "h26l,h264,264",
00866 .value = CODEC_ID_H264,
00867 };
00868 #endif
00869
00870 #if CONFIG_H264_MUXER
00871 AVOutputFormat h264_muxer = {
00872 "h264",
00873 NULL_IF_CONFIG_SMALL("raw H.264 video format"),
00874 NULL,
00875 "h264",
00876 0,
00877 CODEC_ID_NONE,
00878 CODEC_ID_H264,
00879 NULL,
00880 raw_write_packet,
00881 .flags= AVFMT_NOTIMESTAMPS,
00882 };
00883 #endif
00884
00885 #if CONFIG_INGENIENT_DEMUXER
00886 AVInputFormat ingenient_demuxer = {
00887 "ingenient",
00888 NULL_IF_CONFIG_SMALL("raw Ingenient MJPEG"),
00889 0,
00890 NULL,
00891 video_read_header,
00892 ingenient_read_packet,
00893 .flags= AVFMT_GENERIC_INDEX,
00894 .extensions = "cgi",
00895 .value = CODEC_ID_MJPEG,
00896 };
00897 #endif
00898
00899 #if CONFIG_M4V_DEMUXER
00900 AVInputFormat m4v_demuxer = {
00901 "m4v",
00902 NULL_IF_CONFIG_SMALL("raw MPEG-4 video format"),
00903 0,
00904 mpeg4video_probe,
00905 video_read_header,
00906 ff_raw_read_partial_packet,
00907 .flags= AVFMT_GENERIC_INDEX,
00908 .extensions = "m4v",
00909 .value = CODEC_ID_MPEG4,
00910 };
00911 #endif
00912
00913 #if CONFIG_M4V_MUXER
00914 AVOutputFormat m4v_muxer = {
00915 "m4v",
00916 NULL_IF_CONFIG_SMALL("raw MPEG-4 video format"),
00917 NULL,
00918 "m4v",
00919 0,
00920 CODEC_ID_NONE,
00921 CODEC_ID_MPEG4,
00922 NULL,
00923 raw_write_packet,
00924 .flags= AVFMT_NOTIMESTAMPS,
00925 };
00926 #endif
00927
00928 #if CONFIG_MJPEG_DEMUXER
00929 AVInputFormat mjpeg_demuxer = {
00930 "mjpeg",
00931 NULL_IF_CONFIG_SMALL("raw MJPEG video"),
00932 0,
00933 NULL,
00934 video_read_header,
00935 ff_raw_read_partial_packet,
00936 .flags= AVFMT_GENERIC_INDEX,
00937 .extensions = "mjpg,mjpeg",
00938 .value = CODEC_ID_MJPEG,
00939 };
00940 #endif
00941
00942 #if CONFIG_MJPEG_MUXER
00943 AVOutputFormat mjpeg_muxer = {
00944 "mjpeg",
00945 NULL_IF_CONFIG_SMALL("raw MJPEG video"),
00946 "video/x-mjpeg",
00947 "mjpg,mjpeg",
00948 0,
00949 CODEC_ID_NONE,
00950 CODEC_ID_MJPEG,
00951 NULL,
00952 raw_write_packet,
00953 .flags= AVFMT_NOTIMESTAMPS,
00954 };
00955 #endif
00956
00957 #if CONFIG_MLP_DEMUXER
00958 AVInputFormat mlp_demuxer = {
00959 "mlp",
00960 NULL_IF_CONFIG_SMALL("raw MLP"),
00961 0,
00962 NULL,
00963 audio_read_header,
00964 ff_raw_read_partial_packet,
00965 .flags= AVFMT_GENERIC_INDEX,
00966 .extensions = "mlp",
00967 .value = CODEC_ID_MLP,
00968 };
00969 #endif
00970
00971 #if CONFIG_MPEG1VIDEO_MUXER
00972 AVOutputFormat mpeg1video_muxer = {
00973 "mpeg1video",
00974 NULL_IF_CONFIG_SMALL("raw MPEG-1 video"),
00975 "video/x-mpeg",
00976 "mpg,mpeg,m1v",
00977 0,
00978 CODEC_ID_NONE,
00979 CODEC_ID_MPEG1VIDEO,
00980 NULL,
00981 raw_write_packet,
00982 .flags= AVFMT_NOTIMESTAMPS,
00983 };
00984 #endif
00985
00986 #if CONFIG_MPEG2VIDEO_MUXER
00987 AVOutputFormat mpeg2video_muxer = {
00988 "mpeg2video",
00989 NULL_IF_CONFIG_SMALL("raw MPEG-2 video"),
00990 NULL,
00991 "m2v",
00992 0,
00993 CODEC_ID_NONE,
00994 CODEC_ID_MPEG2VIDEO,
00995 NULL,
00996 raw_write_packet,
00997 .flags= AVFMT_NOTIMESTAMPS,
00998 };
00999 #endif
01000
01001 #if CONFIG_MPEGVIDEO_DEMUXER
01002 AVInputFormat mpegvideo_demuxer = {
01003 "mpegvideo",
01004 NULL_IF_CONFIG_SMALL("raw MPEG video"),
01005 0,
01006 mpegvideo_probe,
01007 video_read_header,
01008 ff_raw_read_partial_packet,
01009 .flags= AVFMT_GENERIC_INDEX,
01010 .value = CODEC_ID_MPEG1VIDEO,
01011 };
01012 #endif
01013
01014 #if CONFIG_CAVSVIDEO_DEMUXER
01015 AVInputFormat cavsvideo_demuxer = {
01016 "cavsvideo",
01017 NULL_IF_CONFIG_SMALL("raw Chinese AVS video"),
01018 0,
01019 cavsvideo_probe,
01020 video_read_header,
01021 ff_raw_read_partial_packet,
01022 .flags= AVFMT_GENERIC_INDEX,
01023 .value = CODEC_ID_CAVS,
01024 };
01025 #endif
01026
01027 #if CONFIG_NULL_MUXER
01028 AVOutputFormat null_muxer = {
01029 "null",
01030 NULL_IF_CONFIG_SMALL("raw null video format"),
01031 NULL,
01032 NULL,
01033 0,
01034 #ifdef WORDS_BIGENDIAN
01035 CODEC_ID_PCM_S16BE,
01036 #else
01037 CODEC_ID_PCM_S16LE,
01038 #endif
01039 CODEC_ID_RAWVIDEO,
01040 NULL,
01041 null_write_packet,
01042 .flags = AVFMT_NOFILE | AVFMT_RAWPICTURE | AVFMT_NOTIMESTAMPS,
01043 };
01044 #endif
01045
01046 #if CONFIG_RAWVIDEO_DEMUXER
01047 AVInputFormat rawvideo_demuxer = {
01048 "rawvideo",
01049 NULL_IF_CONFIG_SMALL("raw video format"),
01050 0,
01051 NULL,
01052 raw_read_header,
01053 rawvideo_read_packet,
01054 .flags= AVFMT_GENERIC_INDEX,
01055 .extensions = "yuv,cif,qcif,rgb",
01056 .value = CODEC_ID_RAWVIDEO,
01057 };
01058 #endif
01059
01060 #if CONFIG_RAWVIDEO_MUXER
01061 AVOutputFormat rawvideo_muxer = {
01062 "rawvideo",
01063 NULL_IF_CONFIG_SMALL("raw video format"),
01064 NULL,
01065 "yuv,rgb",
01066 0,
01067 CODEC_ID_NONE,
01068 CODEC_ID_RAWVIDEO,
01069 NULL,
01070 raw_write_packet,
01071 .flags= AVFMT_NOTIMESTAMPS,
01072 };
01073 #endif
01074
01075 #if CONFIG_ROQ_MUXER
01076 AVOutputFormat roq_muxer =
01077 {
01078 "RoQ",
01079 NULL_IF_CONFIG_SMALL("raw id RoQ format"),
01080 NULL,
01081 "roq",
01082 0,
01083 CODEC_ID_ROQ_DPCM,
01084 CODEC_ID_ROQ,
01085 roq_write_header,
01086 raw_write_packet,
01087 };
01088 #endif
01089
01090 #if CONFIG_SHORTEN_DEMUXER
01091 AVInputFormat shorten_demuxer = {
01092 "shn",
01093 NULL_IF_CONFIG_SMALL("raw Shorten"),
01094 0,
01095 NULL,
01096 audio_read_header,
01097 ff_raw_read_partial_packet,
01098 .flags= AVFMT_GENERIC_INDEX,
01099 .extensions = "shn",
01100 .value = CODEC_ID_SHORTEN,
01101 };
01102 #endif
01103
01104 #if CONFIG_VC1_DEMUXER
01105 AVInputFormat vc1_demuxer = {
01106 "vc1",
01107 NULL_IF_CONFIG_SMALL("raw VC-1"),
01108 0,
01109 NULL ,
01110 video_read_header,
01111 ff_raw_read_partial_packet,
01112 .extensions = "vc1",
01113 .value = CODEC_ID_VC1,
01114 };
01115 #endif
01116
01117
01118
01119 #define PCMINPUTDEF(name, long_name, ext, codec) \
01120 AVInputFormat pcm_ ## name ## _demuxer = {\
01121 #name,\
01122 NULL_IF_CONFIG_SMALL(long_name),\
01123 0,\
01124 NULL,\
01125 raw_read_header,\
01126 raw_read_packet,\
01127 NULL,\
01128 pcm_read_seek,\
01129 .flags= AVFMT_GENERIC_INDEX,\
01130 .extensions = ext,\
01131 .value = codec,\
01132 };
01133
01134 #define PCMOUTPUTDEF(name, long_name, ext, codec) \
01135 AVOutputFormat pcm_ ## name ## _muxer = {\
01136 #name,\
01137 NULL_IF_CONFIG_SMALL(long_name),\
01138 NULL,\
01139 ext,\
01140 0,\
01141 codec,\
01142 CODEC_ID_NONE,\
01143 NULL,\
01144 raw_write_packet,\
01145 .flags= AVFMT_NOTIMESTAMPS,\
01146 };
01147
01148
01149 #if !CONFIG_MUXERS && CONFIG_DEMUXERS
01150 #define PCMDEF(name, long_name, ext, codec) \
01151 PCMINPUTDEF(name, long_name, ext, codec)
01152 #elif CONFIG_MUXERS && !CONFIG_DEMUXERS
01153 #define PCMDEF(name, long_name, ext, codec) \
01154 PCMOUTPUTDEF(name, long_name, ext, codec)
01155 #elif CONFIG_MUXERS && CONFIG_DEMUXERS
01156 #define PCMDEF(name, long_name, ext, codec) \
01157 PCMINPUTDEF(name, long_name, ext, codec)\
01158 PCMOUTPUTDEF(name, long_name, ext, codec)
01159 #else
01160 #define PCMDEF(name, long_name, ext, codec)
01161 #endif
01162
01163 #ifdef WORDS_BIGENDIAN
01164 #define BE_DEF(s) s
01165 #define LE_DEF(s) NULL
01166 #else
01167 #define BE_DEF(s) NULL
01168 #define LE_DEF(s) s
01169 #endif
01170
01171 PCMDEF(f64be, "PCM 64 bit floating-point big-endian format",
01172 NULL, CODEC_ID_PCM_F64BE)
01173
01174 PCMDEF(f64le, "PCM 64 bit floating-point little-endian format",
01175 NULL, CODEC_ID_PCM_F64LE)
01176
01177 PCMDEF(f32be, "PCM 32 bit floating-point big-endian format",
01178 NULL, CODEC_ID_PCM_F32BE)
01179
01180 PCMDEF(f32le, "PCM 32 bit floating-point little-endian format",
01181 NULL, CODEC_ID_PCM_F32LE)
01182
01183 PCMDEF(s32be, "PCM signed 32 bit big-endian format",
01184 NULL, CODEC_ID_PCM_S32BE)
01185
01186 PCMDEF(s32le, "PCM signed 32 bit little-endian format",
01187 NULL, CODEC_ID_PCM_S32LE)
01188
01189 PCMDEF(s24be, "PCM signed 24 bit big-endian format",
01190 NULL, CODEC_ID_PCM_S24BE)
01191
01192 PCMDEF(s24le, "PCM signed 24 bit little-endian format",
01193 NULL, CODEC_ID_PCM_S24LE)
01194
01195 PCMDEF(s16be, "PCM signed 16 bit big-endian format",
01196 BE_DEF("sw"), CODEC_ID_PCM_S16BE)
01197
01198 PCMDEF(s16le, "PCM signed 16 bit little-endian format",
01199 LE_DEF("sw"), CODEC_ID_PCM_S16LE)
01200
01201 PCMDEF(s8, "PCM signed 8 bit format",
01202 "sb", CODEC_ID_PCM_S8)
01203
01204 PCMDEF(u32be, "PCM unsigned 32 bit big-endian format",
01205 NULL, CODEC_ID_PCM_U32BE)
01206
01207 PCMDEF(u32le, "PCM unsigned 32 bit little-endian format",
01208 NULL, CODEC_ID_PCM_U32LE)
01209
01210 PCMDEF(u24be, "PCM unsigned 24 bit big-endian format",
01211 NULL, CODEC_ID_PCM_U24BE)
01212
01213 PCMDEF(u24le, "PCM unsigned 24 bit little-endian format",
01214 NULL, CODEC_ID_PCM_U24LE)
01215
01216 PCMDEF(u16be, "PCM unsigned 16 bit big-endian format",
01217 BE_DEF("uw"), CODEC_ID_PCM_U16BE)
01218
01219 PCMDEF(u16le, "PCM unsigned 16 bit little-endian format",
01220 LE_DEF("uw"), CODEC_ID_PCM_U16LE)
01221
01222 PCMDEF(u8, "PCM unsigned 8 bit format",
01223 "ub", CODEC_ID_PCM_U8)
01224
01225 PCMDEF(alaw, "PCM A-law format",
01226 "al", CODEC_ID_PCM_ALAW)
01227
01228 PCMDEF(mulaw, "PCM mu-law format",
01229 "ul", CODEC_ID_PCM_MULAW)