---
 libavformat/gsmdec.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/libavformat/gsmdec.c b/libavformat/gsmdec.c
index d13327d..1942ac1 100644
--- a/libavformat/gsmdec.c
+++ b/libavformat/gsmdec.c
@@ -28,12 +28,25 @@
 #define GSM_BLOCK_SIZE    33
 #define GSM_BLOCK_SAMPLES 160
 #define GSM_SAMPLE_RATE   8000
+#define GSM_MAGIC_NUM 0xD
 
 typedef struct GSMDemuxerContext {
     AVClass *class;
     int sample_rate;
 } GSMDemuxerContext;
 
+static int gsm_probe(AVProbeData *p)
+{
+    /* check file size.  */
+    if (p->buf_size < GSM_BLOCK_SIZE)
+        return 0;
+
+    if (((*p->buf & 0xF0)>>4) == GSM_MAGIC_NUM)
+        return AVPROBE_SCORE_MAX ;
+    return 0;
+}
+
+
 static int gsm_read_packet(AVFormatContext *s, AVPacket *pkt)
 {
     int ret, size;
@@ -94,6 +107,7 @@ AVInputFormat ff_gsm_demuxer = {
     .priv_data_size = sizeof(GSMDemuxerContext),
     .read_header    = gsm_read_header,
     .read_packet    = gsm_read_packet,
+    .read_probe     = gsm_probe,
     .flags          = AVFMT_GENERIC_INDEX,
     .extensions     = "gsm",
     .raw_codec_id   = AV_CODEC_ID_GSM,
-- 
1.9.1

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to