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;
 }