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.

807 lines
19KB

  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_AC3_DEMUXER || CONFIG_EAC3_DEMUXER
  207. static int ac3_eac3_probe(AVProbeData *p, enum CodecID expected_codec_id)
  208. {
  209. int max_frames, first_frames = 0, frames;
  210. uint8_t *buf, *buf2, *end;
  211. AC3HeaderInfo hdr;
  212. GetBitContext gbc;
  213. enum CodecID codec_id = CODEC_ID_AC3;
  214. max_frames = 0;
  215. buf = p->buf;
  216. end = buf + p->buf_size;
  217. for(; buf < end; buf++) {
  218. buf2 = buf;
  219. for(frames = 0; buf2 < end; frames++) {
  220. init_get_bits(&gbc, buf2, 54);
  221. if(ff_ac3_parse_header(&gbc, &hdr) < 0)
  222. break;
  223. if(buf2 + hdr.frame_size > end ||
  224. av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, buf2 + 2, hdr.frame_size - 2))
  225. break;
  226. if (hdr.bitstream_id > 10)
  227. codec_id = CODEC_ID_EAC3;
  228. buf2 += hdr.frame_size;
  229. }
  230. max_frames = FFMAX(max_frames, frames);
  231. if(buf == p->buf)
  232. first_frames = frames;
  233. }
  234. if(codec_id != expected_codec_id) return 0;
  235. // keep this in sync with mp3 probe, both need to avoid
  236. // issues with MPEG-files!
  237. if (first_frames>=4) return AVPROBE_SCORE_MAX/2+1;
  238. else if(max_frames>500)return AVPROBE_SCORE_MAX/2;
  239. else if(max_frames>=4) return AVPROBE_SCORE_MAX/4;
  240. else if(max_frames>=1) return 1;
  241. else return 0;
  242. }
  243. #endif
  244. #if CONFIG_AC3_DEMUXER
  245. static int ac3_probe(AVProbeData *p)
  246. {
  247. return ac3_eac3_probe(p, CODEC_ID_AC3);
  248. }
  249. #endif
  250. #if CONFIG_EAC3_DEMUXER
  251. static int eac3_probe(AVProbeData *p)
  252. {
  253. return ac3_eac3_probe(p, CODEC_ID_EAC3);
  254. }
  255. #endif
  256. /* Note: Do not forget to add new entries to the Makefile as well. */
  257. #if CONFIG_AC3_DEMUXER
  258. AVInputFormat ac3_demuxer = {
  259. "ac3",
  260. NULL_IF_CONFIG_SMALL("raw AC-3"),
  261. 0,
  262. ac3_probe,
  263. ff_raw_audio_read_header,
  264. ff_raw_read_partial_packet,
  265. .flags= AVFMT_GENERIC_INDEX,
  266. .extensions = "ac3",
  267. .value = CODEC_ID_AC3,
  268. };
  269. #endif
  270. #if CONFIG_AC3_MUXER
  271. AVOutputFormat ac3_muxer = {
  272. "ac3",
  273. NULL_IF_CONFIG_SMALL("raw AC-3"),
  274. "audio/x-ac3",
  275. "ac3",
  276. 0,
  277. CODEC_ID_AC3,
  278. CODEC_ID_NONE,
  279. NULL,
  280. ff_raw_write_packet,
  281. .flags= AVFMT_NOTIMESTAMPS,
  282. };
  283. #endif
  284. #if CONFIG_DIRAC_MUXER
  285. AVOutputFormat dirac_muxer = {
  286. "dirac",
  287. NULL_IF_CONFIG_SMALL("raw Dirac"),
  288. NULL,
  289. "drc",
  290. 0,
  291. CODEC_ID_NONE,
  292. CODEC_ID_DIRAC,
  293. NULL,
  294. ff_raw_write_packet,
  295. .flags= AVFMT_NOTIMESTAMPS,
  296. };
  297. #endif
  298. #if CONFIG_DNXHD_MUXER
  299. AVOutputFormat dnxhd_muxer = {
  300. "dnxhd",
  301. NULL_IF_CONFIG_SMALL("raw DNxHD (SMPTE VC-3)"),
  302. NULL,
  303. "dnxhd",
  304. 0,
  305. CODEC_ID_NONE,
  306. CODEC_ID_DNXHD,
  307. NULL,
  308. ff_raw_write_packet,
  309. .flags= AVFMT_NOTIMESTAMPS,
  310. };
  311. #endif
  312. #if CONFIG_DTS_MUXER
  313. AVOutputFormat dts_muxer = {
  314. "dts",
  315. NULL_IF_CONFIG_SMALL("raw DTS"),
  316. "audio/x-dca",
  317. "dts",
  318. 0,
  319. CODEC_ID_DTS,
  320. CODEC_ID_NONE,
  321. NULL,
  322. ff_raw_write_packet,
  323. .flags= AVFMT_NOTIMESTAMPS,
  324. };
  325. #endif
  326. #if CONFIG_EAC3_DEMUXER
  327. AVInputFormat eac3_demuxer = {
  328. "eac3",
  329. NULL_IF_CONFIG_SMALL("raw E-AC-3"),
  330. 0,
  331. eac3_probe,
  332. ff_raw_audio_read_header,
  333. ff_raw_read_partial_packet,
  334. .flags= AVFMT_GENERIC_INDEX,
  335. .extensions = "eac3",
  336. .value = CODEC_ID_EAC3,
  337. };
  338. #endif
  339. #if CONFIG_EAC3_MUXER
  340. AVOutputFormat eac3_muxer = {
  341. "eac3",
  342. NULL_IF_CONFIG_SMALL("raw E-AC-3"),
  343. "audio/x-eac3",
  344. "eac3",
  345. 0,
  346. CODEC_ID_EAC3,
  347. CODEC_ID_NONE,
  348. NULL,
  349. ff_raw_write_packet,
  350. .flags= AVFMT_NOTIMESTAMPS,
  351. };
  352. #endif
  353. #if CONFIG_GSM_DEMUXER
  354. AVInputFormat gsm_demuxer = {
  355. "gsm",
  356. NULL_IF_CONFIG_SMALL("raw GSM"),
  357. 0,
  358. NULL,
  359. ff_raw_audio_read_header,
  360. ff_raw_read_partial_packet,
  361. .flags= AVFMT_GENERIC_INDEX,
  362. .extensions = "gsm",
  363. .value = CODEC_ID_GSM,
  364. };
  365. #endif
  366. #if CONFIG_H261_MUXER
  367. AVOutputFormat h261_muxer = {
  368. "h261",
  369. NULL_IF_CONFIG_SMALL("raw H.261"),
  370. "video/x-h261",
  371. "h261",
  372. 0,
  373. CODEC_ID_NONE,
  374. CODEC_ID_H261,
  375. NULL,
  376. ff_raw_write_packet,
  377. .flags= AVFMT_NOTIMESTAMPS,
  378. };
  379. #endif
  380. #if CONFIG_H263_MUXER
  381. AVOutputFormat h263_muxer = {
  382. "h263",
  383. NULL_IF_CONFIG_SMALL("raw H.263"),
  384. "video/x-h263",
  385. "h263",
  386. 0,
  387. CODEC_ID_NONE,
  388. CODEC_ID_H263,
  389. NULL,
  390. ff_raw_write_packet,
  391. .flags= AVFMT_NOTIMESTAMPS,
  392. };
  393. #endif
  394. #if CONFIG_H264_MUXER
  395. AVOutputFormat h264_muxer = {
  396. "h264",
  397. NULL_IF_CONFIG_SMALL("raw H.264 video format"),
  398. NULL,
  399. "h264",
  400. 0,
  401. CODEC_ID_NONE,
  402. CODEC_ID_H264,
  403. NULL,
  404. ff_raw_write_packet,
  405. .flags= AVFMT_NOTIMESTAMPS,
  406. };
  407. #endif
  408. #if CONFIG_CAVSVIDEO_MUXER
  409. AVOutputFormat cavsvideo_muxer = {
  410. "cavsvideo",
  411. NULL_IF_CONFIG_SMALL("raw Chinese AVS video"),
  412. NULL,
  413. "cavs",
  414. 0,
  415. CODEC_ID_NONE,
  416. CODEC_ID_CAVS,
  417. NULL,
  418. ff_raw_write_packet,
  419. .flags= AVFMT_NOTIMESTAMPS,
  420. };
  421. #endif
  422. #if CONFIG_M4V_MUXER
  423. AVOutputFormat m4v_muxer = {
  424. "m4v",
  425. NULL_IF_CONFIG_SMALL("raw MPEG-4 video format"),
  426. NULL,
  427. "m4v",
  428. 0,
  429. CODEC_ID_NONE,
  430. CODEC_ID_MPEG4,
  431. NULL,
  432. ff_raw_write_packet,
  433. .flags= AVFMT_NOTIMESTAMPS,
  434. };
  435. #endif
  436. #if CONFIG_MJPEG_DEMUXER
  437. AVInputFormat mjpeg_demuxer = {
  438. "mjpeg",
  439. NULL_IF_CONFIG_SMALL("raw MJPEG video"),
  440. 0,
  441. NULL,
  442. ff_raw_video_read_header,
  443. ff_raw_read_partial_packet,
  444. .flags= AVFMT_GENERIC_INDEX,
  445. .extensions = "mjpg,mjpeg",
  446. .value = CODEC_ID_MJPEG,
  447. };
  448. #endif
  449. #if CONFIG_MJPEG_MUXER
  450. AVOutputFormat mjpeg_muxer = {
  451. "mjpeg",
  452. NULL_IF_CONFIG_SMALL("raw MJPEG video"),
  453. "video/x-mjpeg",
  454. "mjpg,mjpeg",
  455. 0,
  456. CODEC_ID_NONE,
  457. CODEC_ID_MJPEG,
  458. NULL,
  459. ff_raw_write_packet,
  460. .flags= AVFMT_NOTIMESTAMPS,
  461. };
  462. #endif
  463. #if CONFIG_MLP_DEMUXER
  464. AVInputFormat mlp_demuxer = {
  465. "mlp",
  466. NULL_IF_CONFIG_SMALL("raw MLP"),
  467. 0,
  468. NULL,
  469. ff_raw_audio_read_header,
  470. ff_raw_read_partial_packet,
  471. .flags= AVFMT_GENERIC_INDEX,
  472. .extensions = "mlp",
  473. .value = CODEC_ID_MLP,
  474. };
  475. #endif
  476. #if CONFIG_MLP_MUXER
  477. AVOutputFormat mlp_muxer = {
  478. "mlp",
  479. NULL_IF_CONFIG_SMALL("raw MLP"),
  480. NULL,
  481. "mlp",
  482. 0,
  483. CODEC_ID_MLP,
  484. CODEC_ID_NONE,
  485. NULL,
  486. ff_raw_write_packet,
  487. .flags= AVFMT_NOTIMESTAMPS,
  488. };
  489. #endif
  490. #if CONFIG_SRT_MUXER
  491. AVOutputFormat srt_muxer = {
  492. .name = "srt",
  493. .long_name = NULL_IF_CONFIG_SMALL("SubRip subtitle format"),
  494. .mime_type = "application/x-subrip",
  495. .extensions = "srt",
  496. .write_packet = ff_raw_write_packet,
  497. .flags = AVFMT_NOTIMESTAMPS,
  498. .subtitle_codec = CODEC_ID_SRT,
  499. };
  500. #endif
  501. #if CONFIG_TRUEHD_DEMUXER
  502. AVInputFormat truehd_demuxer = {
  503. "truehd",
  504. NULL_IF_CONFIG_SMALL("raw TrueHD"),
  505. 0,
  506. NULL,
  507. ff_raw_audio_read_header,
  508. ff_raw_read_partial_packet,
  509. .flags= AVFMT_GENERIC_INDEX,
  510. .extensions = "thd",
  511. .value = CODEC_ID_TRUEHD,
  512. };
  513. #endif
  514. #if CONFIG_TRUEHD_MUXER
  515. AVOutputFormat truehd_muxer = {
  516. "truehd",
  517. NULL_IF_CONFIG_SMALL("raw TrueHD"),
  518. NULL,
  519. "thd",
  520. 0,
  521. CODEC_ID_TRUEHD,
  522. CODEC_ID_NONE,
  523. NULL,
  524. ff_raw_write_packet,
  525. .flags= AVFMT_NOTIMESTAMPS,
  526. };
  527. #endif
  528. #if CONFIG_MPEG1VIDEO_MUXER
  529. AVOutputFormat mpeg1video_muxer = {
  530. "mpeg1video",
  531. NULL_IF_CONFIG_SMALL("raw MPEG-1 video"),
  532. "video/x-mpeg",
  533. "mpg,mpeg,m1v",
  534. 0,
  535. CODEC_ID_NONE,
  536. CODEC_ID_MPEG1VIDEO,
  537. NULL,
  538. ff_raw_write_packet,
  539. .flags= AVFMT_NOTIMESTAMPS,
  540. };
  541. #endif
  542. #if CONFIG_MPEG2VIDEO_MUXER
  543. AVOutputFormat mpeg2video_muxer = {
  544. "mpeg2video",
  545. NULL_IF_CONFIG_SMALL("raw MPEG-2 video"),
  546. NULL,
  547. "m2v",
  548. 0,
  549. CODEC_ID_NONE,
  550. CODEC_ID_MPEG2VIDEO,
  551. NULL,
  552. ff_raw_write_packet,
  553. .flags= AVFMT_NOTIMESTAMPS,
  554. };
  555. #endif
  556. #if CONFIG_NULL_MUXER
  557. AVOutputFormat null_muxer = {
  558. "null",
  559. NULL_IF_CONFIG_SMALL("raw null video format"),
  560. NULL,
  561. NULL,
  562. 0,
  563. AV_NE(CODEC_ID_PCM_S16BE, CODEC_ID_PCM_S16LE),
  564. CODEC_ID_RAWVIDEO,
  565. NULL,
  566. null_write_packet,
  567. .flags = AVFMT_NOFILE | AVFMT_RAWPICTURE | AVFMT_NOTIMESTAMPS,
  568. };
  569. #endif
  570. #if CONFIG_RAWVIDEO_DEMUXER
  571. AVInputFormat rawvideo_demuxer = {
  572. "rawvideo",
  573. NULL_IF_CONFIG_SMALL("raw video format"),
  574. 0,
  575. NULL,
  576. raw_read_header,
  577. rawvideo_read_packet,
  578. .flags= AVFMT_GENERIC_INDEX,
  579. .extensions = "yuv,cif,qcif,rgb",
  580. .value = CODEC_ID_RAWVIDEO,
  581. };
  582. #endif
  583. #if CONFIG_RAWVIDEO_MUXER
  584. AVOutputFormat rawvideo_muxer = {
  585. "rawvideo",
  586. NULL_IF_CONFIG_SMALL("raw video format"),
  587. NULL,
  588. "yuv,rgb",
  589. 0,
  590. CODEC_ID_NONE,
  591. CODEC_ID_RAWVIDEO,
  592. NULL,
  593. ff_raw_write_packet,
  594. .flags= AVFMT_NOTIMESTAMPS,
  595. };
  596. #endif
  597. #if CONFIG_SHORTEN_DEMUXER
  598. AVInputFormat shorten_demuxer = {
  599. "shn",
  600. NULL_IF_CONFIG_SMALL("raw Shorten"),
  601. 0,
  602. NULL,
  603. ff_raw_audio_read_header,
  604. ff_raw_read_partial_packet,
  605. .flags= AVFMT_GENERIC_INDEX,
  606. .extensions = "shn",
  607. .value = CODEC_ID_SHORTEN,
  608. };
  609. #endif
  610. #if CONFIG_VC1_DEMUXER
  611. AVInputFormat vc1_demuxer = {
  612. "vc1",
  613. NULL_IF_CONFIG_SMALL("raw VC-1"),
  614. 0,
  615. NULL /* vc1_probe */,
  616. ff_raw_video_read_header,
  617. ff_raw_read_partial_packet,
  618. .extensions = "vc1",
  619. .value = CODEC_ID_VC1,
  620. };
  621. #endif
  622. /* PCM formats */
  623. #define PCMINPUTDEF(name, long_name, ext, codec) \
  624. AVInputFormat pcm_ ## name ## _demuxer = {\
  625. #name,\
  626. NULL_IF_CONFIG_SMALL(long_name),\
  627. 0,\
  628. NULL,\
  629. raw_read_header,\
  630. raw_read_packet,\
  631. NULL,\
  632. pcm_read_seek,\
  633. .flags= AVFMT_GENERIC_INDEX,\
  634. .extensions = ext,\
  635. .value = codec,\
  636. };
  637. #define PCMOUTPUTDEF(name, long_name, ext, codec) \
  638. AVOutputFormat pcm_ ## name ## _muxer = {\
  639. #name,\
  640. NULL_IF_CONFIG_SMALL(long_name),\
  641. NULL,\
  642. ext,\
  643. 0,\
  644. codec,\
  645. CODEC_ID_NONE,\
  646. NULL,\
  647. ff_raw_write_packet,\
  648. .flags= AVFMT_NOTIMESTAMPS,\
  649. };
  650. #if !CONFIG_MUXERS && CONFIG_DEMUXERS
  651. #define PCMDEF(name, long_name, ext, codec) \
  652. PCMINPUTDEF(name, long_name, ext, codec)
  653. #elif CONFIG_MUXERS && !CONFIG_DEMUXERS
  654. #define PCMDEF(name, long_name, ext, codec) \
  655. PCMOUTPUTDEF(name, long_name, ext, codec)
  656. #elif CONFIG_MUXERS && CONFIG_DEMUXERS
  657. #define PCMDEF(name, long_name, ext, codec) \
  658. PCMINPUTDEF(name, long_name, ext, codec)\
  659. PCMOUTPUTDEF(name, long_name, ext, codec)
  660. #else
  661. #define PCMDEF(name, long_name, ext, codec)
  662. #endif
  663. #if HAVE_BIGENDIAN
  664. #define BE_DEF(s) s
  665. #define LE_DEF(s) NULL
  666. #else
  667. #define BE_DEF(s) NULL
  668. #define LE_DEF(s) s
  669. #endif
  670. PCMDEF(f64be, "PCM 64 bit floating-point big-endian format",
  671. NULL, CODEC_ID_PCM_F64BE)
  672. PCMDEF(f64le, "PCM 64 bit floating-point little-endian format",
  673. NULL, CODEC_ID_PCM_F64LE)
  674. PCMDEF(f32be, "PCM 32 bit floating-point big-endian format",
  675. NULL, CODEC_ID_PCM_F32BE)
  676. PCMDEF(f32le, "PCM 32 bit floating-point little-endian format",
  677. NULL, CODEC_ID_PCM_F32LE)
  678. PCMDEF(s32be, "PCM signed 32 bit big-endian format",
  679. NULL, CODEC_ID_PCM_S32BE)
  680. PCMDEF(s32le, "PCM signed 32 bit little-endian format",
  681. NULL, CODEC_ID_PCM_S32LE)
  682. PCMDEF(s24be, "PCM signed 24 bit big-endian format",
  683. NULL, CODEC_ID_PCM_S24BE)
  684. PCMDEF(s24le, "PCM signed 24 bit little-endian format",
  685. NULL, CODEC_ID_PCM_S24LE)
  686. PCMDEF(s16be, "PCM signed 16 bit big-endian format",
  687. BE_DEF("sw"), CODEC_ID_PCM_S16BE)
  688. PCMDEF(s16le, "PCM signed 16 bit little-endian format",
  689. LE_DEF("sw"), CODEC_ID_PCM_S16LE)
  690. PCMDEF(s8, "PCM signed 8 bit format",
  691. "sb", CODEC_ID_PCM_S8)
  692. PCMDEF(u32be, "PCM unsigned 32 bit big-endian format",
  693. NULL, CODEC_ID_PCM_U32BE)
  694. PCMDEF(u32le, "PCM unsigned 32 bit little-endian format",
  695. NULL, CODEC_ID_PCM_U32LE)
  696. PCMDEF(u24be, "PCM unsigned 24 bit big-endian format",
  697. NULL, CODEC_ID_PCM_U24BE)
  698. PCMDEF(u24le, "PCM unsigned 24 bit little-endian format",
  699. NULL, CODEC_ID_PCM_U24LE)
  700. PCMDEF(u16be, "PCM unsigned 16 bit big-endian format",
  701. BE_DEF("uw"), CODEC_ID_PCM_U16BE)
  702. PCMDEF(u16le, "PCM unsigned 16 bit little-endian format",
  703. LE_DEF("uw"), CODEC_ID_PCM_U16LE)
  704. PCMDEF(u8, "PCM unsigned 8 bit format",
  705. "ub", CODEC_ID_PCM_U8)
  706. PCMDEF(alaw, "PCM A-law format",
  707. "al", CODEC_ID_PCM_ALAW)
  708. PCMDEF(mulaw, "PCM mu-law format",
  709. "ul", CODEC_ID_PCM_MULAW)