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.

863 lines
20KB

  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/get_bits.h"
  25. #include "libavcodec/bytestream.h"
  26. #include "avformat.h"
  27. #include "raw.h"
  28. #include "id3v2.h"
  29. #include "id3v1.h"
  30. /* simple formats */
  31. #if CONFIG_NULL_MUXER
  32. static int null_write_packet(struct AVFormatContext *s, AVPacket *pkt)
  33. {
  34. return 0;
  35. }
  36. #endif
  37. #if CONFIG_MUXERS
  38. int ff_raw_write_packet(AVFormatContext *s, AVPacket *pkt)
  39. {
  40. put_buffer(s->pb, pkt->data, pkt->size);
  41. put_flush_packet(s->pb);
  42. return 0;
  43. }
  44. #endif
  45. #if CONFIG_DEMUXERS
  46. /* raw input */
  47. static int raw_read_header(AVFormatContext *s, AVFormatParameters *ap)
  48. {
  49. AVStream *st;
  50. enum CodecID id;
  51. st = av_new_stream(s, 0);
  52. if (!st)
  53. return AVERROR(ENOMEM);
  54. id = s->iformat->value;
  55. if (id == CODEC_ID_RAWVIDEO) {
  56. st->codec->codec_type = AVMEDIA_TYPE_VIDEO;
  57. } else {
  58. st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
  59. }
  60. st->codec->codec_id = id;
  61. switch(st->codec->codec_type) {
  62. case AVMEDIA_TYPE_AUDIO:
  63. st->codec->sample_rate = ap->sample_rate;
  64. if(ap->channels) st->codec->channels = ap->channels;
  65. else st->codec->channels = 1;
  66. st->codec->bits_per_coded_sample = av_get_bits_per_sample(st->codec->codec_id);
  67. assert(st->codec->bits_per_coded_sample > 0);
  68. st->codec->block_align = st->codec->bits_per_coded_sample*st->codec->channels/8;
  69. av_set_pts_info(st, 64, 1, st->codec->sample_rate);
  70. break;
  71. case AVMEDIA_TYPE_VIDEO:
  72. if(ap->time_base.num)
  73. av_set_pts_info(st, 64, ap->time_base.num, ap->time_base.den);
  74. else
  75. av_set_pts_info(st, 64, 1, 25);
  76. st->codec->width = ap->width;
  77. st->codec->height = ap->height;
  78. st->codec->pix_fmt = ap->pix_fmt;
  79. if(st->codec->pix_fmt == PIX_FMT_NONE)
  80. st->codec->pix_fmt= PIX_FMT_YUV420P;
  81. break;
  82. default:
  83. return -1;
  84. }
  85. return 0;
  86. }
  87. #define RAW_PACKET_SIZE 1024
  88. #define RAW_SAMPLES 1024
  89. static int raw_read_packet(AVFormatContext *s, AVPacket *pkt)
  90. {
  91. int ret, size, bps;
  92. // AVStream *st = s->streams[0];
  93. size= RAW_SAMPLES*s->streams[0]->codec->block_align;
  94. ret= av_get_packet(s->pb, pkt, size);
  95. pkt->stream_index = 0;
  96. if (ret < 0)
  97. return ret;
  98. bps= av_get_bits_per_sample(s->streams[0]->codec->codec_id);
  99. assert(bps); // if false there IS a bug elsewhere (NOT in this function)
  100. pkt->dts=
  101. pkt->pts= pkt->pos*8 / (bps * s->streams[0]->codec->channels);
  102. return ret;
  103. }
  104. int ff_raw_read_partial_packet(AVFormatContext *s, AVPacket *pkt)
  105. {
  106. int ret, size;
  107. size = RAW_PACKET_SIZE;
  108. if (av_new_packet(pkt, size) < 0)
  109. return AVERROR(ENOMEM);
  110. pkt->pos= url_ftell(s->pb);
  111. pkt->stream_index = 0;
  112. ret = get_partial_buffer(s->pb, pkt->data, size);
  113. if (ret < 0) {
  114. av_free_packet(pkt);
  115. return ret;
  116. }
  117. pkt->size = ret;
  118. return ret;
  119. }
  120. #endif
  121. #if CONFIG_RAWVIDEO_DEMUXER
  122. static int rawvideo_read_packet(AVFormatContext *s, AVPacket *pkt)
  123. {
  124. int packet_size, ret, width, height;
  125. AVStream *st = s->streams[0];
  126. width = st->codec->width;
  127. height = st->codec->height;
  128. packet_size = avpicture_get_size(st->codec->pix_fmt, width, height);
  129. if (packet_size < 0)
  130. return -1;
  131. ret= av_get_packet(s->pb, pkt, packet_size);
  132. pkt->pts=
  133. pkt->dts= pkt->pos / packet_size;
  134. pkt->stream_index = 0;
  135. if (ret < 0)
  136. return ret;
  137. return 0;
  138. }
  139. #endif
  140. #if CONFIG_DEMUXERS
  141. int pcm_read_seek(AVFormatContext *s,
  142. int stream_index, int64_t timestamp, int flags)
  143. {
  144. AVStream *st;
  145. int block_align, byte_rate;
  146. int64_t pos, ret;
  147. st = s->streams[0];
  148. block_align = st->codec->block_align ? st->codec->block_align :
  149. (av_get_bits_per_sample(st->codec->codec_id) * st->codec->channels) >> 3;
  150. byte_rate = st->codec->bit_rate ? st->codec->bit_rate >> 3 :
  151. block_align * st->codec->sample_rate;
  152. if (block_align <= 0 || byte_rate <= 0)
  153. return -1;
  154. if (timestamp < 0) timestamp = 0;
  155. /* compute the position by aligning it to block_align */
  156. pos = av_rescale_rnd(timestamp * byte_rate,
  157. st->time_base.num,
  158. st->time_base.den * (int64_t)block_align,
  159. (flags & AVSEEK_FLAG_BACKWARD) ? AV_ROUND_DOWN : AV_ROUND_UP);
  160. pos *= block_align;
  161. /* recompute exact position */
  162. st->cur_dts = av_rescale(pos, st->time_base.den, byte_rate * (int64_t)st->time_base.num);
  163. if ((ret = url_fseek(s->pb, pos + s->data_offset, SEEK_SET)) < 0)
  164. return ret;
  165. return 0;
  166. }
  167. int ff_raw_audio_read_header(AVFormatContext *s,
  168. AVFormatParameters *ap)
  169. {
  170. AVStream *st = av_new_stream(s, 0);
  171. if (!st)
  172. return AVERROR(ENOMEM);
  173. st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
  174. st->codec->codec_id = s->iformat->value;
  175. st->need_parsing = AVSTREAM_PARSE_FULL;
  176. /* the parameters will be extracted from the compressed bitstream */
  177. return 0;
  178. }
  179. /* MPEG-1/H.263 input */
  180. int ff_raw_video_read_header(AVFormatContext *s,
  181. AVFormatParameters *ap)
  182. {
  183. AVStream *st;
  184. st = av_new_stream(s, 0);
  185. if (!st)
  186. return AVERROR(ENOMEM);
  187. st->codec->codec_type = AVMEDIA_TYPE_VIDEO;
  188. st->codec->codec_id = s->iformat->value;
  189. st->need_parsing = AVSTREAM_PARSE_FULL;
  190. /* for MJPEG, specify frame rate */
  191. /* for MPEG-4 specify it, too (most MPEG-4 streams do not have the fixed_vop_rate set ...)*/
  192. if (ap->time_base.num) {
  193. st->codec->time_base= ap->time_base;
  194. } else if ( st->codec->codec_id == CODEC_ID_MJPEG ||
  195. st->codec->codec_id == CODEC_ID_MPEG4 ||
  196. st->codec->codec_id == CODEC_ID_DIRAC ||
  197. st->codec->codec_id == CODEC_ID_DNXHD ||
  198. st->codec->codec_id == CODEC_ID_VC1 ||
  199. st->codec->codec_id == CODEC_ID_H264) {
  200. st->codec->time_base= (AVRational){1,25};
  201. }
  202. av_set_pts_info(st, 64, 1, 1200000);
  203. return 0;
  204. }
  205. #endif
  206. #if CONFIG_DIRAC_DEMUXER
  207. static int dirac_probe(AVProbeData *p)
  208. {
  209. if (AV_RL32(p->buf) == MKTAG('B', 'B', 'C', 'D'))
  210. return AVPROBE_SCORE_MAX;
  211. else
  212. return 0;
  213. }
  214. #endif
  215. #if CONFIG_DNXHD_DEMUXER
  216. static int dnxhd_probe(AVProbeData *p)
  217. {
  218. static const uint8_t header[] = {0x00,0x00,0x02,0x80,0x01};
  219. int w, h, compression_id;
  220. if (p->buf_size < 0x2c)
  221. return 0;
  222. if (memcmp(p->buf, header, 5))
  223. return 0;
  224. h = AV_RB16(p->buf + 0x18);
  225. w = AV_RB16(p->buf + 0x1a);
  226. if (!w || !h)
  227. return 0;
  228. compression_id = AV_RB32(p->buf + 0x28);
  229. if (compression_id < 1237 || compression_id > 1253)
  230. return 0;
  231. return AVPROBE_SCORE_MAX;
  232. }
  233. #endif
  234. #if CONFIG_AC3_DEMUXER || CONFIG_EAC3_DEMUXER
  235. static int ac3_eac3_probe(AVProbeData *p, enum CodecID expected_codec_id)
  236. {
  237. int max_frames, first_frames = 0, frames;
  238. uint8_t *buf, *buf2, *end;
  239. AC3HeaderInfo hdr;
  240. GetBitContext gbc;
  241. enum CodecID codec_id = CODEC_ID_AC3;
  242. max_frames = 0;
  243. buf = p->buf;
  244. end = buf + p->buf_size;
  245. for(; buf < end; buf++) {
  246. buf2 = buf;
  247. for(frames = 0; buf2 < end; frames++) {
  248. init_get_bits(&gbc, buf2, 54);
  249. if(ff_ac3_parse_header(&gbc, &hdr) < 0)
  250. break;
  251. if(buf2 + hdr.frame_size > end ||
  252. av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, buf2 + 2, hdr.frame_size - 2))
  253. break;
  254. if (hdr.bitstream_id > 10)
  255. codec_id = CODEC_ID_EAC3;
  256. buf2 += hdr.frame_size;
  257. }
  258. max_frames = FFMAX(max_frames, frames);
  259. if(buf == p->buf)
  260. first_frames = frames;
  261. }
  262. if(codec_id != expected_codec_id) return 0;
  263. // keep this in sync with mp3 probe, both need to avoid
  264. // issues with MPEG-files!
  265. if (first_frames>=4) return AVPROBE_SCORE_MAX/2+1;
  266. else if(max_frames>500)return AVPROBE_SCORE_MAX/2;
  267. else if(max_frames>=4) return AVPROBE_SCORE_MAX/4;
  268. else if(max_frames>=1) return 1;
  269. else return 0;
  270. }
  271. #endif
  272. #if CONFIG_AC3_DEMUXER
  273. static int ac3_probe(AVProbeData *p)
  274. {
  275. return ac3_eac3_probe(p, CODEC_ID_AC3);
  276. }
  277. #endif
  278. #if CONFIG_EAC3_DEMUXER
  279. static int eac3_probe(AVProbeData *p)
  280. {
  281. return ac3_eac3_probe(p, CODEC_ID_EAC3);
  282. }
  283. #endif
  284. /* Note: Do not forget to add new entries to the Makefile as well. */
  285. #if CONFIG_AC3_DEMUXER
  286. AVInputFormat ac3_demuxer = {
  287. "ac3",
  288. NULL_IF_CONFIG_SMALL("raw AC-3"),
  289. 0,
  290. ac3_probe,
  291. ff_raw_audio_read_header,
  292. ff_raw_read_partial_packet,
  293. .flags= AVFMT_GENERIC_INDEX,
  294. .extensions = "ac3",
  295. .value = CODEC_ID_AC3,
  296. };
  297. #endif
  298. #if CONFIG_AC3_MUXER
  299. AVOutputFormat ac3_muxer = {
  300. "ac3",
  301. NULL_IF_CONFIG_SMALL("raw AC-3"),
  302. "audio/x-ac3",
  303. "ac3",
  304. 0,
  305. CODEC_ID_AC3,
  306. CODEC_ID_NONE,
  307. NULL,
  308. ff_raw_write_packet,
  309. .flags= AVFMT_NOTIMESTAMPS,
  310. };
  311. #endif
  312. #if CONFIG_DIRAC_DEMUXER
  313. AVInputFormat dirac_demuxer = {
  314. "dirac",
  315. NULL_IF_CONFIG_SMALL("raw Dirac"),
  316. 0,
  317. dirac_probe,
  318. ff_raw_video_read_header,
  319. ff_raw_read_partial_packet,
  320. .flags= AVFMT_GENERIC_INDEX,
  321. .value = CODEC_ID_DIRAC,
  322. };
  323. #endif
  324. #if CONFIG_DIRAC_MUXER
  325. AVOutputFormat dirac_muxer = {
  326. "dirac",
  327. NULL_IF_CONFIG_SMALL("raw Dirac"),
  328. NULL,
  329. "drc",
  330. 0,
  331. CODEC_ID_NONE,
  332. CODEC_ID_DIRAC,
  333. NULL,
  334. ff_raw_write_packet,
  335. .flags= AVFMT_NOTIMESTAMPS,
  336. };
  337. #endif
  338. #if CONFIG_DNXHD_DEMUXER
  339. AVInputFormat dnxhd_demuxer = {
  340. "dnxhd",
  341. NULL_IF_CONFIG_SMALL("raw DNxHD (SMPTE VC-3)"),
  342. 0,
  343. dnxhd_probe,
  344. ff_raw_video_read_header,
  345. ff_raw_read_partial_packet,
  346. .flags= AVFMT_GENERIC_INDEX,
  347. .value = CODEC_ID_DNXHD,
  348. };
  349. #endif
  350. #if CONFIG_DNXHD_MUXER
  351. AVOutputFormat dnxhd_muxer = {
  352. "dnxhd",
  353. NULL_IF_CONFIG_SMALL("raw DNxHD (SMPTE VC-3)"),
  354. NULL,
  355. "dnxhd",
  356. 0,
  357. CODEC_ID_NONE,
  358. CODEC_ID_DNXHD,
  359. NULL,
  360. ff_raw_write_packet,
  361. .flags= AVFMT_NOTIMESTAMPS,
  362. };
  363. #endif
  364. #if CONFIG_DTS_MUXER
  365. AVOutputFormat dts_muxer = {
  366. "dts",
  367. NULL_IF_CONFIG_SMALL("raw DTS"),
  368. "audio/x-dca",
  369. "dts",
  370. 0,
  371. CODEC_ID_DTS,
  372. CODEC_ID_NONE,
  373. NULL,
  374. ff_raw_write_packet,
  375. .flags= AVFMT_NOTIMESTAMPS,
  376. };
  377. #endif
  378. #if CONFIG_EAC3_DEMUXER
  379. AVInputFormat eac3_demuxer = {
  380. "eac3",
  381. NULL_IF_CONFIG_SMALL("raw E-AC-3"),
  382. 0,
  383. eac3_probe,
  384. ff_raw_audio_read_header,
  385. ff_raw_read_partial_packet,
  386. .flags= AVFMT_GENERIC_INDEX,
  387. .extensions = "eac3",
  388. .value = CODEC_ID_EAC3,
  389. };
  390. #endif
  391. #if CONFIG_EAC3_MUXER
  392. AVOutputFormat eac3_muxer = {
  393. "eac3",
  394. NULL_IF_CONFIG_SMALL("raw E-AC-3"),
  395. "audio/x-eac3",
  396. "eac3",
  397. 0,
  398. CODEC_ID_EAC3,
  399. CODEC_ID_NONE,
  400. NULL,
  401. ff_raw_write_packet,
  402. .flags= AVFMT_NOTIMESTAMPS,
  403. };
  404. #endif
  405. #if CONFIG_GSM_DEMUXER
  406. AVInputFormat gsm_demuxer = {
  407. "gsm",
  408. NULL_IF_CONFIG_SMALL("raw GSM"),
  409. 0,
  410. NULL,
  411. ff_raw_audio_read_header,
  412. ff_raw_read_partial_packet,
  413. .flags= AVFMT_GENERIC_INDEX,
  414. .extensions = "gsm",
  415. .value = CODEC_ID_GSM,
  416. };
  417. #endif
  418. #if CONFIG_H261_MUXER
  419. AVOutputFormat h261_muxer = {
  420. "h261",
  421. NULL_IF_CONFIG_SMALL("raw H.261"),
  422. "video/x-h261",
  423. "h261",
  424. 0,
  425. CODEC_ID_NONE,
  426. CODEC_ID_H261,
  427. NULL,
  428. ff_raw_write_packet,
  429. .flags= AVFMT_NOTIMESTAMPS,
  430. };
  431. #endif
  432. #if CONFIG_H263_MUXER
  433. AVOutputFormat h263_muxer = {
  434. "h263",
  435. NULL_IF_CONFIG_SMALL("raw H.263"),
  436. "video/x-h263",
  437. "h263",
  438. 0,
  439. CODEC_ID_NONE,
  440. CODEC_ID_H263,
  441. NULL,
  442. ff_raw_write_packet,
  443. .flags= AVFMT_NOTIMESTAMPS,
  444. };
  445. #endif
  446. #if CONFIG_H264_MUXER
  447. AVOutputFormat h264_muxer = {
  448. "h264",
  449. NULL_IF_CONFIG_SMALL("raw H.264 video format"),
  450. NULL,
  451. "h264",
  452. 0,
  453. CODEC_ID_NONE,
  454. CODEC_ID_H264,
  455. NULL,
  456. ff_raw_write_packet,
  457. .flags= AVFMT_NOTIMESTAMPS,
  458. };
  459. #endif
  460. #if CONFIG_CAVSVIDEO_MUXER
  461. AVOutputFormat cavsvideo_muxer = {
  462. "cavsvideo",
  463. NULL_IF_CONFIG_SMALL("raw Chinese AVS video"),
  464. NULL,
  465. "cavs",
  466. 0,
  467. CODEC_ID_NONE,
  468. CODEC_ID_CAVS,
  469. NULL,
  470. ff_raw_write_packet,
  471. .flags= AVFMT_NOTIMESTAMPS,
  472. };
  473. #endif
  474. #if CONFIG_M4V_MUXER
  475. AVOutputFormat m4v_muxer = {
  476. "m4v",
  477. NULL_IF_CONFIG_SMALL("raw MPEG-4 video format"),
  478. NULL,
  479. "m4v",
  480. 0,
  481. CODEC_ID_NONE,
  482. CODEC_ID_MPEG4,
  483. NULL,
  484. ff_raw_write_packet,
  485. .flags= AVFMT_NOTIMESTAMPS,
  486. };
  487. #endif
  488. #if CONFIG_MJPEG_DEMUXER
  489. AVInputFormat mjpeg_demuxer = {
  490. "mjpeg",
  491. NULL_IF_CONFIG_SMALL("raw MJPEG video"),
  492. 0,
  493. NULL,
  494. ff_raw_video_read_header,
  495. ff_raw_read_partial_packet,
  496. .flags= AVFMT_GENERIC_INDEX,
  497. .extensions = "mjpg,mjpeg",
  498. .value = CODEC_ID_MJPEG,
  499. };
  500. #endif
  501. #if CONFIG_MJPEG_MUXER
  502. AVOutputFormat mjpeg_muxer = {
  503. "mjpeg",
  504. NULL_IF_CONFIG_SMALL("raw MJPEG video"),
  505. "video/x-mjpeg",
  506. "mjpg,mjpeg",
  507. 0,
  508. CODEC_ID_NONE,
  509. CODEC_ID_MJPEG,
  510. NULL,
  511. ff_raw_write_packet,
  512. .flags= AVFMT_NOTIMESTAMPS,
  513. };
  514. #endif
  515. #if CONFIG_MLP_DEMUXER
  516. AVInputFormat mlp_demuxer = {
  517. "mlp",
  518. NULL_IF_CONFIG_SMALL("raw MLP"),
  519. 0,
  520. NULL,
  521. ff_raw_audio_read_header,
  522. ff_raw_read_partial_packet,
  523. .flags= AVFMT_GENERIC_INDEX,
  524. .extensions = "mlp",
  525. .value = CODEC_ID_MLP,
  526. };
  527. #endif
  528. #if CONFIG_MLP_MUXER
  529. AVOutputFormat mlp_muxer = {
  530. "mlp",
  531. NULL_IF_CONFIG_SMALL("raw MLP"),
  532. NULL,
  533. "mlp",
  534. 0,
  535. CODEC_ID_MLP,
  536. CODEC_ID_NONE,
  537. NULL,
  538. ff_raw_write_packet,
  539. .flags= AVFMT_NOTIMESTAMPS,
  540. };
  541. #endif
  542. #if CONFIG_SRT_MUXER
  543. AVOutputFormat srt_muxer = {
  544. .name = "srt",
  545. .long_name = NULL_IF_CONFIG_SMALL("SubRip subtitle format"),
  546. .mime_type = "application/x-subrip",
  547. .extensions = "srt",
  548. .write_packet = ff_raw_write_packet,
  549. .flags = AVFMT_NOTIMESTAMPS,
  550. .subtitle_codec = CODEC_ID_SRT,
  551. };
  552. #endif
  553. #if CONFIG_TRUEHD_DEMUXER
  554. AVInputFormat truehd_demuxer = {
  555. "truehd",
  556. NULL_IF_CONFIG_SMALL("raw TrueHD"),
  557. 0,
  558. NULL,
  559. ff_raw_audio_read_header,
  560. ff_raw_read_partial_packet,
  561. .flags= AVFMT_GENERIC_INDEX,
  562. .extensions = "thd",
  563. .value = CODEC_ID_TRUEHD,
  564. };
  565. #endif
  566. #if CONFIG_TRUEHD_MUXER
  567. AVOutputFormat truehd_muxer = {
  568. "truehd",
  569. NULL_IF_CONFIG_SMALL("raw TrueHD"),
  570. NULL,
  571. "thd",
  572. 0,
  573. CODEC_ID_TRUEHD,
  574. CODEC_ID_NONE,
  575. NULL,
  576. ff_raw_write_packet,
  577. .flags= AVFMT_NOTIMESTAMPS,
  578. };
  579. #endif
  580. #if CONFIG_MPEG1VIDEO_MUXER
  581. AVOutputFormat mpeg1video_muxer = {
  582. "mpeg1video",
  583. NULL_IF_CONFIG_SMALL("raw MPEG-1 video"),
  584. "video/x-mpeg",
  585. "mpg,mpeg,m1v",
  586. 0,
  587. CODEC_ID_NONE,
  588. CODEC_ID_MPEG1VIDEO,
  589. NULL,
  590. ff_raw_write_packet,
  591. .flags= AVFMT_NOTIMESTAMPS,
  592. };
  593. #endif
  594. #if CONFIG_MPEG2VIDEO_MUXER
  595. AVOutputFormat mpeg2video_muxer = {
  596. "mpeg2video",
  597. NULL_IF_CONFIG_SMALL("raw MPEG-2 video"),
  598. NULL,
  599. "m2v",
  600. 0,
  601. CODEC_ID_NONE,
  602. CODEC_ID_MPEG2VIDEO,
  603. NULL,
  604. ff_raw_write_packet,
  605. .flags= AVFMT_NOTIMESTAMPS,
  606. };
  607. #endif
  608. #if CONFIG_NULL_MUXER
  609. AVOutputFormat null_muxer = {
  610. "null",
  611. NULL_IF_CONFIG_SMALL("raw null video format"),
  612. NULL,
  613. NULL,
  614. 0,
  615. AV_NE(CODEC_ID_PCM_S16BE, CODEC_ID_PCM_S16LE),
  616. CODEC_ID_RAWVIDEO,
  617. NULL,
  618. null_write_packet,
  619. .flags = AVFMT_NOFILE | AVFMT_RAWPICTURE | AVFMT_NOTIMESTAMPS,
  620. };
  621. #endif
  622. #if CONFIG_RAWVIDEO_DEMUXER
  623. AVInputFormat rawvideo_demuxer = {
  624. "rawvideo",
  625. NULL_IF_CONFIG_SMALL("raw video format"),
  626. 0,
  627. NULL,
  628. raw_read_header,
  629. rawvideo_read_packet,
  630. .flags= AVFMT_GENERIC_INDEX,
  631. .extensions = "yuv,cif,qcif,rgb",
  632. .value = CODEC_ID_RAWVIDEO,
  633. };
  634. #endif
  635. #if CONFIG_RAWVIDEO_MUXER
  636. AVOutputFormat rawvideo_muxer = {
  637. "rawvideo",
  638. NULL_IF_CONFIG_SMALL("raw video format"),
  639. NULL,
  640. "yuv,rgb",
  641. 0,
  642. CODEC_ID_NONE,
  643. CODEC_ID_RAWVIDEO,
  644. NULL,
  645. ff_raw_write_packet,
  646. .flags= AVFMT_NOTIMESTAMPS,
  647. };
  648. #endif
  649. #if CONFIG_SHORTEN_DEMUXER
  650. AVInputFormat shorten_demuxer = {
  651. "shn",
  652. NULL_IF_CONFIG_SMALL("raw Shorten"),
  653. 0,
  654. NULL,
  655. ff_raw_audio_read_header,
  656. ff_raw_read_partial_packet,
  657. .flags= AVFMT_GENERIC_INDEX,
  658. .extensions = "shn",
  659. .value = CODEC_ID_SHORTEN,
  660. };
  661. #endif
  662. #if CONFIG_VC1_DEMUXER
  663. AVInputFormat vc1_demuxer = {
  664. "vc1",
  665. NULL_IF_CONFIG_SMALL("raw VC-1"),
  666. 0,
  667. NULL /* vc1_probe */,
  668. ff_raw_video_read_header,
  669. ff_raw_read_partial_packet,
  670. .extensions = "vc1",
  671. .value = CODEC_ID_VC1,
  672. };
  673. #endif
  674. /* PCM formats */
  675. #define PCMINPUTDEF(name, long_name, ext, codec) \
  676. AVInputFormat pcm_ ## name ## _demuxer = {\
  677. #name,\
  678. NULL_IF_CONFIG_SMALL(long_name),\
  679. 0,\
  680. NULL,\
  681. raw_read_header,\
  682. raw_read_packet,\
  683. NULL,\
  684. pcm_read_seek,\
  685. .flags= AVFMT_GENERIC_INDEX,\
  686. .extensions = ext,\
  687. .value = codec,\
  688. };
  689. #define PCMOUTPUTDEF(name, long_name, ext, codec) \
  690. AVOutputFormat pcm_ ## name ## _muxer = {\
  691. #name,\
  692. NULL_IF_CONFIG_SMALL(long_name),\
  693. NULL,\
  694. ext,\
  695. 0,\
  696. codec,\
  697. CODEC_ID_NONE,\
  698. NULL,\
  699. ff_raw_write_packet,\
  700. .flags= AVFMT_NOTIMESTAMPS,\
  701. };
  702. #if !CONFIG_MUXERS && CONFIG_DEMUXERS
  703. #define PCMDEF(name, long_name, ext, codec) \
  704. PCMINPUTDEF(name, long_name, ext, codec)
  705. #elif CONFIG_MUXERS && !CONFIG_DEMUXERS
  706. #define PCMDEF(name, long_name, ext, codec) \
  707. PCMOUTPUTDEF(name, long_name, ext, codec)
  708. #elif CONFIG_MUXERS && CONFIG_DEMUXERS
  709. #define PCMDEF(name, long_name, ext, codec) \
  710. PCMINPUTDEF(name, long_name, ext, codec)\
  711. PCMOUTPUTDEF(name, long_name, ext, codec)
  712. #else
  713. #define PCMDEF(name, long_name, ext, codec)
  714. #endif
  715. #if HAVE_BIGENDIAN
  716. #define BE_DEF(s) s
  717. #define LE_DEF(s) NULL
  718. #else
  719. #define BE_DEF(s) NULL
  720. #define LE_DEF(s) s
  721. #endif
  722. PCMDEF(f64be, "PCM 64 bit floating-point big-endian format",
  723. NULL, CODEC_ID_PCM_F64BE)
  724. PCMDEF(f64le, "PCM 64 bit floating-point little-endian format",
  725. NULL, CODEC_ID_PCM_F64LE)
  726. PCMDEF(f32be, "PCM 32 bit floating-point big-endian format",
  727. NULL, CODEC_ID_PCM_F32BE)
  728. PCMDEF(f32le, "PCM 32 bit floating-point little-endian format",
  729. NULL, CODEC_ID_PCM_F32LE)
  730. PCMDEF(s32be, "PCM signed 32 bit big-endian format",
  731. NULL, CODEC_ID_PCM_S32BE)
  732. PCMDEF(s32le, "PCM signed 32 bit little-endian format",
  733. NULL, CODEC_ID_PCM_S32LE)
  734. PCMDEF(s24be, "PCM signed 24 bit big-endian format",
  735. NULL, CODEC_ID_PCM_S24BE)
  736. PCMDEF(s24le, "PCM signed 24 bit little-endian format",
  737. NULL, CODEC_ID_PCM_S24LE)
  738. PCMDEF(s16be, "PCM signed 16 bit big-endian format",
  739. BE_DEF("sw"), CODEC_ID_PCM_S16BE)
  740. PCMDEF(s16le, "PCM signed 16 bit little-endian format",
  741. LE_DEF("sw"), CODEC_ID_PCM_S16LE)
  742. PCMDEF(s8, "PCM signed 8 bit format",
  743. "sb", CODEC_ID_PCM_S8)
  744. PCMDEF(u32be, "PCM unsigned 32 bit big-endian format",
  745. NULL, CODEC_ID_PCM_U32BE)
  746. PCMDEF(u32le, "PCM unsigned 32 bit little-endian format",
  747. NULL, CODEC_ID_PCM_U32LE)
  748. PCMDEF(u24be, "PCM unsigned 24 bit big-endian format",
  749. NULL, CODEC_ID_PCM_U24BE)
  750. PCMDEF(u24le, "PCM unsigned 24 bit little-endian format",
  751. NULL, CODEC_ID_PCM_U24LE)
  752. PCMDEF(u16be, "PCM unsigned 16 bit big-endian format",
  753. BE_DEF("uw"), CODEC_ID_PCM_U16BE)
  754. PCMDEF(u16le, "PCM unsigned 16 bit little-endian format",
  755. LE_DEF("uw"), CODEC_ID_PCM_U16LE)
  756. PCMDEF(u8, "PCM unsigned 8 bit format",
  757. "ub", CODEC_ID_PCM_U8)
  758. PCMDEF(alaw, "PCM A-law format",
  759. "al", CODEC_ID_PCM_ALAW)
  760. PCMDEF(mulaw, "PCM mu-law format",
  761. "ul", CODEC_ID_PCM_MULAW)