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.

717 lines
17KB

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