Changes in [909:c7abe5d46b50:910:f4f8118b46ff] in mediastreamer2


Ignore:
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • configure.ac

    r856 r906  
    456456        *) AC_MSG_ERROR(bad value ${enableval} for --disable-gsm) ;; 
    457457      esac],[gsm=true]) 
    458  
     458       
    459459if test x$gsm = xtrue; then 
    460460 
     
    559559AM_CONDITIONAL(BUILD_V4L, test x$found_v4l = xyes ) 
    560560 
     561AC_ARG_ENABLE(libv4l, 
     562      [  --disable-libv4l    Disable usage of libv4l, really discouraged], 
     563      [case "${enableval}" in 
     564        yes) libv4l=true ;; 
     565        no)  libv4l=false ;; 
     566        *) AC_MSG_ERROR(bad value ${enableval} for --disable-libv4l) ;; 
     567      esac],[libv4l=true])b 
     568 
    561569PKG_CHECK_MODULES(LIBV4L2, libv4l2, 
    562         [AC_DEFINE(HAVE_LIBV4L2,1,[Defined if we have libv4l2])] 
     570        [AC_DEFINE(HAVE_LIBV4L2,1,[Defined if we have libv4l2]) 
     571        have_libv4l2=yes] 
    563572        ,[echo "No libv4l2 found."] 
    564573) 
    565574PKG_CHECK_MODULES(LIBV4L1, libv4l1, 
    566         [AC_DEFINE(HAVE_LIBV4L1,1,[Defined if we have libv4l1])] 
     575        [AC_DEFINE(HAVE_LIBV4L1,1,[Defined if we have libv4l1]) 
     576        have_libv4l1=yes] 
    567577        ,[echo "No libv4l1 found."] 
    568578) 
     579 
     580if test "$found_v4l" = "yes" && test "$have_libv4l2" != "yes" ; then 
     581        if test "$libv4l" = "no" ; then 
     582                AC_MSG_ERROR( 
     583[ 
     584Missing libv4l2. It is highly recommended to build with 
     585libv4l2 headers and library. Many camera will won't work or will crash 
     586your application if libv4l2 is not installed. 
     587If you know what you are doing, you can use --disable-libv4l to disable 
     588this check. 
     589]) 
     590        fi 
     591fi 
    569592 
    570593dnl ################################################## 
  • src/gsm.c

    r909 r907  
    2525        gsm state; 
    2626        uint32_t ts; 
     27        int ptime; 
    2728        MSBufferizer *bufferizer; 
    2829} EncState; 
     30 
     31static int enc_add_fmtp(MSFilter *f, void *arg){ 
     32        const char *fmtp=(const char *)arg; 
     33        EncState *s=(EncState*)f->data; 
     34        char tmp[30]; 
     35        if (fmtp_get_value(fmtp,"ptime",tmp,sizeof(tmp))){ 
     36                int ptime = atoi(tmp); 
     37                switch (ptime) { 
     38                case 20: 
     39                case 40: 
     40                case 60: 
     41                case 80: 
     42                case 100: 
     43                        s->ptime = atoi(tmp); 
     44                        break; 
     45                default: 
     46                        ms_warning("MSGsmEnc: unsupported ptime [%i] using default",ptime); 
     47                } 
     48                ms_message("MSGsmEnc: got ptime=%i using [%i]",ptime,s->ptime); 
     49        } 
     50        return 0; 
     51} 
    2952 
    3053static void enc_init(MSFilter *f){ 
     
    3255        s->state=gsm_create(); 
    3356        s->ts=0; 
     57        s->ptime=20; 
    3458        s->bufferizer=ms_bufferizer_new(); 
    3559        f->data=s; 
     
    4872        EncState *s=(EncState*)f->data; 
    4973        mblk_t *im; 
    50         int16_t buf[320]; 
     74        unsigned int unitary_buff_size = sizeof(int16_t)*160; 
     75        unsigned int buff_size = unitary_buff_size*s->ptime/20; 
     76        int16_t* buff; 
     77        int offset; 
    5178         
    5279        while((im=ms_queue_get(f->inputs[0]))!=NULL){ 
    5380                ms_bufferizer_put(s->bufferizer,im); 
    5481        } 
    55         while(ms_bufferizer_read(s->bufferizer,(uint8_t*)buf,sizeof(buf))==sizeof(buf)) { 
    56                 mblk_t *om=allocb(66,0); 
    57                 gsm_encode(s->state,(gsm_signal*)buf,(gsm_byte*)om->b_wptr); 
    58                 om->b_wptr+=33; 
    59                 gsm_encode(s->state,(gsm_signal*)(buf+160),(gsm_byte*)om->b_wptr); 
    60                 om->b_wptr+=33; 
     82        while(ms_bufferizer_get_avail(s->bufferizer) >= buff_size) { 
     83                buff = alloca(buff_size); 
     84                ms_bufferizer_read(s->bufferizer,(uint8_t*)buff,buff_size); 
     85                mblk_t *om=allocb(33*s->ptime/20,0); 
     86 
     87                for (offset=0;offset<buff_size;offset+=unitary_buff_size) { 
     88                        gsm_encode(s->state,(gsm_signal*)&buff[offset/sizeof(int16_t)],(gsm_byte*)om->b_wptr); 
     89                        om->b_wptr+=33; 
     90                } 
    6191                mblk_set_timestamp_info(om,s->ts); 
    6292                ms_queue_put(f->outputs[0],om); 
    63                 s->ts+=sizeof(buf)/2; 
    64         } 
    65 } 
     93                s->ts+=buff_size/sizeof(int16_t)/*sizeof(buf)/2*/; 
     94        } 
     95} 
     96static MSFilterMethod enc_methods[]={ 
     97        {       MS_FILTER_ADD_FMTP              ,       enc_add_fmtp}, 
     98        {       0                               ,       NULL            } 
     99}; 
    66100 
    67101#ifdef _MSC_VER 
     
    80114        NULL, 
    81115        enc_uninit, 
    82         NULL 
     116        enc_methods 
    83117}; 
    84118 
     
    96130        .process=enc_process, 
    97131        .uninit=enc_uninit, 
     132        .methods = enc_methods 
    98133}; 
    99134 
     
    117152 
    118153        while((im=ms_queue_get(f->inputs[0]))!=NULL){ 
    119                 om=allocb(frsz,0); 
    120                 if (gsm_decode(s,(gsm_byte*)im->b_rptr,(gsm_signal*)om->b_wptr)<0){ 
    121                         ms_warning("gsm_decode error!"); 
    122                         freemsg(om); 
    123                 }else{ 
    124                         om->b_wptr+=frsz; 
    125                         ms_queue_put(f->outputs[0],om); 
     154                for (;(im->b_wptr-im->b_rptr)>=33;im->b_rptr+=33) { 
     155                        om=allocb(frsz,0); 
     156                        if (gsm_decode(s,(gsm_byte*)im->b_rptr,(gsm_signal*)om->b_wptr)<0){ 
     157                                ms_warning("gsm_decode error!"); 
     158                                freemsg(om); 
     159                        }else{ 
     160                                om->b_wptr+=frsz; 
     161                                ms_queue_put(f->outputs[0],om); 
     162                        } 
    126163                } 
    127164                freemsg(im); 
Note: See TracChangeset for help on using the changeset viewer.