Changeset 1226:c14eba752b62 in roaraudio


Ignore:
Timestamp:
02/25/09 01:44:46 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

moved code to cf_vorbis_encode_*() instaed of close/open/write...

Location:
roard
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • roard/codecfilter_vorbis.c

    r1185 r1226  
    7575// self->outlen               = ROAR_OUTPUT_BUFFER_SAMPLES * s->info.channels * s->info.bits / 8; // optimal size 
    7676#ifdef ROAR_HAVE_LIBVORBISENC 
    77  self->encoding             = 0; 
     77 self->encoding               = 0; 
     78 self->encoder.v_base_quality = 0.3; 
    7879#endif 
    7980 
     
    9091#ifdef ROAR_HAVE_LIBVORBISENC 
    9192  // set up the encoder here 
    92  
    93   memset(&(self->encoder), 0, sizeof(self->encoder)); 
    94  
    95   self->encoding = 1; 
    96  
    97   vorbis_info_init(&(self->encoder.vi)); 
    98   vorbis_comment_init(&(self->encoder.vc)); 
    99   vorbis_comment_add_tag(&(self->encoder.vc), "SERVER", "RoarAudio"); 
    100   vorbis_comment_add_tag(&(self->encoder.vc), "ENCODER", "RoarAudio Vorbis codecfilter"); 
    101  
    102   if( vorbis_encode_init_vbr(&(self->encoder.vi), (long) s->info.channels, (long) s->info.rate, 
    103                                                   self->encoder.v_base_quality) != 0 ) { 
    104    ROAR_ERR("cf_vorbis_open(*): Can not vorbis_encode_init_vbr(*)!"); 
    105    vorbis_info_clear(&(self->encoder.vi)); // TODO: do we need to free vc also? 
    106    free(self); 
    107    return -1; 
    108   } 
    109  
    110   vorbis_analysis_init(&(self->encoder.vd), &(self->encoder.vi)); 
    111   vorbis_block_init(&(self->encoder.vd), &(self->encoder.vb)); 
    112  
    113                                      //  "RA"<<16 + PID<<8 + Stream ID 
    114   ogg_stream_init(&(self->encoder.os), 0x52410000 + ((getpid() & 0xff)<<8) + s->id); 
    115  
     93 if ( cf_vorbis_encode_start(self) == -1 ) { 
     94  free(self); 
     95  return -1; 
     96 } 
    11697#else 
    11798 free(self); 
     
    137118#ifdef ROAR_HAVE_LIBVORBISENC 
    138119 if ( self->encoding ) { 
    139   ogg_stream_clear(&(self->encoder.os)); 
    140   vorbis_block_clear(&(self->encoder.vb)); 
    141   vorbis_dsp_clear(&(self->encoder.vd)); 
    142   vorbis_info_clear(&(self->encoder.vi)); 
     120  cf_vorbis_encode_end(self); 
    143121 } 
    144122#endif 
     
    362340} 
    363341 
    364 #endif 
    365  
     342int cf_vorbis_encode_start  (struct codecfilter_vorbis_inst * self) { 
     343#ifdef ROAR_HAVE_LIBVORBISENC 
     344  memset(&(self->encoder), 0, sizeof(self->encoder)); 
     345 
     346  self->encoding = 1; 
     347 
     348  vorbis_info_init(&(self->encoder.vi)); 
     349  vorbis_comment_init(&(self->encoder.vc)); 
     350  vorbis_comment_add_tag(&(self->encoder.vc), "SERVER", "RoarAudio"); 
     351  vorbis_comment_add_tag(&(self->encoder.vc), "ENCODER", "RoarAudio Vorbis codecfilter"); 
     352 
     353  if( vorbis_encode_init_vbr(&(self->encoder.vi), (long) ROAR_STREAM(self->stream)->info.channels, 
     354                                                  (long) ROAR_STREAM(self->stream)->info.rate, 
     355                                                  self->encoder.v_base_quality) != 0 ) { 
     356   ROAR_ERR("cf_vorbis_encode_start(*): Can not vorbis_encode_init_vbr(*)!"); 
     357   vorbis_info_clear(&(self->encoder.vi)); // TODO: do we need to free vc also? 
     358   return -1; 
     359  } 
     360 
     361  vorbis_analysis_init(&(self->encoder.vd), &(self->encoder.vi)); 
     362  vorbis_block_init(&(self->encoder.vd), &(self->encoder.vb)); 
     363 
     364                                     //  "RA"<<16 + PID<<8 + Stream ID 
     365  ogg_stream_init(&(self->encoder.os), 0x52410000 + ((getpid() & 0xff)<<8) + (ROAR_STREAM(self->stream)->id & 0xff)); 
     366 return 0; 
     367#else 
     368 return -1; 
     369#endif 
     370} 
     371 
     372int cf_vorbis_encode_end    (struct codecfilter_vorbis_inst * self) { 
     373#ifdef ROAR_HAVE_LIBVORBISENC 
     374 if ( self->encoding ) { 
     375  ogg_stream_clear(&(self->encoder.os)); 
     376  vorbis_block_clear(&(self->encoder.vb)); 
     377  vorbis_dsp_clear(&(self->encoder.vd)); 
     378  vorbis_info_clear(&(self->encoder.vi)); 
     379  self->opened = 0; 
     380 } 
     381 
     382 return 0; 
     383#else 
     384 return -1; 
     385#endif 
     386} 
     387 
     388#endif 
    366389//ll 
  • roard/include/codecfilter_vorbis.h

    r1185 r1226  
    7373 
    7474int cf_vorbis_update_stream (struct codecfilter_vorbis_inst * self); 
     75int cf_vorbis_encode_start  (struct codecfilter_vorbis_inst * self); 
     76int cf_vorbis_encode_end    (struct codecfilter_vorbis_inst * self); 
    7577 
    7678#endif 
Note: See TracChangeset for help on using the changeset viewer.