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.

1185 lines
29KB

  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_MPEGVIDEO_DEMUXER
  207. #define SEQ_START_CODE 0x000001b3
  208. #define GOP_START_CODE 0x000001b8
  209. #define PICTURE_START_CODE 0x00000100
  210. #define SLICE_START_CODE 0x00000101
  211. #define PACK_START_CODE 0x000001ba
  212. #define VIDEO_ID 0x000001e0
  213. #define AUDIO_ID 0x000001c0
  214. static int mpegvideo_probe(AVProbeData *p)
  215. {
  216. uint32_t code= -1;
  217. int pic=0, seq=0, slice=0, pspack=0, pes=0;
  218. int i;
  219. for(i=0; i<p->buf_size; i++){
  220. code = (code<<8) + p->buf[i];
  221. if ((code & 0xffffff00) == 0x100) {
  222. switch(code){
  223. case SEQ_START_CODE: seq++; break;
  224. case PICTURE_START_CODE: pic++; break;
  225. case SLICE_START_CODE: slice++; break;
  226. case PACK_START_CODE: pspack++; break;
  227. }
  228. if ((code & 0x1f0) == VIDEO_ID) pes++;
  229. else if((code & 0x1e0) == AUDIO_ID) pes++;
  230. }
  231. }
  232. if(seq && seq*9<=pic*10 && pic*9<=slice*10 && !pspack && !pes)
  233. return pic>1 ? AVPROBE_SCORE_MAX/2+1 : AVPROBE_SCORE_MAX/4; // +1 for .mpg
  234. return 0;
  235. }
  236. #endif
  237. #if CONFIG_CAVSVIDEO_DEMUXER
  238. #define CAVS_SEQ_START_CODE 0x000001b0
  239. #define CAVS_PIC_I_START_CODE 0x000001b3
  240. #define CAVS_UNDEF_START_CODE 0x000001b4
  241. #define CAVS_PIC_PB_START_CODE 0x000001b6
  242. #define CAVS_VIDEO_EDIT_CODE 0x000001b7
  243. #define CAVS_PROFILE_JIZHUN 0x20
  244. static int cavsvideo_probe(AVProbeData *p)
  245. {
  246. uint32_t code= -1;
  247. int pic=0, seq=0, slice_pos = 0;
  248. int i;
  249. for(i=0; i<p->buf_size; i++){
  250. code = (code<<8) + p->buf[i];
  251. if ((code & 0xffffff00) == 0x100) {
  252. if(code < CAVS_SEQ_START_CODE) {
  253. /* slices have to be consecutive */
  254. if(code < slice_pos)
  255. return 0;
  256. slice_pos = code;
  257. } else {
  258. slice_pos = 0;
  259. }
  260. if (code == CAVS_SEQ_START_CODE) {
  261. seq++;
  262. /* check for the only currently supported profile */
  263. if(p->buf[i+1] != CAVS_PROFILE_JIZHUN)
  264. return 0;
  265. } else if ((code == CAVS_PIC_I_START_CODE) ||
  266. (code == CAVS_PIC_PB_START_CODE)) {
  267. pic++;
  268. } else if ((code == CAVS_UNDEF_START_CODE) ||
  269. (code > CAVS_VIDEO_EDIT_CODE)) {
  270. return 0;
  271. }
  272. }
  273. }
  274. if(seq && seq*9<=pic*10)
  275. return AVPROBE_SCORE_MAX/2;
  276. return 0;
  277. }
  278. #endif
  279. #if CONFIG_M4V_DEMUXER
  280. #define VISUAL_OBJECT_START_CODE 0x000001b5
  281. #define VOP_START_CODE 0x000001b6
  282. static int mpeg4video_probe(AVProbeData *probe_packet)
  283. {
  284. uint32_t temp_buffer= -1;
  285. int VO=0, VOL=0, VOP = 0, VISO = 0, res=0;
  286. int i;
  287. for(i=0; i<probe_packet->buf_size; i++){
  288. temp_buffer = (temp_buffer<<8) + probe_packet->buf[i];
  289. if ((temp_buffer & 0xffffff00) != 0x100)
  290. continue;
  291. if (temp_buffer == VOP_START_CODE) VOP++;
  292. else if (temp_buffer == VISUAL_OBJECT_START_CODE) VISO++;
  293. else if (temp_buffer < 0x120) VO++;
  294. else if (temp_buffer < 0x130) VOL++;
  295. else if ( !(0x1AF < temp_buffer && temp_buffer < 0x1B7)
  296. && !(0x1B9 < temp_buffer && temp_buffer < 0x1C4)) res++;
  297. }
  298. if ( VOP >= VISO && VOP >= VOL && VO >= VOL && VOL > 0 && res==0)
  299. return AVPROBE_SCORE_MAX/2;
  300. return 0;
  301. }
  302. #endif
  303. #if CONFIG_H264_DEMUXER
  304. static int h264_probe(AVProbeData *p)
  305. {
  306. uint32_t code= -1;
  307. int sps=0, pps=0, idr=0, res=0, sli=0;
  308. int i;
  309. for(i=0; i<p->buf_size; i++){
  310. code = (code<<8) + p->buf[i];
  311. if ((code & 0xffffff00) == 0x100) {
  312. int ref_idc= (code>>5)&3;
  313. int type = code & 0x1F;
  314. static const int8_t ref_zero[32]={
  315. 2, 0, 0, 0, 0,-1, 1,-1,
  316. -1, 1, 1, 1, 1,-1, 2, 2,
  317. 2, 2, 2, 0, 2, 2, 2, 2,
  318. 2, 2, 2, 2, 2, 2, 2, 2
  319. };
  320. if(code & 0x80) //forbidden bit
  321. return 0;
  322. if(ref_zero[type] == 1 && ref_idc)
  323. return 0;
  324. if(ref_zero[type] ==-1 && !ref_idc)
  325. return 0;
  326. if(ref_zero[type] == 2)
  327. res++;
  328. switch(type){
  329. case 1: sli++; break;
  330. case 5: idr++; break;
  331. case 7:
  332. if(p->buf[i+2]&0x0F)
  333. return 0;
  334. sps++;
  335. break;
  336. case 8: pps++; break;
  337. }
  338. }
  339. }
  340. if(sps && pps && (idr||sli>3) && res<(sps+pps+idr))
  341. return AVPROBE_SCORE_MAX/2+1; // +1 for .mpg
  342. return 0;
  343. }
  344. #endif
  345. #if CONFIG_H263_DEMUXER
  346. static int h263_probe(AVProbeData *p)
  347. {
  348. uint64_t code= -1;
  349. int i;
  350. int valid_psc=0;
  351. int invalid_psc=0;
  352. int res_change=0;
  353. int src_fmt, last_src_fmt=-1;
  354. int last_gn=0;
  355. for(i=0; i<p->buf_size; i++){
  356. code = (code<<8) + p->buf[i];
  357. if ((code & 0xfffffc0000) == 0x800000) {
  358. src_fmt= (code>>2)&3;
  359. if( src_fmt != last_src_fmt
  360. && last_src_fmt>0 && last_src_fmt<6
  361. && src_fmt<6)
  362. res_change++;
  363. if((code&0x300)==0x200 && src_fmt){
  364. valid_psc++;
  365. last_gn=0;
  366. }else
  367. invalid_psc++;
  368. last_src_fmt= src_fmt;
  369. } else if((code & 0xffff800000) == 0x800000) {
  370. int gn= (code>>(23-5)) & 0x1F;
  371. if(gn<last_gn){
  372. invalid_psc++;
  373. }else
  374. last_gn= gn;
  375. }
  376. }
  377. //av_log(NULL, AV_LOG_ERROR, "h263_probe: psc:%d invalid:%d res_change:%d\n", valid_psc, invalid_psc, res_change);
  378. //h263_probe: psc:3 invalid:0 res_change:0 (1588/recent_ffmpeg_parses_mpg_incorrectly.mpg)
  379. if(valid_psc > 2*invalid_psc + 2*res_change + 3){
  380. return 50;
  381. }else if(valid_psc > 2*invalid_psc)
  382. return 25;
  383. return 0;
  384. }
  385. #endif
  386. #if CONFIG_H261_DEMUXER
  387. static int h261_probe(AVProbeData *p)
  388. {
  389. uint32_t code= -1;
  390. int i;
  391. int valid_psc=0;
  392. int invalid_psc=0;
  393. int next_gn=0;
  394. int src_fmt=0;
  395. GetBitContext gb;
  396. init_get_bits(&gb, p->buf, p->buf_size*8);
  397. for(i=0; i<p->buf_size*8; i++){
  398. if ((code & 0x01ff0000) || !(code & 0xff00)) {
  399. code = (code<<8) + get_bits(&gb, 8);
  400. i += 7;
  401. } else
  402. code = (code<<1) + get_bits1(&gb);
  403. if ((code & 0xffff0000) == 0x10000) {
  404. int gn= (code>>12)&0xf;
  405. if(!gn)
  406. src_fmt= code&8;
  407. if(gn != next_gn) invalid_psc++;
  408. else valid_psc++;
  409. if(src_fmt){ // CIF
  410. next_gn= (gn+1 )%13;
  411. }else{ //QCIF
  412. next_gn= (gn+1+!!gn)% 7;
  413. }
  414. }
  415. }
  416. if(valid_psc > 2*invalid_psc + 6){
  417. return 50;
  418. }else if(valid_psc > 2*invalid_psc + 2)
  419. return 25;
  420. return 0;
  421. }
  422. #endif
  423. #if 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 CONFIG_DNXHD_DEMUXER
  433. static int dnxhd_probe(AVProbeData *p)
  434. {
  435. static const uint8_t header[] = {0x00,0x00,0x02,0x80,0x01};
  436. int w, h, compression_id;
  437. if (p->buf_size < 0x2c)
  438. return 0;
  439. if (memcmp(p->buf, header, 5))
  440. return 0;
  441. h = AV_RB16(p->buf + 0x18);
  442. w = AV_RB16(p->buf + 0x1a);
  443. if (!w || !h)
  444. return 0;
  445. compression_id = AV_RB32(p->buf + 0x28);
  446. if (compression_id < 1237 || compression_id > 1253)
  447. return 0;
  448. return AVPROBE_SCORE_MAX;
  449. }
  450. #endif
  451. #if CONFIG_AC3_DEMUXER || CONFIG_EAC3_DEMUXER
  452. static int ac3_eac3_probe(AVProbeData *p, enum CodecID expected_codec_id)
  453. {
  454. int max_frames, first_frames = 0, frames;
  455. uint8_t *buf, *buf2, *end;
  456. AC3HeaderInfo hdr;
  457. GetBitContext gbc;
  458. enum CodecID codec_id = CODEC_ID_AC3;
  459. max_frames = 0;
  460. buf = p->buf;
  461. end = buf + p->buf_size;
  462. for(; buf < end; buf++) {
  463. buf2 = buf;
  464. for(frames = 0; buf2 < end; frames++) {
  465. init_get_bits(&gbc, buf2, 54);
  466. if(ff_ac3_parse_header(&gbc, &hdr) < 0)
  467. break;
  468. if(buf2 + hdr.frame_size > end ||
  469. av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, buf2 + 2, hdr.frame_size - 2))
  470. break;
  471. if (hdr.bitstream_id > 10)
  472. codec_id = CODEC_ID_EAC3;
  473. buf2 += hdr.frame_size;
  474. }
  475. max_frames = FFMAX(max_frames, frames);
  476. if(buf == p->buf)
  477. first_frames = frames;
  478. }
  479. if(codec_id != expected_codec_id) return 0;
  480. // keep this in sync with mp3 probe, both need to avoid
  481. // issues with MPEG-files!
  482. if (first_frames>=4) return AVPROBE_SCORE_MAX/2+1;
  483. else if(max_frames>500)return AVPROBE_SCORE_MAX/2;
  484. else if(max_frames>=4) return AVPROBE_SCORE_MAX/4;
  485. else if(max_frames>=1) return 1;
  486. else return 0;
  487. }
  488. #endif
  489. #if CONFIG_AC3_DEMUXER
  490. static int ac3_probe(AVProbeData *p)
  491. {
  492. return ac3_eac3_probe(p, CODEC_ID_AC3);
  493. }
  494. #endif
  495. #if CONFIG_EAC3_DEMUXER
  496. static int eac3_probe(AVProbeData *p)
  497. {
  498. return ac3_eac3_probe(p, CODEC_ID_EAC3);
  499. }
  500. #endif
  501. /* Note: Do not forget to add new entries to the Makefile as well. */
  502. #if CONFIG_AC3_DEMUXER
  503. AVInputFormat ac3_demuxer = {
  504. "ac3",
  505. NULL_IF_CONFIG_SMALL("raw AC-3"),
  506. 0,
  507. ac3_probe,
  508. ff_raw_audio_read_header,
  509. ff_raw_read_partial_packet,
  510. .flags= AVFMT_GENERIC_INDEX,
  511. .extensions = "ac3",
  512. .value = CODEC_ID_AC3,
  513. };
  514. #endif
  515. #if CONFIG_AC3_MUXER
  516. AVOutputFormat ac3_muxer = {
  517. "ac3",
  518. NULL_IF_CONFIG_SMALL("raw AC-3"),
  519. "audio/x-ac3",
  520. "ac3",
  521. 0,
  522. CODEC_ID_AC3,
  523. CODEC_ID_NONE,
  524. NULL,
  525. ff_raw_write_packet,
  526. .flags= AVFMT_NOTIMESTAMPS,
  527. };
  528. #endif
  529. #if CONFIG_DIRAC_DEMUXER
  530. AVInputFormat dirac_demuxer = {
  531. "dirac",
  532. NULL_IF_CONFIG_SMALL("raw Dirac"),
  533. 0,
  534. dirac_probe,
  535. ff_raw_video_read_header,
  536. ff_raw_read_partial_packet,
  537. .flags= AVFMT_GENERIC_INDEX,
  538. .value = CODEC_ID_DIRAC,
  539. };
  540. #endif
  541. #if CONFIG_DIRAC_MUXER
  542. AVOutputFormat dirac_muxer = {
  543. "dirac",
  544. NULL_IF_CONFIG_SMALL("raw Dirac"),
  545. NULL,
  546. "drc",
  547. 0,
  548. CODEC_ID_NONE,
  549. CODEC_ID_DIRAC,
  550. NULL,
  551. ff_raw_write_packet,
  552. .flags= AVFMT_NOTIMESTAMPS,
  553. };
  554. #endif
  555. #if CONFIG_DNXHD_DEMUXER
  556. AVInputFormat dnxhd_demuxer = {
  557. "dnxhd",
  558. NULL_IF_CONFIG_SMALL("raw DNxHD (SMPTE VC-3)"),
  559. 0,
  560. dnxhd_probe,
  561. ff_raw_video_read_header,
  562. ff_raw_read_partial_packet,
  563. .flags= AVFMT_GENERIC_INDEX,
  564. .value = CODEC_ID_DNXHD,
  565. };
  566. #endif
  567. #if CONFIG_DNXHD_MUXER
  568. AVOutputFormat dnxhd_muxer = {
  569. "dnxhd",
  570. NULL_IF_CONFIG_SMALL("raw DNxHD (SMPTE VC-3)"),
  571. NULL,
  572. "dnxhd",
  573. 0,
  574. CODEC_ID_NONE,
  575. CODEC_ID_DNXHD,
  576. NULL,
  577. ff_raw_write_packet,
  578. .flags= AVFMT_NOTIMESTAMPS,
  579. };
  580. #endif
  581. #if CONFIG_DTS_MUXER
  582. AVOutputFormat dts_muxer = {
  583. "dts",
  584. NULL_IF_CONFIG_SMALL("raw DTS"),
  585. "audio/x-dca",
  586. "dts",
  587. 0,
  588. CODEC_ID_DTS,
  589. CODEC_ID_NONE,
  590. NULL,
  591. ff_raw_write_packet,
  592. .flags= AVFMT_NOTIMESTAMPS,
  593. };
  594. #endif
  595. #if CONFIG_EAC3_DEMUXER
  596. AVInputFormat eac3_demuxer = {
  597. "eac3",
  598. NULL_IF_CONFIG_SMALL("raw E-AC-3"),
  599. 0,
  600. eac3_probe,
  601. ff_raw_audio_read_header,
  602. ff_raw_read_partial_packet,
  603. .flags= AVFMT_GENERIC_INDEX,
  604. .extensions = "eac3",
  605. .value = CODEC_ID_EAC3,
  606. };
  607. #endif
  608. #if CONFIG_EAC3_MUXER
  609. AVOutputFormat eac3_muxer = {
  610. "eac3",
  611. NULL_IF_CONFIG_SMALL("raw E-AC-3"),
  612. "audio/x-eac3",
  613. "eac3",
  614. 0,
  615. CODEC_ID_EAC3,
  616. CODEC_ID_NONE,
  617. NULL,
  618. ff_raw_write_packet,
  619. .flags= AVFMT_NOTIMESTAMPS,
  620. };
  621. #endif
  622. #if CONFIG_GSM_DEMUXER
  623. AVInputFormat gsm_demuxer = {
  624. "gsm",
  625. NULL_IF_CONFIG_SMALL("raw GSM"),
  626. 0,
  627. NULL,
  628. ff_raw_audio_read_header,
  629. ff_raw_read_partial_packet,
  630. .flags= AVFMT_GENERIC_INDEX,
  631. .extensions = "gsm",
  632. .value = CODEC_ID_GSM,
  633. };
  634. #endif
  635. #if CONFIG_H261_DEMUXER
  636. AVInputFormat h261_demuxer = {
  637. "h261",
  638. NULL_IF_CONFIG_SMALL("raw H.261"),
  639. 0,
  640. h261_probe,
  641. ff_raw_video_read_header,
  642. ff_raw_read_partial_packet,
  643. .flags= AVFMT_GENERIC_INDEX,
  644. .extensions = "h261",
  645. .value = CODEC_ID_H261,
  646. };
  647. #endif
  648. #if CONFIG_H261_MUXER
  649. AVOutputFormat h261_muxer = {
  650. "h261",
  651. NULL_IF_CONFIG_SMALL("raw H.261"),
  652. "video/x-h261",
  653. "h261",
  654. 0,
  655. CODEC_ID_NONE,
  656. CODEC_ID_H261,
  657. NULL,
  658. ff_raw_write_packet,
  659. .flags= AVFMT_NOTIMESTAMPS,
  660. };
  661. #endif
  662. #if CONFIG_H263_DEMUXER
  663. AVInputFormat h263_demuxer = {
  664. "h263",
  665. NULL_IF_CONFIG_SMALL("raw H.263"),
  666. 0,
  667. h263_probe,
  668. ff_raw_video_read_header,
  669. ff_raw_read_partial_packet,
  670. .flags= AVFMT_GENERIC_INDEX,
  671. // .extensions = "h263", //FIXME remove after writing mpeg4_probe
  672. .value = CODEC_ID_H263,
  673. };
  674. #endif
  675. #if CONFIG_H263_MUXER
  676. AVOutputFormat h263_muxer = {
  677. "h263",
  678. NULL_IF_CONFIG_SMALL("raw H.263"),
  679. "video/x-h263",
  680. "h263",
  681. 0,
  682. CODEC_ID_NONE,
  683. CODEC_ID_H263,
  684. NULL,
  685. ff_raw_write_packet,
  686. .flags= AVFMT_NOTIMESTAMPS,
  687. };
  688. #endif
  689. #if CONFIG_H264_DEMUXER
  690. AVInputFormat h264_demuxer = {
  691. "h264",
  692. NULL_IF_CONFIG_SMALL("raw H.264 video format"),
  693. 0,
  694. h264_probe,
  695. ff_raw_video_read_header,
  696. ff_raw_read_partial_packet,
  697. .flags= AVFMT_GENERIC_INDEX,
  698. .extensions = "h26l,h264,264", //FIXME remove after writing mpeg4_probe
  699. .value = CODEC_ID_H264,
  700. };
  701. #endif
  702. #if CONFIG_H264_MUXER
  703. AVOutputFormat h264_muxer = {
  704. "h264",
  705. NULL_IF_CONFIG_SMALL("raw H.264 video format"),
  706. NULL,
  707. "h264",
  708. 0,
  709. CODEC_ID_NONE,
  710. CODEC_ID_H264,
  711. NULL,
  712. ff_raw_write_packet,
  713. .flags= AVFMT_NOTIMESTAMPS,
  714. };
  715. #endif
  716. #if CONFIG_CAVSVIDEO_MUXER
  717. AVOutputFormat cavsvideo_muxer = {
  718. "cavsvideo",
  719. NULL_IF_CONFIG_SMALL("raw Chinese AVS video"),
  720. NULL,
  721. "cavs",
  722. 0,
  723. CODEC_ID_NONE,
  724. CODEC_ID_CAVS,
  725. NULL,
  726. ff_raw_write_packet,
  727. .flags= AVFMT_NOTIMESTAMPS,
  728. };
  729. #endif
  730. #if CONFIG_M4V_DEMUXER
  731. AVInputFormat m4v_demuxer = {
  732. "m4v",
  733. NULL_IF_CONFIG_SMALL("raw MPEG-4 video format"),
  734. 0,
  735. mpeg4video_probe, /** probing for MPEG-4 data */
  736. ff_raw_video_read_header,
  737. ff_raw_read_partial_packet,
  738. .flags= AVFMT_GENERIC_INDEX,
  739. .extensions = "m4v",
  740. .value = CODEC_ID_MPEG4,
  741. };
  742. #endif
  743. #if CONFIG_M4V_MUXER
  744. AVOutputFormat m4v_muxer = {
  745. "m4v",
  746. NULL_IF_CONFIG_SMALL("raw MPEG-4 video format"),
  747. NULL,
  748. "m4v",
  749. 0,
  750. CODEC_ID_NONE,
  751. CODEC_ID_MPEG4,
  752. NULL,
  753. ff_raw_write_packet,
  754. .flags= AVFMT_NOTIMESTAMPS,
  755. };
  756. #endif
  757. #if CONFIG_MJPEG_DEMUXER
  758. AVInputFormat mjpeg_demuxer = {
  759. "mjpeg",
  760. NULL_IF_CONFIG_SMALL("raw MJPEG video"),
  761. 0,
  762. NULL,
  763. ff_raw_video_read_header,
  764. ff_raw_read_partial_packet,
  765. .flags= AVFMT_GENERIC_INDEX,
  766. .extensions = "mjpg,mjpeg",
  767. .value = CODEC_ID_MJPEG,
  768. };
  769. #endif
  770. #if CONFIG_MJPEG_MUXER
  771. AVOutputFormat mjpeg_muxer = {
  772. "mjpeg",
  773. NULL_IF_CONFIG_SMALL("raw MJPEG video"),
  774. "video/x-mjpeg",
  775. "mjpg,mjpeg",
  776. 0,
  777. CODEC_ID_NONE,
  778. CODEC_ID_MJPEG,
  779. NULL,
  780. ff_raw_write_packet,
  781. .flags= AVFMT_NOTIMESTAMPS,
  782. };
  783. #endif
  784. #if CONFIG_MLP_DEMUXER
  785. AVInputFormat mlp_demuxer = {
  786. "mlp",
  787. NULL_IF_CONFIG_SMALL("raw MLP"),
  788. 0,
  789. NULL,
  790. ff_raw_audio_read_header,
  791. ff_raw_read_partial_packet,
  792. .flags= AVFMT_GENERIC_INDEX,
  793. .extensions = "mlp",
  794. .value = CODEC_ID_MLP,
  795. };
  796. #endif
  797. #if CONFIG_MLP_MUXER
  798. AVOutputFormat mlp_muxer = {
  799. "mlp",
  800. NULL_IF_CONFIG_SMALL("raw MLP"),
  801. NULL,
  802. "mlp",
  803. 0,
  804. CODEC_ID_MLP,
  805. CODEC_ID_NONE,
  806. NULL,
  807. ff_raw_write_packet,
  808. .flags= AVFMT_NOTIMESTAMPS,
  809. };
  810. #endif
  811. #if CONFIG_SRT_MUXER
  812. AVOutputFormat srt_muxer = {
  813. .name = "srt",
  814. .long_name = NULL_IF_CONFIG_SMALL("SubRip subtitle format"),
  815. .mime_type = "application/x-subrip",
  816. .extensions = "srt",
  817. .write_packet = ff_raw_write_packet,
  818. .flags = AVFMT_NOTIMESTAMPS,
  819. .subtitle_codec = CODEC_ID_SRT,
  820. };
  821. #endif
  822. #if CONFIG_TRUEHD_DEMUXER
  823. AVInputFormat truehd_demuxer = {
  824. "truehd",
  825. NULL_IF_CONFIG_SMALL("raw TrueHD"),
  826. 0,
  827. NULL,
  828. ff_raw_audio_read_header,
  829. ff_raw_read_partial_packet,
  830. .flags= AVFMT_GENERIC_INDEX,
  831. .extensions = "thd",
  832. .value = CODEC_ID_TRUEHD,
  833. };
  834. #endif
  835. #if CONFIG_TRUEHD_MUXER
  836. AVOutputFormat truehd_muxer = {
  837. "truehd",
  838. NULL_IF_CONFIG_SMALL("raw TrueHD"),
  839. NULL,
  840. "thd",
  841. 0,
  842. CODEC_ID_TRUEHD,
  843. CODEC_ID_NONE,
  844. NULL,
  845. ff_raw_write_packet,
  846. .flags= AVFMT_NOTIMESTAMPS,
  847. };
  848. #endif
  849. #if CONFIG_MPEG1VIDEO_MUXER
  850. AVOutputFormat mpeg1video_muxer = {
  851. "mpeg1video",
  852. NULL_IF_CONFIG_SMALL("raw MPEG-1 video"),
  853. "video/x-mpeg",
  854. "mpg,mpeg,m1v",
  855. 0,
  856. CODEC_ID_NONE,
  857. CODEC_ID_MPEG1VIDEO,
  858. NULL,
  859. ff_raw_write_packet,
  860. .flags= AVFMT_NOTIMESTAMPS,
  861. };
  862. #endif
  863. #if CONFIG_MPEG2VIDEO_MUXER
  864. AVOutputFormat mpeg2video_muxer = {
  865. "mpeg2video",
  866. NULL_IF_CONFIG_SMALL("raw MPEG-2 video"),
  867. NULL,
  868. "m2v",
  869. 0,
  870. CODEC_ID_NONE,
  871. CODEC_ID_MPEG2VIDEO,
  872. NULL,
  873. ff_raw_write_packet,
  874. .flags= AVFMT_NOTIMESTAMPS,
  875. };
  876. #endif
  877. #if CONFIG_MPEGVIDEO_DEMUXER
  878. AVInputFormat mpegvideo_demuxer = {
  879. "mpegvideo",
  880. NULL_IF_CONFIG_SMALL("raw MPEG video"),
  881. 0,
  882. mpegvideo_probe,
  883. ff_raw_video_read_header,
  884. ff_raw_read_partial_packet,
  885. .flags= AVFMT_GENERIC_INDEX,
  886. .value = CODEC_ID_MPEG1VIDEO,
  887. };
  888. #endif
  889. #if CONFIG_CAVSVIDEO_DEMUXER
  890. AVInputFormat cavsvideo_demuxer = {
  891. "cavsvideo",
  892. NULL_IF_CONFIG_SMALL("raw Chinese AVS video"),
  893. 0,
  894. cavsvideo_probe,
  895. ff_raw_video_read_header,
  896. ff_raw_read_partial_packet,
  897. .flags= AVFMT_GENERIC_INDEX,
  898. .value = CODEC_ID_CAVS,
  899. };
  900. #endif
  901. #if CONFIG_NULL_MUXER
  902. AVOutputFormat null_muxer = {
  903. "null",
  904. NULL_IF_CONFIG_SMALL("raw null video format"),
  905. NULL,
  906. NULL,
  907. 0,
  908. AV_NE(CODEC_ID_PCM_S16BE, CODEC_ID_PCM_S16LE),
  909. CODEC_ID_RAWVIDEO,
  910. NULL,
  911. null_write_packet,
  912. .flags = AVFMT_NOFILE | AVFMT_RAWPICTURE | AVFMT_NOTIMESTAMPS,
  913. };
  914. #endif
  915. #if CONFIG_RAWVIDEO_DEMUXER
  916. AVInputFormat rawvideo_demuxer = {
  917. "rawvideo",
  918. NULL_IF_CONFIG_SMALL("raw video format"),
  919. 0,
  920. NULL,
  921. raw_read_header,
  922. rawvideo_read_packet,
  923. .flags= AVFMT_GENERIC_INDEX,
  924. .extensions = "yuv,cif,qcif,rgb",
  925. .value = CODEC_ID_RAWVIDEO,
  926. };
  927. #endif
  928. #if CONFIG_RAWVIDEO_MUXER
  929. AVOutputFormat rawvideo_muxer = {
  930. "rawvideo",
  931. NULL_IF_CONFIG_SMALL("raw video format"),
  932. NULL,
  933. "yuv,rgb",
  934. 0,
  935. CODEC_ID_NONE,
  936. CODEC_ID_RAWVIDEO,
  937. NULL,
  938. ff_raw_write_packet,
  939. .flags= AVFMT_NOTIMESTAMPS,
  940. };
  941. #endif
  942. #if CONFIG_SHORTEN_DEMUXER
  943. AVInputFormat shorten_demuxer = {
  944. "shn",
  945. NULL_IF_CONFIG_SMALL("raw Shorten"),
  946. 0,
  947. NULL,
  948. ff_raw_audio_read_header,
  949. ff_raw_read_partial_packet,
  950. .flags= AVFMT_GENERIC_INDEX,
  951. .extensions = "shn",
  952. .value = CODEC_ID_SHORTEN,
  953. };
  954. #endif
  955. #if CONFIG_VC1_DEMUXER
  956. AVInputFormat vc1_demuxer = {
  957. "vc1",
  958. NULL_IF_CONFIG_SMALL("raw VC-1"),
  959. 0,
  960. NULL /* vc1_probe */,
  961. ff_raw_video_read_header,
  962. ff_raw_read_partial_packet,
  963. .extensions = "vc1",
  964. .value = CODEC_ID_VC1,
  965. };
  966. #endif
  967. /* PCM formats */
  968. #define PCMINPUTDEF(name, long_name, ext, codec) \
  969. AVInputFormat pcm_ ## name ## _demuxer = {\
  970. #name,\
  971. NULL_IF_CONFIG_SMALL(long_name),\
  972. 0,\
  973. NULL,\
  974. raw_read_header,\
  975. raw_read_packet,\
  976. NULL,\
  977. pcm_read_seek,\
  978. .flags= AVFMT_GENERIC_INDEX,\
  979. .extensions = ext,\
  980. .value = codec,\
  981. };
  982. #define PCMOUTPUTDEF(name, long_name, ext, codec) \
  983. AVOutputFormat pcm_ ## name ## _muxer = {\
  984. #name,\
  985. NULL_IF_CONFIG_SMALL(long_name),\
  986. NULL,\
  987. ext,\
  988. 0,\
  989. codec,\
  990. CODEC_ID_NONE,\
  991. NULL,\
  992. ff_raw_write_packet,\
  993. .flags= AVFMT_NOTIMESTAMPS,\
  994. };
  995. #if !CONFIG_MUXERS && CONFIG_DEMUXERS
  996. #define PCMDEF(name, long_name, ext, codec) \
  997. PCMINPUTDEF(name, long_name, ext, codec)
  998. #elif CONFIG_MUXERS && !CONFIG_DEMUXERS
  999. #define PCMDEF(name, long_name, ext, codec) \
  1000. PCMOUTPUTDEF(name, long_name, ext, codec)
  1001. #elif CONFIG_MUXERS && CONFIG_DEMUXERS
  1002. #define PCMDEF(name, long_name, ext, codec) \
  1003. PCMINPUTDEF(name, long_name, ext, codec)\
  1004. PCMOUTPUTDEF(name, long_name, ext, codec)
  1005. #else
  1006. #define PCMDEF(name, long_name, ext, codec)
  1007. #endif
  1008. #if HAVE_BIGENDIAN
  1009. #define BE_DEF(s) s
  1010. #define LE_DEF(s) NULL
  1011. #else
  1012. #define BE_DEF(s) NULL
  1013. #define LE_DEF(s) s
  1014. #endif
  1015. PCMDEF(f64be, "PCM 64 bit floating-point big-endian format",
  1016. NULL, CODEC_ID_PCM_F64BE)
  1017. PCMDEF(f64le, "PCM 64 bit floating-point little-endian format",
  1018. NULL, CODEC_ID_PCM_F64LE)
  1019. PCMDEF(f32be, "PCM 32 bit floating-point big-endian format",
  1020. NULL, CODEC_ID_PCM_F32BE)
  1021. PCMDEF(f32le, "PCM 32 bit floating-point little-endian format",
  1022. NULL, CODEC_ID_PCM_F32LE)
  1023. PCMDEF(s32be, "PCM signed 32 bit big-endian format",
  1024. NULL, CODEC_ID_PCM_S32BE)
  1025. PCMDEF(s32le, "PCM signed 32 bit little-endian format",
  1026. NULL, CODEC_ID_PCM_S32LE)
  1027. PCMDEF(s24be, "PCM signed 24 bit big-endian format",
  1028. NULL, CODEC_ID_PCM_S24BE)
  1029. PCMDEF(s24le, "PCM signed 24 bit little-endian format",
  1030. NULL, CODEC_ID_PCM_S24LE)
  1031. PCMDEF(s16be, "PCM signed 16 bit big-endian format",
  1032. BE_DEF("sw"), CODEC_ID_PCM_S16BE)
  1033. PCMDEF(s16le, "PCM signed 16 bit little-endian format",
  1034. LE_DEF("sw"), CODEC_ID_PCM_S16LE)
  1035. PCMDEF(s8, "PCM signed 8 bit format",
  1036. "sb", CODEC_ID_PCM_S8)
  1037. PCMDEF(u32be, "PCM unsigned 32 bit big-endian format",
  1038. NULL, CODEC_ID_PCM_U32BE)
  1039. PCMDEF(u32le, "PCM unsigned 32 bit little-endian format",
  1040. NULL, CODEC_ID_PCM_U32LE)
  1041. PCMDEF(u24be, "PCM unsigned 24 bit big-endian format",
  1042. NULL, CODEC_ID_PCM_U24BE)
  1043. PCMDEF(u24le, "PCM unsigned 24 bit little-endian format",
  1044. NULL, CODEC_ID_PCM_U24LE)
  1045. PCMDEF(u16be, "PCM unsigned 16 bit big-endian format",
  1046. BE_DEF("uw"), CODEC_ID_PCM_U16BE)
  1047. PCMDEF(u16le, "PCM unsigned 16 bit little-endian format",
  1048. LE_DEF("uw"), CODEC_ID_PCM_U16LE)
  1049. PCMDEF(u8, "PCM unsigned 8 bit format",
  1050. "ub", CODEC_ID_PCM_U8)
  1051. PCMDEF(alaw, "PCM A-law format",
  1052. "al", CODEC_ID_PCM_ALAW)
  1053. PCMDEF(mulaw, "PCM mu-law format",
  1054. "ul", CODEC_ID_PCM_MULAW)