diff options
author | Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> | 2009-05-28 13:09:24 +0200 |
---|---|---|
committer | Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> | 2009-05-28 13:09:24 +0200 |
commit | 840955c22672261e9fe77d67a81e5772173cf0dc (patch) | |
tree | a299d1f0713815cc18a396571af795cc1a02031b /gst | |
parent | c07be49896edd98a8560f95961d73eccfa8c7997 (diff) | |
download | gst-plugins-bad-840955c22672261e9fe77d67a81e5772173cf0dc.tar.gz gst-plugins-bad-840955c22672261e9fe77d67a81e5772173cf0dc.tar.bz2 gst-plugins-bad-840955c22672261e9fe77d67a81e5772173cf0dc.zip |
amrparse: consider header size in byte <-> time conversions
Diffstat (limited to 'gst')
-rw-r--r-- | gst/amrparse/gstamrparse.c | 10 | ||||
-rw-r--r-- | gst/amrparse/gstamrparse.h | 1 |
2 files changed, 7 insertions, 4 deletions
diff --git a/gst/amrparse/gstamrparse.c b/gst/amrparse/gstamrparse.c index aeb928e1..5ec0c6c2 100644 --- a/gst/amrparse/gstamrparse.c +++ b/gst/amrparse/gstamrparse.c @@ -309,12 +309,12 @@ gst_amrparse_parse_header (GstAmrParse * amrparse, GST_DEBUG_OBJECT (amrparse, "AMR-WB detected"); amrparse->block_size = block_size_wb; amrparse->wide = TRUE; - *skipsize = 9; + *skipsize = amrparse->header = 9; } else if (!memcmp (data, "#!AMR\n", 6)) { GST_DEBUG_OBJECT (amrparse, "AMR-NB detected"); amrparse->block_size = block_size_nb; amrparse->wide = FALSE; - *skipsize = 6; + *skipsize = amrparse->header = 6; } else return FALSE; @@ -453,6 +453,7 @@ gst_amrparse_start (GstBaseParse * parse) amrparse = GST_AMRPARSE (parse); GST_DEBUG ("start"); amrparse->need_header = TRUE; + amrparse->header = 0; amrparse->sync = TRUE; amrparse->eos = FALSE; amrparse->framecount = 0; @@ -478,6 +479,7 @@ gst_amrparse_stop (GstBaseParse * parse) amrparse = GST_AMRPARSE (parse); GST_DEBUG ("stop"); amrparse->need_header = TRUE; + amrparse->header = 0; amrparse->ts = -1; return TRUE; } @@ -548,7 +550,7 @@ gst_amrparse_convert (GstBaseParse * parse, GST_DEBUG ("converting bytes -> time"); if (amrparse->framecount) { - *dest_value = AMR_FRAME_DURATION * src_value / bpf; + *dest_value = AMR_FRAME_DURATION * (src_value - amrparse->header) / bpf; GST_DEBUG ("conversion result: %lld ms", *dest_value / GST_MSECOND); ret = TRUE; } @@ -557,7 +559,7 @@ gst_amrparse_convert (GstBaseParse * parse, GST_DEBUG ("converting time -> bytes"); if (dest_format == GST_FORMAT_BYTES) { if (amrparse->framecount) { - *dest_value = bpf * src_value / AMR_FRAME_DURATION; + *dest_value = bpf * src_value / AMR_FRAME_DURATION + amrparse->header; GST_DEBUG ("time %lld ms in bytes = %lld", src_value / GST_MSECOND, *dest_value); ret = TRUE; diff --git a/gst/amrparse/gstamrparse.h b/gst/amrparse/gstamrparse.h index e776f295..4cd432e2 100644 --- a/gst/amrparse/gstamrparse.h +++ b/gst/amrparse/gstamrparse.h @@ -61,6 +61,7 @@ struct _GstAmrParse { GstBaseParse element; const gint *block_size; gboolean need_header; + gint header; gboolean wide; gboolean eos; gboolean sync; |