]> code.delx.au - pulseaudio/commitdiff
add pa_sound_file_too_big_to_cache()
authorLennart Poettering <lennart@poettering.net>
Fri, 16 Sep 2005 00:04:29 +0000 (00:04 +0000)
committerLennart Poettering <lennart@poettering.net>
Fri, 16 Sep 2005 00:04:29 +0000 (00:04 +0000)
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@355 fefdeb5f-60dc-0310-8127-8f9354f1896f

polyp/sound-file.c
polyp/sound-file.h

index f16d326a1005514d52d9a28117744e1d154d617d..326ddd8bf605e9a136da2b7962e07d8c29bfa18a 100644 (file)
@@ -75,7 +75,7 @@ int pa_sound_file_load(const char *fname, struct pa_sample_spec *ss, struct pa_m
     }
     
     if ((l = pa_frame_size(ss)*sfinfo.frames) > MAX_FILE_SIZE) {
-        pa_log(__FILE__": File to large\n");
+        pa_log(__FILE__": File too large\n");
         goto finish;
     }
 
@@ -102,3 +102,38 @@ finish:
     return ret;
     
 }
+
+int pa_sound_file_too_big_to_cache(const char *fname) {
+    SNDFILE*sf = NULL;
+    SF_INFO sfinfo;
+    struct pa_sample_spec ss;
+
+    if (!(sf = sf_open(fname, SFM_READ, &sfinfo))) {
+        pa_log(__FILE__": Failed to open file %s\n", fname);
+        return 0;
+    }
+
+    sf_close(sf);
+
+    switch (sfinfo.format & SF_FORMAT_SUBMASK) {
+        case SF_FORMAT_FLOAT:
+        case SF_FORMAT_DOUBLE:
+            /* Only float and double need a special case. */
+            ss.format = PA_SAMPLE_FLOAT32NE;
+            break;
+        default:
+            /* Everything else is cleanly converted to signed 16 bit. */
+            ss.format = PA_SAMPLE_S16NE;
+            break;
+    }
+
+    ss.rate = sfinfo.samplerate;
+    ss.channels = sfinfo.channels;
+
+    if ((pa_frame_size(&ss) * sfinfo.frames) > MAX_FILE_SIZE) {
+        pa_log(__FILE__": File too large %s\n", fname);
+        return 1;
+    }
+
+    return 0;
+}
index e53598535f3ab48f8c4a309ccddd45f7d62d325b..855e688322c8fc396a75b0d2629b142c4dec630b 100644 (file)
@@ -27,4 +27,6 @@
 
 int pa_sound_file_load(const char *fname, struct pa_sample_spec *ss, struct pa_memchunk *chunk, struct pa_memblock_stat *s);
 
+int pa_sound_file_too_big_to_cache(const char *fname);
+
 #endif