Mercurial > libavformat.hg
diff raw.c @ 482:0fdc96c2f2fe libavformat
sweeping change from -EIO -> AVERROR_IO
author | melanson |
---|---|
date | Sat, 19 Jun 2004 03:59:34 +0000 |
parents | e0a66a870b7f |
children | f4e9e55f703c |
line wrap: on
line diff
--- a/raw.c Fri Jun 18 03:03:32 2004 +0000 +++ b/raw.c Sat Jun 19 03:59:34 2004 +0000 @@ -87,13 +87,13 @@ size= RAW_PACKET_SIZE; if (av_new_packet(pkt, size) < 0) - return -EIO; + return AVERROR_IO; pkt->stream_index = 0; ret = get_buffer(&s->pb, pkt->data, size); if (ret <= 0) { av_free_packet(pkt); - return -EIO; + return AVERROR_IO; } /* note: we need to modify the packet size here to handle the last packet */ @@ -108,13 +108,13 @@ size = RAW_PACKET_SIZE; if (av_new_packet(pkt, size) < 0) - return -EIO; + return AVERROR_IO; pkt->stream_index = 0; ret = get_partial_buffer(&s->pb, pkt->data, size); if (ret <= 0) { av_free_packet(pkt); - return -EIO; + return AVERROR_IO; } pkt->size = ret; return ret; @@ -532,7 +532,7 @@ av_abort(); if (av_new_packet(pkt, packet_size) < 0) - return -EIO; + return AVERROR_IO; pkt->stream_index = 0; #if 0 @@ -543,7 +543,7 @@ #endif if (ret != pkt->size) { av_free_packet(pkt); - return -EIO; + return AVERROR_IO; } else { return 0; } @@ -601,6 +601,73 @@ }; #endif //CONFIG_ENCODERS +static int adx_probe(AVProbeData *p) +{ + if (is_adx(p->buf,p->buf_size)) + return 100; + return 0; +} + +static int adx_read_header(AVFormatContext *s, + AVFormatParameters *ap) +{ + AVStream *st; + + st = av_new_stream(s, 0); + if (!st) + return AVERROR_NOMEM; + + st->codec.codec_type = CODEC_TYPE_AUDIO; + st->codec.codec_id = CODEC_ID_ADPCM_ADX; + /* the parameters will be extracted from the compressed bitstream */ + return 0; +} + +AVInputFormat adx_iformat = { + "adx", + "SEGA CRI ADX audio", + 0, + adx_probe, + adx_read_header, + raw_read_packet, + raw_read_close, + .extensions = "adx", //FIXME remove after writing mpeg4_probe +}; + +#ifdef CONFIG_ENCODERS + +static int adx_write_trailer(AVFormatContext *s) +{ + ByteIOContext *pb = &s->pb; + offset_t file_size; + + if (!url_is_streamed(&s->pb)) { + /* update file size */ + file_size = url_ftell(pb); + url_fseek(pb, 0, SEEK_SET); + put_be32(pb, (uint32_t)(file_size - 8)); + url_fseek(pb, file_size, SEEK_SET); + + put_flush_packet(pb); + } + return 0; +} + +AVOutputFormat adx_oformat = { + "adx", + "SEGA CRI ADX audio", + NULL, + "adx", + 0, + CODEC_ID_ADPCM_ADX, + 0, + raw_write_header, + raw_write_packet, + raw_write_trailer, +}; +#endif //CONFIG_ENCODERS + + #ifndef CONFIG_ENCODERS #define av_register_output_format(format) #endif @@ -651,5 +718,9 @@ av_register_output_format(&rawvideo_oformat); av_register_output_format(&null_oformat); + + av_register_input_format(&adx_iformat); + av_register_output_format(&adx_oformat); + return 0; }