Exemplo n.º 1
0
static GF_Err AC3_AttachStream(GF_BaseDecoder *ifcg, GF_ESD *esd)
{
	A52CTX();

	if (ctx->ES_ID && ctx->ES_ID!=esd->ESID) return GF_NOT_SUPPORTED;

	GF_LOG(GF_LOG_DEBUG, GF_LOG_CODEC, ("[A52] Attaching stream %d\n", esd->ESID));

	if (ctx->codec) a52_free(ctx->codec);
	ctx->codec = a52_init(MM_ACCEL_DJBFFT);
	if (!ctx->codec) {
		GF_LOG(GF_LOG_ERROR, GF_LOG_CODEC, ("[A52] Error initializing decoder\n"));
		return GF_IO_ERR;
	}
    ctx->samples = a52_samples(ctx->codec);
	if (!ctx->samples) {
		a52_free(ctx->codec);
		GF_LOG(GF_LOG_ERROR, GF_LOG_CODEC, ("[A52] Error initializing decoder\n"));
		return GF_IO_ERR;
	}

	ctx->num_channels = 0;
	ctx->sample_rate = 0;
	ctx->out_size = 0;
	ctx->num_samples = 1536;
	ctx->ES_ID = esd->ESID;
	return GF_OK;
}
static int liba52_init(adec_feeder_t * feeder)
{
	uint32_t a52_accel = 0;
	int flags = 0;

	c_feeder = feeder;
	if (feeder == NULL)
		return -1;

	memset(&a52_buffer, 0, sizeof(a52_buffer));
	a52_buffer.a_in_buffer = frame_buffer;

	a52_state = a52_init(a52_accel);
	if (a52_state == NULL) {
		printf("A52 init failed !\n");
		return -1;
	}

	if (a52_fillbuff(&a52_buffer) < 0) {
		printf("A52 sync failed !\n");
		return -1;
	}

	a52_buffer.channels = audio_output_channels;
	switch (a52_buffer.channels) {
	case 1:
		a52_flags = A52_MONO;
		break;
		/*case 2: a52_flags=A52_STEREO; break; */
	case 2:
		a52_flags = A52_DOLBY;
		break;
		/*case 3: a52_flags=A52_3F; break; */
	case 3:
		a52_flags = A52_2F1R;
		break;
	case 4:
		a52_flags = A52_2F2R;
		break;		/* 2+2 */
	case 5:
		a52_flags = A52_3F2R;
		break;
	case 6:
		a52_flags = A52_3F2R | A52_LFE;
		break;		/* 5.1 */
	}
	flags |= a52_flags;

	if (a52_resample_init(a52_accel, flags, a52_buffer.channels) < 0) {
		printf("a52_resample_init  failed!\n");
		a52_free(a52_state);
		return -1;
	}

	feeder->channel_num = audio_output_channels;
	feeder->sample_rate = a52_buffer.samplerate;

	return 0;
}
Exemplo n.º 3
0
/*****************************************************************************
 * CloseFilter : deallocate data structures
 *****************************************************************************/
static void CloseFilter( vlc_object_t *p_this )
{
    filter_t *p_filter = (filter_t *)p_this;
    filter_sys_t *p_sys = p_filter->p_sys;

    a52_free( p_sys->p_liba52 );
    free( p_sys );
}
Exemplo n.º 4
0
/*****************************************************************************
 * Destroy : deallocate data structures
 *****************************************************************************/
