Mercurial > libavformat.hg
comparison raw.c @ 6445:4aaed59641ff libavformat
move pcm demuxers to their own file
| author | aurel |
|---|---|
| date | Mon, 30 Aug 2010 21:17:34 +0000 |
| parents | 9a1a187b1de7 |
| children | 659a7e022950 |
comparison
equal
deleted
inserted
replaced
| 6444:505f0bb17a5d | 6445:4aaed59641ff |
|---|---|
| 34 } | 34 } |
| 35 #endif | 35 #endif |
| 36 | 36 |
| 37 #if CONFIG_DEMUXERS | 37 #if CONFIG_DEMUXERS |
| 38 /* raw input */ | 38 /* raw input */ |
| 39 static int raw_read_header(AVFormatContext *s, AVFormatParameters *ap) | 39 int ff_raw_read_header(AVFormatContext *s, AVFormatParameters *ap) |
| 40 { | 40 { |
| 41 AVStream *st; | 41 AVStream *st; |
| 42 enum CodecID id; | 42 enum CodecID id; |
| 43 | 43 |
| 44 st = av_new_stream(s, 0); | 44 st = av_new_stream(s, 0); |
| 79 } | 79 } |
| 80 return 0; | 80 return 0; |
| 81 } | 81 } |
| 82 | 82 |
| 83 #define RAW_PACKET_SIZE 1024 | 83 #define RAW_PACKET_SIZE 1024 |
| 84 #define RAW_SAMPLES 1024 | |
| 85 | |
| 86 static int raw_read_packet(AVFormatContext *s, AVPacket *pkt) | |
| 87 { | |
| 88 int ret, size, bps; | |
| 89 // AVStream *st = s->streams[0]; | |
| 90 | |
| 91 size= RAW_SAMPLES*s->streams[0]->codec->block_align; | |
| 92 | |
| 93 ret= av_get_packet(s->pb, pkt, size); | |
| 94 | |
| 95 pkt->stream_index = 0; | |
| 96 if (ret < 0) | |
| 97 return ret; | |
| 98 | |
| 99 bps= av_get_bits_per_sample(s->streams[0]->codec->codec_id); | |
| 100 assert(bps); // if false there IS a bug elsewhere (NOT in this function) | |
| 101 pkt->dts= | |
| 102 pkt->pts= pkt->pos*8 / (bps * s->streams[0]->codec->channels); | |
| 103 | |
| 104 return ret; | |
| 105 } | |
| 106 | 84 |
| 107 int ff_raw_read_partial_packet(AVFormatContext *s, AVPacket *pkt) | 85 int ff_raw_read_partial_packet(AVFormatContext *s, AVPacket *pkt) |
| 108 { | 86 { |
| 109 int ret, size; | 87 int ret, size; |
| 110 | 88 |
| 148 return 0; | 126 return 0; |
| 149 } | 127 } |
| 150 #endif | 128 #endif |
| 151 | 129 |
| 152 #if CONFIG_DEMUXERS | 130 #if CONFIG_DEMUXERS |
| 153 int pcm_read_seek(AVFormatContext *s, | |
| 154 int stream_index, int64_t timestamp, int flags) | |
| 155 { | |
| 156 AVStream *st; | |
| 157 int block_align, byte_rate; | |
| 158 int64_t pos, ret; | |
| 159 | |
| 160 st = s->streams[0]; | |
| 161 | |
| 162 block_align = st->codec->block_align ? st->codec->block_align : | |
| 163 (av_get_bits_per_sample(st->codec->codec_id) * st->codec->channels) >> 3; | |
| 164 byte_rate = st->codec->bit_rate ? st->codec->bit_rate >> 3 : | |
| 165 block_align * st->codec->sample_rate; | |
| 166 | |
| 167 if (block_align <= 0 || byte_rate <= 0) | |
| 168 return -1; | |
| 169 if (timestamp < 0) timestamp = 0; | |
| 170 | |
| 171 /* compute the position by aligning it to block_align */ | |
| 172 pos = av_rescale_rnd(timestamp * byte_rate, | |
| 173 st->time_base.num, | |
| 174 st->time_base.den * (int64_t)block_align, | |
| 175 (flags & AVSEEK_FLAG_BACKWARD) ? AV_ROUND_DOWN : AV_ROUND_UP); | |
| 176 pos *= block_align; | |
| 177 | |
| 178 /* recompute exact position */ | |
| 179 st->cur_dts = av_rescale(pos, st->time_base.den, byte_rate * (int64_t)st->time_base.num); | |
| 180 if ((ret = url_fseek(s->pb, pos + s->data_offset, SEEK_SET)) < 0) | |
| 181 return ret; | |
| 182 return 0; | |
| 183 } | |
| 184 | |
| 185 int ff_raw_audio_read_header(AVFormatContext *s, | 131 int ff_raw_audio_read_header(AVFormatContext *s, |
| 186 AVFormatParameters *ap) | 132 AVFormatParameters *ap) |
| 187 { | 133 { |
| 188 AVStream *st = av_new_stream(s, 0); | 134 AVStream *st = av_new_stream(s, 0); |
| 189 if (!st) | 135 if (!st) |
| 527 AVInputFormat rawvideo_demuxer = { | 473 AVInputFormat rawvideo_demuxer = { |
| 528 "rawvideo", | 474 "rawvideo", |
| 529 NULL_IF_CONFIG_SMALL("raw video format"), | 475 NULL_IF_CONFIG_SMALL("raw video format"), |
| 530 0, | 476 0, |
| 531 NULL, | 477 NULL, |
| 532 raw_read_header, | 478 ff_raw_read_header, |
| 533 rawvideo_read_packet, | 479 rawvideo_read_packet, |
| 534 .flags= AVFMT_GENERIC_INDEX, | 480 .flags= AVFMT_GENERIC_INDEX, |
| 535 .extensions = "yuv,cif,qcif,rgb", | 481 .extensions = "yuv,cif,qcif,rgb", |
| 536 .value = CODEC_ID_RAWVIDEO, | 482 .value = CODEC_ID_RAWVIDEO, |
| 537 }; | 483 }; |
| 578 .value = CODEC_ID_VC1, | 524 .value = CODEC_ID_VC1, |
| 579 }; | 525 }; |
| 580 #endif | 526 #endif |
| 581 | 527 |
| 582 /* PCM formats */ | 528 /* PCM formats */ |
| 583 | |
| 584 #define PCMINPUTDEF(name, long_name, ext, codec) \ | |
| 585 AVInputFormat pcm_ ## name ## _demuxer = {\ | |
| 586 #name,\ | |
| 587 NULL_IF_CONFIG_SMALL(long_name),\ | |
| 588 0,\ | |
| 589 NULL,\ | |
| 590 raw_read_header,\ | |
| 591 raw_read_packet,\ | |
| 592 NULL,\ | |
| 593 pcm_read_seek,\ | |
| 594 .flags= AVFMT_GENERIC_INDEX,\ | |
| 595 .extensions = ext,\ | |
| 596 .value = codec,\ | |
| 597 }; | |
| 598 | 529 |
| 599 #define PCMOUTPUTDEF(name, long_name, ext, codec) \ | 530 #define PCMOUTPUTDEF(name, long_name, ext, codec) \ |
| 600 AVOutputFormat pcm_ ## name ## _muxer = {\ | 531 AVOutputFormat pcm_ ## name ## _muxer = {\ |
| 601 #name,\ | 532 #name,\ |
| 602 NULL_IF_CONFIG_SMALL(long_name),\ | 533 NULL_IF_CONFIG_SMALL(long_name),\ |
| 609 ff_raw_write_packet,\ | 540 ff_raw_write_packet,\ |
| 610 .flags= AVFMT_NOTIMESTAMPS,\ | 541 .flags= AVFMT_NOTIMESTAMPS,\ |
| 611 }; | 542 }; |
| 612 | 543 |
| 613 | 544 |
| 614 #if !CONFIG_MUXERS && CONFIG_DEMUXERS | 545 #if CONFIG_MUXERS |
| 615 #define PCMDEF(name, long_name, ext, codec) \ | 546 #define PCMDEF(name, long_name, ext, codec) \ |
| 616 PCMINPUTDEF(name, long_name, ext, codec) | |
| 617 #elif CONFIG_MUXERS && !CONFIG_DEMUXERS | |
| 618 #define PCMDEF(name, long_name, ext, codec) \ | |
| 619 PCMOUTPUTDEF(name, long_name, ext, codec) | |
| 620 #elif CONFIG_MUXERS && CONFIG_DEMUXERS | |
| 621 #define PCMDEF(name, long_name, ext, codec) \ | |
| 622 PCMINPUTDEF(name, long_name, ext, codec)\ | |
| 623 PCMOUTPUTDEF(name, long_name, ext, codec) | 547 PCMOUTPUTDEF(name, long_name, ext, codec) |
| 624 #else | 548 #else |
| 625 #define PCMDEF(name, long_name, ext, codec) | 549 #define PCMDEF(name, long_name, ext, codec) |
| 626 #endif | 550 #endif |
| 627 | 551 |
