X-Git-Url: https://cgit.sxemacs.org/?a=blobdiff_plain;f=src%2Fmedia%2Fmedia.c;h=51d53d373093c186d03576eba0a458ab4aaf943e;hb=56e1696c05484849c12dd4d3a5c3c015c895ee4a;hp=715db6f4ab99dc1c70a7d7d4fed4369d49804310;hpb=ca52abdc354d49e06fd5275eb49b5b98da12a7f3;p=sxemacs diff --git a/src/media/media.c b/src/media/media.c index 715db6f..51d53d3 100644 --- a/src/media/media.c +++ b/src/media/media.c @@ -21,6 +21,7 @@ along with this program. If not, see . */ #include #include "lisp.h" +#include #include "buffer.h" @@ -49,13 +50,12 @@ along with this program. If not, see . */ #endif Lisp_Object Qmedia_streamp; -Lisp_Object Qunknown; Lisp_Object Qunavailable; /* media property syms */ Lisp_Object Qdemux, Qcodec, Qnchannels, Qsamplerate; Lisp_Object Qbitrate, Qabitrate, Qvbitrate; -Lisp_Object Qwidth, Qheight, Qaspect, Qdriver, Qkind, Qfifo, Quri, Qtype; -Lisp_Object Qaudio, Qvideo, Qimage; +Lisp_Object Qaspect, Qdriver, Qkind, Qfifo, Quri; +Lisp_Object Qaudio, Qvideo; static void determine_stream_type(Lisp_Media_Stream *ms, media_driver); static void media_stream_print(Lisp_Object, Lisp_Object, int); @@ -1299,6 +1299,47 @@ sxe_msf_FLT_down(void *d, void *s, size_t len) return; } +DEFINE_MEDIA_SAMPLE_FORMAT_SIMPLE(sxe_msf_DBL); + +static void +sxe_msf_DBL_up(void *d, void *s, size_t len) +{ + /* convert double samples to internal format (S24in32) */ + size_t i; + int32_t *dst = d; + double *src = s; + + /* len is the number of samples (== #frame * #channels) */ + MEDIA_DEBUG_FMT("upsampling DBL->internal: %u samples\n", len); + + for (i = 0; i < len; i++) { + dst[i] = (int32_t)(src[i] * SXE_MAX_S24); + } + MEDIA_DEBUG_FMT("s00:%f d00:%d s01:%f d01:%d\n", + src[0], dst[0], src[1], dst[1]); + + return; +} + +static void +sxe_msf_DBL_down(void *d, void *s, size_t len) +{ + /* convert samples from internal format (S24in32) to double */ + int i; + float *dst = d; + int32_t *src = s; + + /* len is the number of samples (== #frame * #channels) */ + MEDIA_DEBUG_FMT("downsampling internal->DBL: %u samples\n", len); + + for (i = len-1; i >= 0; i--) { + dst[i] = (double)(src[i]) / SXE_MAX_S24; + } + MEDIA_DEBUG_FMT("d00:%f d01:%f\n", dst[0], dst[1]); + + return; +} + /* `effects' */ DEFINE_MEDIA_SAMPLE_EFFECT(sxe_mse_1ch_to_2ch, _sxe_mse_1ch_to_2ch);