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.

918 lines
21KB

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