static void Destroy( vlc_object_t *p_this )
{
    aout_filter_t *p_filter = (aout_filter_t *)p_this;
    filter_sys_t *p_sys = (filter_sys_t *)p_filter->p_sys;

    a52_free( p_sys->p_liba52 );
    free( p_sys );
}
Exemplo n.º 5
0
ADM_AudiocodecAC3::~ADM_AudiocodecAC3( )
{
    if(ac3_handle)
    {
        a52_free(AC3_HANDLE);
        ac3_handle=NULL;
        ac3_sample=NULL;
    }
}
Exemplo n.º 6
0
TaudioCodecLiba52::~TaudioCodecLiba52()
{
    if (dll) {
        if (state) {
            a52_free(state);
        }
        delete dll;
    }
}
static int a52_decode_release(void)
{
	if (a52_state) {
		a52_free(a52_state);
		a52_state = NULL;
	}
	memset(frame_buffer, 0, 3840);
	return 0;
}
Exemplo n.º 8
0
static GstStateChangeReturn
gst_a52dec_change_state (GstElement * element, GstStateChange transition)
{
  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
  GstA52Dec *a52dec = GST_A52DEC (element);

  switch (transition) {
    case GST_STATE_CHANGE_NULL_TO_READY:{
      GstA52DecClass *klass;

      klass = GST_A52DEC_CLASS (G_OBJECT_GET_CLASS (a52dec));
      a52dec->state = a52_init (klass->a52_cpuflags);
      break;
    }
    case GST_STATE_CHANGE_READY_TO_PAUSED:
      a52dec->samples = a52_samples (a52dec->state);
      a52dec->bit_rate = -1;
      a52dec->sample_rate = -1;
      a52dec->stream_channels = A52_CHANNEL;
      a52dec->using_channels = A52_CHANNEL;
      a52dec->level = 1;
      a52dec->bias = 0;
      a52dec->time = 0;
      a52dec->sent_segment = FALSE;
      a52dec->flag_update = TRUE;
      gst_segment_init (&a52dec->segment, GST_FORMAT_UNDEFINED);
      break;
    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
      break;
    default:
      break;
  }

  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);

  switch (transition) {
    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
      break;
    case GST_STATE_CHANGE_PAUSED_TO_READY:
      a52dec->samples = NULL;
      if (a52dec->cache) {
        gst_buffer_unref (a52dec->cache);
        a52dec->cache = NULL;
      }
      clear_queued (a52dec);
      break;
    case GST_STATE_CHANGE_READY_TO_NULL:
      a52_free (a52dec->state);
      a52dec->state = NULL;
      break;
    default:
      break;
  }

  return ret;
}
Exemplo n.º 9
0
static GF_Err AC3_DetachStream(GF_BaseDecoder *ifcg, u16 ES_ID)
{
	A52CTX();
	if (ES_ID != ctx->ES_ID) return GF_BAD_PARAM;
	if (ctx->codec) a52_free(ctx->codec);
	ctx->codec = NULL;
	ctx->ES_ID = 0;
	ctx->sample_rate = ctx->out_size = ctx->num_samples = 0;
	ctx->num_channels = 0;
	return GF_OK;
}
Exemplo n.º 10
0
Arquivo: a52.c Projeto: IlVerz/rockbox
/* this is the codec entry point */
enum codec_status codec_main(enum codec_entry_call_reason reason)
{
    if (reason == CODEC_LOAD) {
        /* Generic codec initialisation */
        ci->configure(DSP_SET_STEREO_MODE, STEREO_NONINTERLEAVED);
        ci->configure(DSP_SET_SAMPLE_DEPTH, 28);
    }
    else if (reason == CODEC_UNLOAD) {
        if (state)
            a52_free(state);
    }

    return CODEC_OK;
}
Exemplo n.º 11
0
void DeleteAC3Dec(GF_BaseDecoder *ifcg)
{
	AC3Dec *ctx;
        if (!ifcg)
          return;
        ctx = (AC3Dec *) ifcg->privateStack;
        if (ctx){
          if (ctx->codec)
            a52_free(ctx->codec);
          ctx->codec = NULL;
          gf_free(ctx);
          ifcg->privateStack = NULL;
        }
	gf_free(ifcg);
}
Exemplo n.º 12
0
static gboolean
gst_a52dec_stop (GstAudioDecoder * dec)
{
  GstA52Dec *a52dec = GST_A52DEC (dec);

  GST_DEBUG_OBJECT (dec, "stop");

  a52dec->samples = NULL;
  if (a52dec->state) {
    a52_free (a52dec->state);
    a52dec->state = NULL;
  }

  return TRUE;
}
Exemplo n.º 13
0
static void uninit(sh_audio_t *sh)
{
  a52_free(a52_state);
}
Exemplo n.º 14
0
/* this is the codec entry point */
enum codec_status codec_main(void)
{
    size_t n;
    unsigned char *filebuf;
    int sample_loc;
    int retval;

    /* Generic codec initialisation */
    ci->configure(DSP_SET_STEREO_MODE, STEREO_NONINTERLEAVED);
    ci->configure(DSP_SET_SAMPLE_DEPTH, 28);

next_track:
    retval = CODEC_OK;

    if (codec_init()) {
        retval = CODEC_ERROR;
        goto exit;
    }

    if (codec_wait_taginfo() != 0)
        goto request_next_track;

    ci->configure(DSP_SWITCH_FREQUENCY, ci->id3->frequency);
    codec_set_replaygain(ci->id3);
    
    /* Intialise the A52 decoder and check for success */
    state = a52_init(0);

    /* The main decoding loop */
    if (ci->id3->offset) {
        if (ci->seek_buffer(ci->id3->offset)) {
            samplesdone = (ci->id3->offset / ci->id3->bytesperframe) *
                A52_SAMPLESPERFRAME;
            ci->set_elapsed(samplesdone/(ci->id3->frequency / 1000));
        }
    }
    else {
        samplesdone = 0;
    }

    while (1) {
        if (ci->stop_codec || ci->new_track)
            break;

        if (ci->seek_time) {
            sample_loc = (ci->seek_time - 1)/1000 * ci->id3->frequency;

            if (ci->seek_buffer((sample_loc/A52_SAMPLESPERFRAME)*ci->id3->bytesperframe)) {
                samplesdone = sample_loc;
                ci->set_elapsed(samplesdone/(ci->id3->frequency/1000));
            }
            ci->seek_complete();
        }

        filebuf = ci->request_buffer(&n, BUFFER_SIZE);

        if (n == 0) /* End of Stream */
            break;
  
        a52_decode_data(filebuf, filebuf + n);
        ci->advance_buffer(n);
    }

request_next_track:
    if (ci->request_next_track())
        goto next_track;

exit:
    a52_free(state);
    return retval;
}
Exemplo n.º 15
0
void mpeg3_delete_ac3(mpeg3_ac3_t *audio)
{
	mpeg3bits_delete_stream(audio->stream);
	a52_free(audio->state);
	free(audio);
}