You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1163 lines
27KB

  1. /*
  2. * RAW muxer and demuxer
  3. * Copyright (c) 2001 Fabrice Bellard.
  4. * Copyright (c) 2005 Alex Beregszaszi
  5. *
  6. * This file is part of FFmpeg.
  7. *
  8. * FFmpeg is free software; you can redistribute it and/or
  9. * modify it under the terms of the GNU Lesser General Public
  10. * License as published by the Free Software Foundation; either
  11. * version 2.1 of the License, or (at your option) any later version.
  12. *
  13. * FFmpeg is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  16. * Lesser General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU Lesser General Public
  19. * License along with FFmpeg; if not, write to the Free Software
  20. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  21. */
  22. #include "libavutil/crc.h"
  23. #include "libavcodec/ac3_parser.h"
  24. #include "libavcodec/bitstream.h"
  25. #include "libavcodec/bytestream.h"
  26. #include "avformat.h"
  27. #include "raw.h"
  28. /* simple formats */
  29. #ifdef CONFIG_FLAC_MUXER
  30. static int flac_write_header(struct AVFormatContext *s)
  31. {
  32. static const uint8_t header[8] = {
  33. 0x66, 0x4C, 0x61, 0x43, 0x80, 0x00, 0x00, 0x22
  34. };
  35. uint8_t *streaminfo = s->streams[0]->codec->extradata;
  36. int len = s->streams[0]->codec->extradata_size;
  37. if(streaminfo != NULL && len > 0) {
  38. put_buffer(s->pb, header, 8);
  39. put_buffer(s->pb, streaminfo, len);
  40. }
  41. return 0;
  42. }
  43. static int flac_write_trailer(struct AVFormatContext *s)
  44. {
  45. ByteIOContext *pb = s->pb;
  46. uint8_t *streaminfo = s->streams[0]->codec->extradata;
  47. int len = s->streams[0]->codec->extradata_size;
  48. offset_t file_size;
  49. if (streaminfo && len > 0 && !url_is_streamed(s->pb)) {
  50. file_size = url_ftell(pb);
  51. url_fseek(pb, 8, SEEK_SET);
  52. put_buffer(pb, streaminfo, len);
  53. url_fseek(pb, file_size, SEEK_SET);
  54. put_flush_packet(pb);
  55. }
  56. return 0;
  57. }
  58. #endif
  59. #ifdef CONFIG_ROQ_MUXER
  60. static int roq_write_header(struct AVFormatContext *s)
  61. {
  62. static const uint8_t header[] = {
  63. 0x84, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0x1E, 0x00
  64. };
  65. put_buffer(s->pb, header, 8);
  66. put_flush_packet(s->pb);
  67. return 0;
  68. }
  69. #endif
  70. #ifdef CONFIG_NULL_MUXER
  71. static int null_write_packet(struct AVFormatContext *s, AVPacket *pkt)
  72. {
  73. return 0;
  74. }
  75. #endif
  76. #ifdef CONFIG_MUXERS
  77. static int raw_write_packet(struct AVFormatContext *s, AVPacket *pkt)
  78. {
  79. put_buffer(s->pb, pkt->data, pkt->size);
  80. put_flush_packet(s->pb);
  81. return 0;
  82. }
  83. #endif
  84. #ifdef CONFIG_DEMUXERS
  85. /* raw input */
  86. static int raw_read_header(AVFormatContext *s, AVFormatParameters *ap)
  87. {
  88. AVStream *st;
  89. int id;
  90. st = av_new_stream(s, 0);
  91. if (!st)
  92. return AVERROR(ENOMEM);
  93. id = s->iformat->value;
  94. if (id == CODEC_ID_RAWVIDEO) {
  95. st->codec->codec_type = CODEC_TYPE_VIDEO;
  96. } else {
  97. st->codec->codec_type = CODEC_TYPE_AUDIO;
  98. }
  99. st->codec->codec_id = id;
  100. switch(st->codec->codec_type) {
  101. case CODEC_TYPE_AUDIO:
  102. st->codec->sample_rate = ap->sample_rate;
  103. st->codec->channels = ap->channels;
  104. av_set_pts_info(st, 64, 1, st->codec->sample_rate);
  105. break;
  106. case CODEC_TYPE_VIDEO:
  107. if(ap->time_base.num)
  108. av_set_pts_info(st, 64, ap->time_base.num, ap->time_base.den);
  109. else
  110. av_set_pts_info(st, 64, 1, 25);
  111. st->codec->width = ap->width;
  112. st->codec->height = ap->height;
  113. st->codec->pix_fmt = ap->pix_fmt;
  114. if(st->codec->pix_fmt == PIX_FMT_NONE)
  115. st->codec->pix_fmt= PIX_FMT_YUV420P;
  116. break;
  117. default:
  118. return -1;
  119. }
  120. return 0;
  121. }
  122. #define RAW_PACKET_SIZE 1024
  123. static int raw_read_packet(AVFormatContext *s, AVPacket *pkt)
  124. {
  125. int ret, size, bps;
  126. // AVStream *st = s->streams[0];
  127. size= RAW_PACKET_SIZE;
  128. ret= av_get_packet(s->pb, pkt, size);
  129. pkt->stream_index = 0;
  130. if (ret <= 0) {
  131. return AVERROR(EIO);
  132. }
  133. /* note: we need to modify the packet size here to handle the last
  134. packet */
  135. pkt->size = ret;
  136. bps= av_get_bits_per_sample(s->streams[0]->codec->codec_id);
  137. assert(bps); // if false there IS a bug elsewhere (NOT in this function)
  138. pkt->dts=
  139. pkt->pts= pkt->pos*8 / (bps * s->streams[0]->codec->channels);
  140. return ret;
  141. }
  142. static int raw_read_partial_packet(AVFormatContext *s, AVPacket *pkt)
  143. {
  144. int ret, size;
  145. size = RAW_PACKET_SIZE;
  146. if (av_new_packet(pkt, size) < 0)
  147. return AVERROR(EIO);
  148. pkt->pos= url_ftell(s->pb);
  149. pkt->stream_index = 0;
  150. ret = get_partial_buffer(s->pb, pkt->data, size);
  151. if (ret <= 0) {
  152. av_free_packet(pkt);
  153. return AVERROR(EIO);
  154. }
  155. pkt->size = ret;
  156. return ret;
  157. }
  158. #endif
  159. #ifdef CONFIG_RAWVIDEO_DEMUXER
  160. static int rawvideo_read_packet(AVFormatContext *s, AVPacket *pkt)
  161. {
  162. int packet_size, ret, width, height;
  163. AVStream *st = s->streams[0];
  164. width = st->codec->width;
  165. height = st->codec->height;
  166. packet_size = avpicture_get_size(st->codec->pix_fmt, width, height);
  167. if (packet_size < 0)
  168. return -1;
  169. ret= av_get_packet(s->pb, pkt, packet_size);
  170. pkt->pts=
  171. pkt->dts= pkt->pos / packet_size;
  172. pkt->stream_index = 0;
  173. if (ret != packet_size) {
  174. return AVERROR(EIO);
  175. } else {
  176. return 0;
  177. }
  178. }
  179. #endif
  180. #ifdef CONFIG_INGENIENT_DEMUXER
  181. // http://www.artificis.hu/files/texts/ingenient.txt
  182. static int ingenient_read_packet(AVFormatContext *s, AVPacket *pkt)
  183. {
  184. int ret, size, w, h, unk1, unk2;
  185. if (get_le32(s->pb) != MKTAG('M', 'J', 'P', 'G'))
  186. return AVERROR(EIO); // FIXME
  187. size = get_le32(s->pb);
  188. w = get_le16(s->pb);
  189. h = get_le16(s->pb);
  190. url_fskip(s->pb, 8); // zero + size (padded?)
  191. url_fskip(s->pb, 2);
  192. unk1 = get_le16(s->pb);
  193. unk2 = get_le16(s->pb);
  194. url_fskip(s->pb, 22); // ASCII timestamp
  195. av_log(NULL, AV_LOG_DEBUG, "Ingenient packet: size=%d, width=%d, height=%d, unk1=%d unk2=%d\n",
  196. size, w, h, unk1, unk2);
  197. if (av_new_packet(pkt, size) < 0)
  198. return AVERROR(EIO);
  199. pkt->pos = url_ftell(s->pb);
  200. pkt->stream_index = 0;
  201. ret = get_buffer(s->pb, pkt->data, size);
  202. if (ret <= 0) {
  203. av_free_packet(pkt);
  204. return AVERROR(EIO);
  205. }
  206. pkt->size = ret;
  207. return ret;
  208. }
  209. #endif
  210. #ifdef CONFIG_DEMUXERS
  211. int pcm_read_seek(AVFormatContext *s,
  212. int stream_index, int64_t timestamp, int flags)
  213. {
  214. AVStream *st;
  215. int block_align, byte_rate, ret;
  216. int64_t pos;
  217. st = s->streams[0];
  218. block_align = st->codec->block_align ? st->codec->block_align :
  219. (av_get_bits_per_sample(st->codec->codec_id) * st->codec->channels) >> 3;
  220. byte_rate = st->codec->bit_rate ? st->codec->bit_rate >> 3 :
  221. block_align * st->codec->sample_rate;
  222. if (block_align <= 0 || byte_rate <= 0)
  223. return -1;
  224. /* compute the position by aligning it to block_align */
  225. pos = av_rescale_rnd(timestamp * byte_rate,
  226. st->time_base.num,
  227. st->time_base.den * (int64_t)block_align,
  228. (flags & AVSEEK_FLAG_BACKWARD) ? AV_ROUND_DOWN : AV_ROUND_UP);
  229. pos *= block_align;
  230. /* recompute exact position */
  231. st->cur_dts = av_rescale(pos, st->time_base.den, byte_rate * (int64_t)st->time_base.num);
  232. if ((ret = url_fseek(s->pb, pos + s->data_offset, SEEK_SET)) < 0)
  233. return ret;
  234. return 0;
  235. }
  236. static int audio_read_header(AVFormatContext *s,
  237. AVFormatParameters *ap)
  238. {
  239. AVStream *st = av_new_stream(s, 0);
  240. if (!st)
  241. return AVERROR(ENOMEM);
  242. st->codec->codec_type = CODEC_TYPE_AUDIO;
  243. st->codec->codec_id = s->iformat->value;
  244. st->need_parsing = AVSTREAM_PARSE_FULL;
  245. /* the parameters will be extracted from the compressed bitstream */
  246. return 0;
  247. }
  248. /* MPEG-1/H.263 input */
  249. static int video_read_header(AVFormatContext *s,
  250. AVFormatParameters *ap)
  251. {
  252. AVStream *st;
  253. st = av_new_stream(s, 0);
  254. if (!st)
  255. return AVERROR(ENOMEM);
  256. st->codec->codec_type = CODEC_TYPE_VIDEO;
  257. st->codec->codec_id = s->iformat->value;
  258. st->need_parsing = AVSTREAM_PARSE_FULL;
  259. /* for MJPEG, specify frame rate */
  260. /* for MPEG-4 specify it, too (most MPEG-4 streams do not have the fixed_vop_rate set ...)*/
  261. if (ap->time_base.num) {
  262. av_set_pts_info(st, 64, ap->time_base.num, ap->time_base.den);
  263. } else if ( st->codec->codec_id == CODEC_ID_MJPEG ||
  264. st->codec->codec_id == CODEC_ID_MPEG4 ||
  265. st->codec->codec_id == CODEC_ID_DIRAC ||
  266. st->codec->codec_id == CODEC_ID_H264) {
  267. av_set_pts_info(st, 64, 1, 25);
  268. }
  269. return 0;
  270. }
  271. #endif
  272. #ifdef CONFIG_MPEGVIDEO_DEMUXER
  273. #define SEQ_START_CODE 0x000001b3
  274. #define GOP_START_CODE 0x000001b8
  275. #define PICTURE_START_CODE 0x00000100
  276. #define SLICE_START_CODE 0x00000101
  277. #define PACK_START_CODE 0x000001ba
  278. #define VIDEO_ID 0x000001e0
  279. #define AUDIO_ID 0x000001c0
  280. static int mpegvideo_probe(AVProbeData *p)
  281. {
  282. uint32_t code= -1;
  283. int pic=0, seq=0, slice=0, pspack=0, pes=0;
  284. int i;
  285. for(i=0; i<p->buf_size; i++){
  286. code = (code<<8) + p->buf[i];
  287. if ((code & 0xffffff00) == 0x100) {
  288. switch(code){
  289. case SEQ_START_CODE: seq++; break;
  290. case PICTURE_START_CODE: pic++; break;
  291. case SLICE_START_CODE: slice++; break;
  292. case PACK_START_CODE: pspack++; break;
  293. }
  294. if ((code & 0x1f0) == VIDEO_ID) pes++;
  295. else if((code & 0x1e0) == AUDIO_ID) pes++;
  296. }
  297. }
  298. if(seq && seq*9<=pic*10 && pic*9<=slice*10 && !pspack && !pes)
  299. return AVPROBE_SCORE_MAX/2+1; // +1 for .mpg
  300. return 0;
  301. }
  302. #endif
  303. #ifdef CONFIG_M4V_DEMUXER
  304. #define VISUAL_OBJECT_START_CODE 0x000001b5
  305. #define VOP_START_CODE 0x000001b6
  306. static int mpeg4video_probe(AVProbeData *probe_packet)
  307. {
  308. uint32_t temp_buffer= -1;
  309. int VO=0, VOL=0, VOP = 0, VISO = 0, res=0;
  310. int i;
  311. for(i=0; i<probe_packet->buf_size; i++){
  312. temp_buffer = (temp_buffer<<8) + probe_packet->buf[i];
  313. if ((temp_buffer & 0xffffff00) != 0x100)
  314. continue;
  315. if (temp_buffer == VOP_START_CODE) VOP++;
  316. else if (temp_buffer == VISUAL_OBJECT_START_CODE) VISO++;
  317. else if (temp_buffer < 0x120) VO++;
  318. else if (temp_buffer < 0x130) VOL++;
  319. else if ( !(0x1AF < temp_buffer && temp_buffer < 0x1B7)
  320. && !(0x1B9 < temp_buffer && temp_buffer < 0x1C4)) res++;
  321. }
  322. if ( VOP >= VISO && VOP >= VOL && VO >= VOL && VOL > 0 && res==0)
  323. return AVPROBE_SCORE_MAX/2;
  324. return 0;
  325. }
  326. #endif
  327. #ifdef CONFIG_H264_DEMUXER
  328. static int h264_probe(AVProbeData *p)
  329. {
  330. uint32_t code= -1;
  331. int sps=0, pps=0, idr=0, res=0, sli=0;
  332. int i;
  333. for(i=0; i<p->buf_size; i++){
  334. code = (code<<8) + p->buf[i];
  335. if ((code & 0xffffff00) == 0x100) {
  336. int ref_idc= (code>>5)&3;
  337. int type = code & 0x1F;
  338. static const int8_t ref_zero[32]={
  339. 2, 0, 0, 0, 0,-1, 1,-1,
  340. -1, 1, 1, 1, 1,-1, 2, 2,
  341. 2, 2, 2, 0, 2, 2, 2, 2,
  342. 2, 2, 2, 2, 2, 2, 2, 2
  343. };
  344. if(code & 0x80) //forbidden bit
  345. return 0;
  346. if(ref_zero[type] == 1 && ref_idc)
  347. return 0;
  348. if(ref_zero[type] ==-1 && !ref_idc)
  349. return 0;
  350. if(ref_zero[type] == 2)
  351. res++;
  352. switch(type){
  353. case 1: sli++; break;
  354. case 5: idr++; break;
  355. case 7:
  356. if(p->buf[i+2]&0x0F)
  357. return 0;
  358. sps++;
  359. break;
  360. case 8: pps++; break;
  361. }
  362. }
  363. }
  364. if(sps && pps && (idr||sli>3) && res<(sps+pps+idr))
  365. return AVPROBE_SCORE_MAX/2+1; // +1 for .mpg
  366. return 0;
  367. }
  368. #endif
  369. #ifdef CONFIG_H263_DEMUXER
  370. static int h263_probe(AVProbeData *p)
  371. {
  372. int code;
  373. const uint8_t *d;
  374. d = p->buf;
  375. code = (d[0] << 14) | (d[1] << 6) | (d[2] >> 2);
  376. if (code == 0x20) {
  377. return 50;
  378. }
  379. return 0;
  380. }
  381. #endif
  382. #ifdef CONFIG_H261_DEMUXER
  383. static int h261_probe(AVProbeData *p)
  384. {
  385. int code;
  386. const uint8_t *d;
  387. d = p->buf;
  388. code = (d[0] << 12) | (d[1] << 4) | (d[2] >> 4);
  389. if (code == 0x10) {
  390. return 50;
  391. }
  392. return 0;
  393. }
  394. #endif
  395. #ifdef CONFIG_DTS_DEMUXER
  396. #define DCA_MARKER_14B_BE 0x1FFFE800
  397. #define DCA_MARKER_14B_LE 0xFF1F00E8
  398. #define DCA_MARKER_RAW_BE 0x7FFE8001
  399. #define DCA_MARKER_RAW_LE 0xFE7F0180
  400. static int dts_probe(AVProbeData *p)
  401. {
  402. const uint8_t *buf, *bufp;
  403. uint32_t state = -1;
  404. buf = p->buf;
  405. for(; buf < (p->buf+p->buf_size)-2; buf+=2) {
  406. bufp = buf;
  407. state = (state << 16) | bytestream_get_be16(&bufp);
  408. /* regular bitstream */
  409. if (state == DCA_MARKER_RAW_BE || state == DCA_MARKER_RAW_LE)
  410. return AVPROBE_SCORE_MAX/2+1;
  411. /* 14 bits big-endian bitstream */
  412. if (state == DCA_MARKER_14B_BE)
  413. if ((bytestream_get_be16(&bufp) & 0xFFF0) == 0x07F0)
  414. return AVPROBE_SCORE_MAX/2+1;
  415. /* 14 bits little-endian bitstream */
  416. if (state == DCA_MARKER_14B_LE)
  417. if ((bytestream_get_be16(&bufp) & 0xF0FF) == 0xF007)
  418. return AVPROBE_SCORE_MAX/2+1;
  419. }
  420. return 0;
  421. }
  422. #endif
  423. #ifdef CONFIG_DIRAC_DEMUXER
  424. static int dirac_probe(AVProbeData *p)
  425. {
  426. if (AV_RL32(p->buf) == MKTAG('B', 'B', 'C', 'D'))
  427. return AVPROBE_SCORE_MAX;
  428. else
  429. return 0;
  430. }
  431. #endif
  432. #if defined(CONFIG_AC3_DEMUXER) || defined(CONFIG_EAC3_DEMUXER)
  433. static int ac3_eac3_probe(AVProbeData *p, enum CodecID expected_codec_id)
  434. {
  435. int max_frames, first_frames = 0, frames;
  436. uint8_t *buf, *buf2, *end;
  437. AC3HeaderInfo hdr;
  438. GetBitContext gbc;
  439. enum CodecID codec_id = CODEC_ID_AC3;
  440. max_frames = 0;
  441. buf = p->buf;
  442. end = buf + p->buf_size;
  443. for(; buf < end; buf++) {
  444. buf2 = buf;
  445. for(frames = 0; buf2 < end; frames++) {
  446. init_get_bits(&gbc, buf2, 54);
  447. if(ff_ac3_parse_header(&gbc, &hdr) < 0)
  448. break;
  449. if(buf2 + hdr.frame_size > end ||
  450. av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, buf2 + 2, hdr.frame_size - 2))
  451. break;
  452. if (hdr.bitstream_id > 10)
  453. codec_id = CODEC_ID_EAC3;
  454. buf2 += hdr.frame_size;
  455. }
  456. max_frames = FFMAX(max_frames, frames);
  457. if(buf == p->buf)
  458. first_frames = frames;
  459. }
  460. if(codec_id != expected_codec_id) return 0;
  461. if (first_frames>=3) return AVPROBE_SCORE_MAX * 3 / 4;
  462. else if(max_frames>=3) return AVPROBE_SCORE_MAX / 2;
  463. else if(max_frames>=1) return 1;
  464. else return 0;
  465. }
  466. #endif
  467. #ifdef CONFIG_AC3_DEMUXER
  468. static int ac3_probe(AVProbeData *p)
  469. {
  470. return ac3_eac3_probe(p, CODEC_ID_AC3);
  471. }
  472. #endif
  473. #ifdef CONFIG_EAC3_DEMUXER
  474. static int eac3_probe(AVProbeData *p)
  475. {
  476. return ac3_eac3_probe(p, CODEC_ID_EAC3);
  477. }
  478. #endif
  479. #ifdef CONFIG_FLAC_DEMUXER
  480. static int flac_probe(AVProbeData *p)
  481. {
  482. if(memcmp(p->buf, "fLaC", 4)) return 0;
  483. else return AVPROBE_SCORE_MAX / 2;
  484. }
  485. #endif
  486. /* Note: Do not forget to add new entries to the Makefile as well. */
  487. #ifdef CONFIG_AAC_DEMUXER
  488. AVInputFormat aac_demuxer = {
  489. "aac",
  490. NULL_IF_CONFIG_SMALL("ADTS AAC"),
  491. 0,
  492. NULL,
  493. audio_read_header,
  494. raw_read_partial_packet,
  495. .flags= AVFMT_GENERIC_INDEX,
  496. .extensions = "aac",
  497. .value = CODEC_ID_AAC,
  498. };
  499. #endif
  500. #ifdef CONFIG_AC3_DEMUXER
  501. AVInputFormat ac3_demuxer = {
  502. "ac3",
  503. NULL_IF_CONFIG_SMALL("raw AC-3"),
  504. 0,
  505. ac3_probe,
  506. audio_read_header,
  507. raw_read_partial_packet,
  508. .flags= AVFMT_GENERIC_INDEX,
  509. .extensions = "ac3",
  510. .value = CODEC_ID_AC3,
  511. };
  512. #endif
  513. #ifdef CONFIG_AC3_MUXER
  514. AVOutputFormat ac3_muxer = {
  515. "ac3",
  516. NULL_IF_CONFIG_SMALL("raw AC-3"),
  517. "audio/x-ac3",
  518. "ac3",
  519. 0,
  520. CODEC_ID_AC3,
  521. CODEC_ID_NONE,
  522. NULL,
  523. raw_write_packet,
  524. .flags= AVFMT_NOTIMESTAMPS,
  525. };
  526. #endif
  527. #ifdef CONFIG_DIRAC_DEMUXER
  528. AVInputFormat dirac_demuxer = {
  529. "dirac",
  530. NULL_IF_CONFIG_SMALL("raw Dirac"),
  531. 0,
  532. dirac_probe,
  533. video_read_header,
  534. raw_read_partial_packet,
  535. .flags= AVFMT_GENERIC_INDEX,
  536. .value = CODEC_ID_DIRAC,
  537. };
  538. #endif
  539. #ifdef CONFIG_DIRAC_MUXER
  540. AVOutputFormat dirac_muxer = {
  541. "dirac",
  542. NULL_IF_CONFIG_SMALL("raw Dirac"),
  543. NULL,
  544. "drc",
  545. 0,
  546. CODEC_ID_NONE,
  547. CODEC_ID_DIRAC,
  548. NULL,
  549. raw_write_packet,
  550. .flags= AVFMT_NOTIMESTAMPS,
  551. };
  552. #endif
  553. #ifdef CONFIG_DTS_DEMUXER
  554. AVInputFormat dts_demuxer = {
  555. "dts",
  556. NULL_IF_CONFIG_SMALL("raw DTS"),
  557. 0,
  558. dts_probe,
  559. audio_read_header,
  560. raw_read_partial_packet,
  561. .flags= AVFMT_GENERIC_INDEX,
  562. .extensions = "dts",
  563. .value = CODEC_ID_DTS,
  564. };
  565. #endif
  566. #ifdef CONFIG_DTS_MUXER
  567. AVOutputFormat dts_muxer = {
  568. "dts",
  569. NULL_IF_CONFIG_SMALL("raw DTS"),
  570. "audio/x-dca",
  571. "dts",
  572. 0,
  573. CODEC_ID_DTS,
  574. CODEC_ID_NONE,
  575. NULL,
  576. raw_write_packet,
  577. .flags= AVFMT_NOTIMESTAMPS,
  578. };
  579. #endif
  580. #ifdef CONFIG_EAC3_DEMUXER
  581. AVInputFormat eac3_demuxer = {
  582. "eac3",
  583. NULL_IF_CONFIG_SMALL("raw E-AC-3"),
  584. 0,
  585. eac3_probe,
  586. audio_read_header,
  587. raw_read_partial_packet,
  588. .flags= AVFMT_GENERIC_INDEX,
  589. .extensions = "eac3",
  590. .value = CODEC_ID_EAC3,
  591. };
  592. #endif
  593. #ifdef CONFIG_EAC3_MUXER
  594. AVOutputFormat eac3_muxer = {
  595. "eac3",
  596. NULL_IF_CONFIG_SMALL("raw E-AC-3"),
  597. "audio/x-eac3",
  598. "eac3",
  599. 0,
  600. CODEC_ID_EAC3,
  601. CODEC_ID_NONE,
  602. NULL,
  603. raw_write_packet,
  604. .flags= AVFMT_NOTIMESTAMPS,
  605. };
  606. #endif
  607. #ifdef CONFIG_FLAC_DEMUXER
  608. AVInputFormat flac_demuxer = {
  609. "flac",
  610. NULL_IF_CONFIG_SMALL("raw FLAC"),
  611. 0,
  612. flac_probe,
  613. audio_read_header,
  614. raw_read_partial_packet,
  615. .flags= AVFMT_GENERIC_INDEX,
  616. .extensions = "flac",
  617. .value = CODEC_ID_FLAC,
  618. };
  619. #endif
  620. #ifdef CONFIG_FLAC_MUXER
  621. AVOutputFormat flac_muxer = {
  622. "flac",
  623. NULL_IF_CONFIG_SMALL("raw FLAC"),
  624. "audio/x-flac",
  625. "flac",
  626. 0,
  627. CODEC_ID_FLAC,
  628. CODEC_ID_NONE,
  629. flac_write_header,
  630. raw_write_packet,
  631. flac_write_trailer,
  632. .flags= AVFMT_NOTIMESTAMPS,
  633. };
  634. #endif
  635. #ifdef CONFIG_GSM_DEMUXER
  636. AVInputFormat gsm_demuxer = {
  637. "gsm",
  638. NULL_IF_CONFIG_SMALL("GSM"),
  639. 0,
  640. NULL,
  641. audio_read_header,
  642. raw_read_partial_packet,
  643. .flags= AVFMT_GENERIC_INDEX,
  644. .extensions = "gsm",
  645. .value = CODEC_ID_GSM,
  646. };
  647. #endif
  648. #ifdef CONFIG_H261_DEMUXER
  649. AVInputFormat h261_demuxer = {
  650. "h261",
  651. NULL_IF_CONFIG_SMALL("raw H.261"),
  652. 0,
  653. h261_probe,
  654. video_read_header,
  655. raw_read_partial_packet,
  656. .flags= AVFMT_GENERIC_INDEX,
  657. .extensions = "h261",
  658. .value = CODEC_ID_H261,
  659. };
  660. #endif
  661. #ifdef CONFIG_H261_MUXER
  662. AVOutputFormat h261_muxer = {
  663. "h261",
  664. NULL_IF_CONFIG_SMALL("raw H.261"),
  665. "video/x-h261",
  666. "h261",
  667. 0,
  668. CODEC_ID_NONE,
  669. CODEC_ID_H261,
  670. NULL,
  671. raw_write_packet,
  672. .flags= AVFMT_NOTIMESTAMPS,
  673. };
  674. #endif
  675. #ifdef CONFIG_H263_DEMUXER
  676. AVInputFormat h263_demuxer = {
  677. "h263",
  678. NULL_IF_CONFIG_SMALL("raw H.263"),
  679. 0,
  680. h263_probe,
  681. video_read_header,
  682. raw_read_partial_packet,
  683. .flags= AVFMT_GENERIC_INDEX,
  684. // .extensions = "h263", //FIXME remove after writing mpeg4_probe
  685. .value = CODEC_ID_H263,
  686. };
  687. #endif
  688. #ifdef CONFIG_H263_MUXER
  689. AVOutputFormat h263_muxer = {
  690. "h263",
  691. NULL_IF_CONFIG_SMALL("raw H.263"),
  692. "video/x-h263",
  693. "h263",
  694. 0,
  695. CODEC_ID_NONE,
  696. CODEC_ID_H263,
  697. NULL,
  698. raw_write_packet,
  699. .flags= AVFMT_NOTIMESTAMPS,
  700. };
  701. #endif
  702. #ifdef CONFIG_H264_DEMUXER
  703. AVInputFormat h264_demuxer = {
  704. "h264",
  705. NULL_IF_CONFIG_SMALL("raw H.264 video format"),
  706. 0,
  707. h264_probe,
  708. video_read_header,
  709. raw_read_partial_packet,
  710. .flags= AVFMT_GENERIC_INDEX,
  711. .extensions = "h26l,h264,264", //FIXME remove after writing mpeg4_probe
  712. .value = CODEC_ID_H264,
  713. };
  714. #endif
  715. #ifdef CONFIG_H264_MUXER
  716. AVOutputFormat h264_muxer = {
  717. "h264",
  718. NULL_IF_CONFIG_SMALL("raw H.264 video format"),
  719. NULL,
  720. "h264",
  721. 0,
  722. CODEC_ID_NONE,
  723. CODEC_ID_H264,
  724. NULL,
  725. raw_write_packet,
  726. .flags= AVFMT_NOTIMESTAMPS,
  727. };
  728. #endif
  729. #ifdef CONFIG_INGENIENT_DEMUXER
  730. AVInputFormat ingenient_demuxer = {
  731. "ingenient",
  732. NULL_IF_CONFIG_SMALL("Ingenient MJPEG"),
  733. 0,
  734. NULL,
  735. video_read_header,
  736. ingenient_read_packet,
  737. .flags= AVFMT_GENERIC_INDEX,
  738. .extensions = "cgi", // FIXME
  739. .value = CODEC_ID_MJPEG,
  740. };
  741. #endif
  742. #ifdef CONFIG_M4V_DEMUXER
  743. AVInputFormat m4v_demuxer = {
  744. "m4v",
  745. NULL_IF_CONFIG_SMALL("raw MPEG-4 video format"),
  746. 0,
  747. mpeg4video_probe, /** probing for MPEG-4 data */
  748. video_read_header,
  749. raw_read_partial_packet,
  750. .flags= AVFMT_GENERIC_INDEX,
  751. .extensions = "m4v", //FIXME remove after writing mpeg4_probe
  752. .value = CODEC_ID_MPEG4,
  753. };
  754. #endif
  755. #ifdef CONFIG_M4V_MUXER
  756. AVOutputFormat m4v_muxer = {
  757. "m4v",
  758. NULL_IF_CONFIG_SMALL("raw MPEG-4 video format"),
  759. NULL,
  760. "m4v",
  761. 0,
  762. CODEC_ID_NONE,
  763. CODEC_ID_MPEG4,
  764. NULL,
  765. raw_write_packet,
  766. .flags= AVFMT_NOTIMESTAMPS,
  767. };
  768. #endif
  769. #ifdef CONFIG_MJPEG_DEMUXER
  770. AVInputFormat mjpeg_demuxer = {
  771. "mjpeg",
  772. NULL_IF_CONFIG_SMALL("MJPEG video"),
  773. 0,
  774. NULL,
  775. video_read_header,
  776. raw_read_partial_packet,
  777. .flags= AVFMT_GENERIC_INDEX,
  778. .extensions = "mjpg,mjpeg",
  779. .value = CODEC_ID_MJPEG,
  780. };
  781. #endif
  782. #ifdef CONFIG_MJPEG_MUXER
  783. AVOutputFormat mjpeg_muxer = {
  784. "mjpeg",
  785. NULL_IF_CONFIG_SMALL("MJPEG video"),
  786. "video/x-mjpeg",
  787. "mjpg,mjpeg",
  788. 0,
  789. CODEC_ID_NONE,
  790. CODEC_ID_MJPEG,
  791. NULL,
  792. raw_write_packet,
  793. .flags= AVFMT_NOTIMESTAMPS,
  794. };
  795. #endif
  796. #ifdef CONFIG_MLP_DEMUXER
  797. AVInputFormat mlp_demuxer = {
  798. "mlp",
  799. NULL_IF_CONFIG_SMALL("raw MLP"),
  800. 0,
  801. NULL,
  802. audio_read_header,
  803. raw_read_partial_packet,
  804. .flags= AVFMT_GENERIC_INDEX,
  805. .extensions = "mlp",
  806. .value = CODEC_ID_MLP,
  807. };
  808. #endif
  809. #ifdef CONFIG_MPEG1VIDEO_MUXER
  810. AVOutputFormat mpeg1video_muxer = {
  811. "mpeg1video",
  812. NULL_IF_CONFIG_SMALL("MPEG video"),
  813. "video/x-mpeg",
  814. "mpg,mpeg,m1v",
  815. 0,
  816. CODEC_ID_NONE,
  817. CODEC_ID_MPEG1VIDEO,
  818. NULL,
  819. raw_write_packet,
  820. .flags= AVFMT_NOTIMESTAMPS,
  821. };
  822. #endif
  823. #ifdef CONFIG_MPEG2VIDEO_MUXER
  824. AVOutputFormat mpeg2video_muxer = {
  825. "mpeg2video",
  826. NULL_IF_CONFIG_SMALL("MPEG-2 video"),
  827. NULL,
  828. "m2v",
  829. 0,
  830. CODEC_ID_NONE,
  831. CODEC_ID_MPEG2VIDEO,
  832. NULL,
  833. raw_write_packet,
  834. .flags= AVFMT_NOTIMESTAMPS,
  835. };
  836. #endif
  837. #ifdef CONFIG_MPEGVIDEO_DEMUXER
  838. AVInputFormat mpegvideo_demuxer = {
  839. "mpegvideo",
  840. NULL_IF_CONFIG_SMALL("MPEG video"),
  841. 0,
  842. mpegvideo_probe,
  843. video_read_header,
  844. raw_read_partial_packet,
  845. .flags= AVFMT_GENERIC_INDEX,
  846. .value = CODEC_ID_MPEG1VIDEO,
  847. };
  848. #endif
  849. #ifdef CONFIG_NULL_MUXER
  850. AVOutputFormat null_muxer = {
  851. "null",
  852. NULL_IF_CONFIG_SMALL("null video format"),
  853. NULL,
  854. NULL,
  855. 0,
  856. #ifdef WORDS_BIGENDIAN
  857. CODEC_ID_PCM_S16BE,
  858. #else
  859. CODEC_ID_PCM_S16LE,
  860. #endif
  861. CODEC_ID_RAWVIDEO,
  862. NULL,
  863. null_write_packet,
  864. .flags = AVFMT_NOFILE | AVFMT_RAWPICTURE | AVFMT_NOTIMESTAMPS,
  865. };
  866. #endif
  867. #ifdef CONFIG_RAWVIDEO_DEMUXER
  868. AVInputFormat rawvideo_demuxer = {
  869. "rawvideo",
  870. NULL_IF_CONFIG_SMALL("raw video format"),
  871. 0,
  872. NULL,
  873. raw_read_header,
  874. rawvideo_read_packet,
  875. .flags= AVFMT_GENERIC_INDEX,
  876. .extensions = "yuv,cif,qcif,rgb",
  877. .value = CODEC_ID_RAWVIDEO,
  878. };
  879. #endif
  880. #ifdef CONFIG_RAWVIDEO_MUXER
  881. AVOutputFormat rawvideo_muxer = {
  882. "rawvideo",
  883. NULL_IF_CONFIG_SMALL("raw video format"),
  884. NULL,
  885. "yuv,rgb",
  886. 0,
  887. CODEC_ID_NONE,
  888. CODEC_ID_RAWVIDEO,
  889. NULL,
  890. raw_write_packet,
  891. .flags= AVFMT_NOTIMESTAMPS,
  892. };
  893. #endif
  894. #ifdef CONFIG_ROQ_MUXER
  895. AVOutputFormat roq_muxer =
  896. {
  897. "RoQ",
  898. NULL_IF_CONFIG_SMALL("id RoQ format"),
  899. NULL,
  900. "roq",
  901. 0,
  902. CODEC_ID_ROQ_DPCM,
  903. CODEC_ID_ROQ,
  904. roq_write_header,
  905. raw_write_packet,
  906. };
  907. #endif
  908. #ifdef CONFIG_SHORTEN_DEMUXER
  909. AVInputFormat shorten_demuxer = {
  910. "shn",
  911. NULL_IF_CONFIG_SMALL("raw Shorten"),
  912. 0,
  913. NULL,
  914. audio_read_header,
  915. raw_read_partial_packet,
  916. .flags= AVFMT_GENERIC_INDEX,
  917. .extensions = "shn",
  918. .value = CODEC_ID_SHORTEN,
  919. };
  920. #endif
  921. #ifdef CONFIG_VC1_DEMUXER
  922. AVInputFormat vc1_demuxer = {
  923. "vc1",
  924. NULL_IF_CONFIG_SMALL("raw VC-1"),
  925. 0,
  926. NULL /* vc1_probe */,
  927. video_read_header,
  928. raw_read_partial_packet,
  929. .extensions = "vc1",
  930. .value = CODEC_ID_VC1,
  931. };
  932. #endif
  933. /* PCM formats */
  934. #define PCMINPUTDEF(name, long_name, ext, codec) \
  935. AVInputFormat pcm_ ## name ## _demuxer = {\
  936. #name,\
  937. NULL_IF_CONFIG_SMALL(long_name),\
  938. 0,\
  939. NULL,\
  940. raw_read_header,\
  941. raw_read_packet,\
  942. NULL,\
  943. pcm_read_seek,\
  944. .flags= AVFMT_GENERIC_INDEX,\
  945. .extensions = ext,\
  946. .value = codec,\
  947. };
  948. #define PCMOUTPUTDEF(name, long_name, ext, codec) \
  949. AVOutputFormat pcm_ ## name ## _muxer = {\
  950. #name,\
  951. NULL_IF_CONFIG_SMALL(long_name),\
  952. NULL,\
  953. ext,\
  954. 0,\
  955. codec,\
  956. CODEC_ID_NONE,\
  957. NULL,\
  958. raw_write_packet,\
  959. .flags= AVFMT_NOTIMESTAMPS,\
  960. };
  961. #if !defined(CONFIG_MUXERS) && defined(CONFIG_DEMUXERS)
  962. #define PCMDEF(name, long_name, ext, codec) \
  963. PCMINPUTDEF(name, long_name, ext, codec)
  964. #elif defined(CONFIG_MUXERS) && !defined(CONFIG_DEMUXERS)
  965. #define PCMDEF(name, long_name, ext, codec) \
  966. PCMOUTPUTDEF(name, long_name, ext, codec)
  967. #elif defined(CONFIG_MUXERS) && defined(CONFIG_DEMUXERS)
  968. #define PCMDEF(name, long_name, ext, codec) \
  969. PCMINPUTDEF(name, long_name, ext, codec)\
  970. PCMOUTPUTDEF(name, long_name, ext, codec)
  971. #else
  972. #define PCMDEF(name, long_name, ext, codec)
  973. #endif
  974. #ifdef WORDS_BIGENDIAN
  975. #define BE_DEF(s) s
  976. #define LE_DEF(s) NULL
  977. #else
  978. #define BE_DEF(s) NULL
  979. #define LE_DEF(s) s
  980. #endif
  981. PCMDEF(f64be, "PCM 64 bit floating-point big-endian format",
  982. NULL, CODEC_ID_PCM_F64BE)
  983. PCMDEF(f64le, "PCM 64 bit floating-point little-endian format",
  984. NULL, CODEC_ID_PCM_F64LE)
  985. PCMDEF(f32be, "PCM 32 bit floating-point big-endian format",
  986. NULL, CODEC_ID_PCM_F32BE)
  987. PCMDEF(f32le, "PCM 32 bit floating-point little-endian format",
  988. NULL, CODEC_ID_PCM_F32LE)
  989. PCMDEF(s32be, "PCM signed 32 bit big-endian format",
  990. NULL, CODEC_ID_PCM_S32BE)
  991. PCMDEF(s32le, "PCM signed 32 bit little-endian format",
  992. NULL, CODEC_ID_PCM_S32LE)
  993. PCMDEF(s24be, "PCM signed 24 bit big-endian format",
  994. NULL, CODEC_ID_PCM_S24BE)
  995. PCMDEF(s24le, "PCM signed 24 bit little-endian format",
  996. NULL, CODEC_ID_PCM_S24LE)
  997. PCMDEF(s16be, "PCM signed 16 bit big-endian format",
  998. BE_DEF("sw"), CODEC_ID_PCM_S16BE)
  999. PCMDEF(s16le, "PCM signed 16 bit little-endian format",
  1000. LE_DEF("sw"), CODEC_ID_PCM_S16LE)
  1001. PCMDEF(s8, "PCM signed 8 bit format",
  1002. "sb", CODEC_ID_PCM_S8)
  1003. PCMDEF(u32be, "PCM unsigned 32 bit big-endian format",
  1004. NULL, CODEC_ID_PCM_U32BE)
  1005. PCMDEF(u32le, "PCM unsigned 32 bit little-endian format",
  1006. NULL, CODEC_ID_PCM_U32LE)
  1007. PCMDEF(u24be, "PCM unsigned 24 bit big-endian format",
  1008. NULL, CODEC_ID_PCM_U24BE)
  1009. PCMDEF(u24le, "PCM unsigned 24 bit little-endian format",
  1010. NULL, CODEC_ID_PCM_U24LE)
  1011. PCMDEF(u16be, "PCM unsigned 16 bit big-endian format",
  1012. BE_DEF("uw"), CODEC_ID_PCM_U16BE)
  1013. PCMDEF(u16le, "PCM unsigned 16 bit little-endian format",
  1014. LE_DEF("uw"), CODEC_ID_PCM_U16LE)
  1015. PCMDEF(u8, "PCM unsigned 8 bit format",
  1016. "ub", CODEC_ID_PCM_U8)
  1017. PCMDEF(alaw, "PCM A-law format",
  1018. "al", CODEC_ID_PCM_ALAW)
  1019. PCMDEF(mulaw, "PCM mu-law format",
  1020. "ul", CODEC_ID_PCM_MULAW)