Ejemplo n.º 1
0
void test_callback_helper(ExceptionClass)
{
    BOOST_THROW_EXCEPTION(
        ExceptionClass() << IronBee::errinfo_what(
            "Intentional test exception."
        )
    );
}
Ejemplo n.º 2
0
 static inline void throw_on_glerror(const std::string &message, const std::string &file, size_t line)
 {
   GLint error;
   std::string s;
   if ((error = glGetError()) != GL_NO_ERROR)
   {
     s = reinterpret_cast<const char *>(glewGetErrorString(error));
     throw ExceptionClass(message + ": " + s, file, line);
   }
 }
Ejemplo n.º 3
0
String Exception::FormatInfo() const
{
   String info = ExceptionClass();
   String msg = Message();

   if ( !msg.IsEmpty() )
   {
      if ( !info.IsEmpty() )
         info += ": ";
      info += msg;
   }

   return info;
}
Ejemplo n.º 4
0
 void operator()(IronBee::Module module)
 {
     m_out_ib_module  = module.ib();
     m_out_ib_context = NULL;
     test_callback_helper(ExceptionClass());
 }
Ejemplo n.º 5
0
void Parser::Resample()
{
    int got_frame;

    int idxFrame;
    int idxBuff;

    bool isExtAAC = false;
    if (cdc_ctx_in->codec_id == AV_CODEC_ID_AAC)
        isExtAAC = sampleFormatIn == (int)AVSampleFormat::AV_SAMPLE_FMT_FLTP;

    try
    {
        try
        {
            if (nbSamplesIn > 0)
            {
                if (isExtAAC)
                {
                    frame_in->nb_samples = 2048;
                    frame_in->channels = cdc_ctx_in->channels;
                }
                else
                {
                    frame_in->nb_samples = nbSamplesIn;
                    frame_in->channels = nbChannelsIn;
                }
                frame_in->format = sampleFormatIn;
                frame_in->sample_rate = sampleRateIn;
                frame_in->channel_layout = channelLayoutIn;

                if (av_frame_get_buffer(frame_in, 1) < 0)
                    throw ResampleException() << errno_code(MIR_ERR_BUFFER_ALLOC_IN);

                if (isExtAAC)
                    frame_in->nb_samples = nbSamplesIn;
            }
            else
                throw ResampleException() << errno_code(MIR_ERR_BUFFER_ALLOC_NULL);
        }
        catch(SignalException& err)
        {
            throw ExceptionClass("parser", "Resample", "Segmentation error");
        }
        catch(ResampleException& err)
        {
            throw;
        }

/**
        try
        {
            frame_out->nb_samples = cdc_ctx_out->frame_size;
            frame_out->format = cdc_ctx_out->sample_fmt;
            frame_out->sample_rate = sampleRate;
            frame_out->channel_layout = av_get_default_channel_layout(nbChannel);

            if (av_frame_get_buffer(frame_out, 1) < 0)
                throw ResampleException() << errno_code(MIR_ERR_BUFFER_ALLOC_OUT);
        }
        catch(ResampleException& err)
        {
            throw;
        }
/**/

        for (idxFrame = 0; idxFrame < (int)this->bufFrames.size(); idxFrame++)
        {
            try
            {
                vetAux = bufFrames[idxFrame];

                //!< carregando dados no frame de entrada
                try
                {
                    nbBuffers = av_sample_fmt_is_planar((AVSampleFormat)frame_in->format) ? frame_in->channels : 1;
                    if ((int)vetAux.size() != nbBuffers)
                        throw FifoException() << errno_code(MIR_ERR_FIFO_DATA1);

                    for (idxBuff = 0; idxBuff < (int)vetAux.size(); idxBuff++)
                    {
                        if ((int)vetAux[idxBuff].size() > frame_in->linesize[0])
                            throw FifoException() << errno_code(MIR_ERR_FIFO_DATA2);

                        try
                        {
                            memcpy(frame_in->data[idxBuff], vetAux[idxBuff].data(), frame_in->linesize[0]);
                        }
                        catch(SignalException& err)
                        {
                            throw ExceptionClass("parser", "Resample", err.what());
                        }
                    }

                    for (int idxBuff = 0; idxBuff < (int)vetAux.size(); idxBuff++)
                        if (vetAux[idxBuff].size() > 0)
                            vetAux[idxBuff].clear();
                    if (vetAux.size() > 0)
                        vetAux.clear();
                }
                catch (ExceptionClass& err)
                {
                    throw;
                }
                catch (FifoException& err)
                {
                    throw;
                }
                catch (...)
                {
                    throw FifoException() << errno_code(MIR_ERR_FIFO_DATA3);
                }

                //!< convertendo dados
                if (swr_convert(swr_ctx, (uint8_t**)&frame_out->data, frame_out->nb_samples,
                                 (const uint8_t**)&frame_in->data, frame_in->nb_samples) >= 0)
                {
                    got_frame = 0;
                    av_init_packet(&pkt_out);
                    pkt_out.data = NULL;
                    pkt_out.size = 0;

                    if (avcodec_encode_audio2(cdc_ctx_out, &pkt_out, frame_out, &got_frame) >= 0)
                        EndResample();
                    else
                    {
                        av_free_packet(&pkt_out);
                        throw ResampleException() << errno_code(MIR_ERR_ENCODE);
                    }

                    av_free_packet(&pkt_out);
                }
                else
                    throw ResampleException() << errno_code(MIR_ERR_RESAMPLE);
            }
            catch(ExceptionClass& err)
            {
                objLog->mr_printf(MR_LOG_ERROR, idRadio, "%s\n", err.what());
            }
            catch(FifoException& err)
            {
                char aux[200];

                switch(*boost::get_error_info<errno_code>(err))
                {
                    case MIR_ERR_FIFO_DATA1:
                        sprintf(aux, "Error (%d) : vetAux.size = %d    nbBuffers = %d\n", MIR_ERR_FIFO_DATA1,
                                (int)vetAux.size(), nbBuffers);
                        break;
                    case MIR_ERR_FIFO_DATA2:
/**
                        sprintf(aux, "Error (%d) : vetAux[idxBuff].size = %d    linesize = %d\n", MIR_ERR_FIFO_DATA2,
                                (int)vetAux[idxBuff].size(), frame_in->linesize[0]);
/**/
                        sprintf(aux, "Error (%d) : vetAux[idxBuff].size = %d    linesize = %d    channels = %d"
                                "    channelsLayout = %d    format = %d    nb_samples = %d\n",
                                MIR_ERR_FIFO_DATA2,
                                (int)vetAux[idxBuff].size(),
                                frame_in->linesize[0],
                                frame_in->channels,
                                frame_in->channel_layout,
                                frame_in->format,
                                frame_in->nb_samples);
/**/
                        break;
                    case MIR_ERR_FIFO_DATA3:
                        sprintf(aux, "Error (%d) : General Frame allocation error\n", MIR_ERR_FIFO_DATA3);
                        break;
                    default :
                        break;
                }

                objLog->mr_printf(MR_LOG_ERROR, idRadio, aux);

                for (int idxBuff = 0; idxBuff < (int)vetAux.size(); idxBuff++)
                    if (vetAux[idxBuff].size() > 0)
                        vetAux[idxBuff].clear();
                if (vetAux.size() > 0)
                    vetAux.clear();
            }
            catch(ResampleException& err)
            {
                objLog->mr_printf(MR_LOG_ERROR, idRadio, "Frame Resample Exception : %d\n", *boost::get_error_info<errno_code>(err));
            }
        }

        av_frame_unref(frame_in);
//        av_frame_unref(frame_out);

        for (int idxFrame = 0; idxFrame < (int)this->bufFrames.size(); idxFrame++)
        {
            for (int idxBuff = 0; idxBuff < (int)bufFrames[idxFrame].size(); idxBuff++)
                if (bufFrames[idxFrame][idxBuff].size() > 0)
                    bufFrames[idxFrame][idxBuff].clear();
            if (bufFrames[idxFrame].size() > 0)
                bufFrames[idxFrame].clear();
        }
        if (bufFrames.size() > 0)
            bufFrames.clear();
    }
    catch (SignalException& err)
    {
        if (frame_in)
        {
            av_frame_free(&frame_in);
            frame_in = NULL;
        }

        if (frame_out)
        {
            av_frame_free(&frame_out);
            frame_out = NULL;
        }

        for (int idxBuff = 0; idxBuff < (int)vetAux.size(); idxBuff++)
            if (vetAux[idxBuff].size() > 0)
                vetAux[idxBuff].clear();
        if (vetAux.size() > 0)
            vetAux.clear();

        for (int idxFrame = 0; idxFrame < (int)this->bufFrames.size(); idxFrame++)
        {
            for (int idxBuff = 0; idxBuff < (int)bufFrames[idxFrame].size(); idxBuff++)
                if (bufFrames[idxFrame][idxBuff].size() > 0)
                    bufFrames[idxFrame][idxBuff].clear();
            if (bufFrames[idxFrame].size() > 0)
                bufFrames[idxFrame].clear();
        }
        if (bufFrames.size() > 0)
            bufFrames.clear();

        throw;
    }
    catch(...)
    {
        if (frame_in)
        {
            av_frame_free(&frame_in);
            frame_in = NULL;
        }

        if (frame_out)
        {
            av_frame_free(&frame_out);
            frame_out = NULL;
        }

        for (int idxBuff = 0; idxBuff < (int)vetAux.size(); idxBuff++)
            if (vetAux[idxBuff].size() > 0)
                vetAux[idxBuff].clear();
        if (vetAux.size() > 0)
            vetAux.clear();

        for (int idxFrame = 0; idxFrame < (int)this->bufFrames.size(); idxFrame++)
        {
            for (int idxBuff = 0; idxBuff < (int)bufFrames[idxFrame].size(); idxBuff++)
                if (bufFrames[idxFrame][idxBuff].size() > 0)
                    bufFrames[idxFrame][idxBuff].clear();
            if (bufFrames[idxFrame].size() > 0)
                bufFrames[idxFrame].clear();
        }
        if (bufFrames.size() > 0)
            bufFrames.clear();

        throw;
    }
}