Пример #1
0
int av_bsf_alloc(const AVBitStreamFilter *filter, AVBSFContext **pctx)
{
    AVBSFContext *ctx;
    int ret;

    ctx = av_mallocz(sizeof(*ctx));
    if (!ctx)
        return AVERROR(ENOMEM);

    ctx->av_class = &bsf_class;
    ctx->filter   = filter;

    ctx->par_in  = avcodec_parameters_alloc();
    ctx->par_out = avcodec_parameters_alloc();
    if (!ctx->par_in || !ctx->par_out) {
        ret = AVERROR(ENOMEM);
        goto fail;
    }

    ctx->internal = av_mallocz(sizeof(*ctx->internal));
    if (!ctx->internal) {
        ret = AVERROR(ENOMEM);
        goto fail;
    }

    ctx->internal->buffer_pkt = av_packet_alloc();
    if (!ctx->internal->buffer_pkt) {
        ret = AVERROR(ENOMEM);
        goto fail;
    }

    av_opt_set_defaults(ctx);

    /* allocate priv data and init private options */
    if (filter->priv_data_size) {
        ctx->priv_data = av_mallocz(filter->priv_data_size);
        if (!ctx->priv_data) {
            ret = AVERROR(ENOMEM);
            goto fail;
        }
        if (filter->priv_class) {
            *(const AVClass **)ctx->priv_data = filter->priv_class;
            av_opt_set_defaults(ctx->priv_data);
        }
    }

    *pctx = ctx;
    return 0;
fail:
    av_bsf_free(&ctx);
    return ret;
}
Пример #2
0
AVCodecParameters *mp_codec_params_to_av(struct mp_codec_params *c)
{
    AVCodecParameters *avp = avcodec_parameters_alloc();
    if (!avp)
        return NULL;

    // If we have lavf demuxer params, they overwrite by definition any others.
    if (c->lav_codecpar) {
        if (avcodec_parameters_copy(avp, c->lav_codecpar) < 0)
            goto error;
        return avp;
    }

    avp->codec_type = mp_to_av_stream_type(c->type);
    avp->codec_id = mp_codec_to_av_codec_id(c->codec);
    avp->codec_tag = c->codec_tag;
    if (c->extradata_size) {
        avp->extradata =
            av_mallocz(c->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE);
        if (!avp->extradata)
            goto error;
        avp->extradata_size = c->extradata_size;
        memcpy(avp->extradata, c->extradata, avp->extradata_size);
    }
    avp->bits_per_coded_sample = c->bits_per_coded_sample;

    // Video only
    avp->width = c->disp_w;
    avp->height = c->disp_h;

    // Audio only
    avp->sample_rate = c->samplerate;
    avp->bit_rate = c->bitrate;
    avp->block_align = c->block_align;
    avp->channels = c->channels.num;
    if (!mp_chmap_is_unknown(&c->channels))
        avp->channel_layout = mp_chmap_to_lavc(&c->channels);

    return avp;
error:
    avcodec_parameters_free(&avp);
    return NULL;
}
Пример #3
0
int ff_mov_init_hinting(AVFormatContext *s, int index, int src_index)
{
    MOVMuxContext *mov  = s->priv_data;
    MOVTrack *track     = &mov->tracks[index];
    MOVTrack *src_track = &mov->tracks[src_index];
    AVStream *src_st    = s->streams[src_index];
    int ret = AVERROR(ENOMEM);

    track->tag = MKTAG('r','t','p',' ');
    track->src_track = src_index;

    track->par = avcodec_parameters_alloc();
    if (!track->par)
        goto fail;
    track->par->codec_type = AVMEDIA_TYPE_DATA;
    track->par->codec_tag  = track->tag;

    ret = ff_rtp_chain_mux_open(&track->rtp_ctx, s, src_st, NULL,
                                RTP_MAX_PACKET_SIZE, src_index);
    if (ret < 0)
        goto fail;

    /* Copy the RTP AVStream timebase back to the hint AVStream */
    track->timescale = track->rtp_ctx->streams[0]->time_base.den;

    /* Mark the hinted track that packets written to it should be
     * sent to this track for hinting. */
    src_track->hint_track = index;
    return 0;
fail:
    av_log(s, AV_LOG_WARNING,
           "Unable to initialize hinting of stream %d\n", src_index);
    avcodec_parameters_free(&track->par);
    /* Set a default timescale, to avoid crashes in av_dump_format */
    track->timescale = 90000;
    return ret;
}
Пример #4
0
MediaPacket::MediaPacket(IN FeedFrame & feedFrame) {
        
        AVCodecParameters *param = avcodec_parameters_alloc();
        shouldFreeAvCodecParameters = true;
        enum AVCodecID codecId;
        switch(feedFrame.type_) {
                case ReceiverType::H264 :
                        stream_ = AVMEDIA_TYPE_VIDEO;
                        codecId = AV_CODEC_ID_H264;
                        break;
                case ReceiverType::H265 :
                        stream_ = AVMEDIA_TYPE_VIDEO;
                        codecId = AV_CODEC_ID_HEVC;
                        break;
                case ReceiverType::G711A :
                        stream_ = AVMEDIA_TYPE_AUDIO;
                        codecId = AV_CODEC_ID_PCM_ALAW;
                        break;
                case ReceiverType::G711U :
                        stream_ = AVMEDIA_TYPE_AUDIO;
                        codecId = AV_CODEC_ID_PCM_MULAW;
                        break;
                case ReceiverType::PCMS16E :
                        stream_ = AVMEDIA_TYPE_AUDIO;
                        codecId = AV_CODEC_ID_PCM_S16LE;
                        break;
                case ReceiverType::AACNoAdts :
                case ReceiverType::AACAdts :
                        stream_ = AVMEDIA_TYPE_AUDIO;
                        codecId = AV_CODEC_ID_AAC;
                        break;
                default:
                        codecId = AV_CODEC_ID_NONE;
        }
        SetCodec(codecId);
        
        switch(feedFrame.type_) {
                case ReceiverType::G711A :
                case ReceiverType::PCMS16E :
                case ReceiverType::G711U :
                        param->channels = 1;
                        param->channel_layout = AV_CH_LAYOUT_MONO;
                        param->sample_rate = 8000;
                        param->codec_id = codecId;
                        param->codec_type = AVMEDIA_TYPE_AUDIO;
                        param->format = AV_SAMPLE_FMT_S16;
                        param->bits_per_coded_sample = 8;
                        param->bits_per_raw_sample = 16;
                        if (ReceiverType::PCMS16E == feedFrame.type_)
                                param->bits_per_coded_sample = 16;
                        break;
                default:
                        codecId = AV_CODEC_ID_NONE;
        }
        pAvCodecPar_ = param;
        
        AVPacket* pAvPacket = av_packet_alloc();
        av_init_packet(pAvPacket);
        pAvPacket->data = reinterpret_cast<uint8_t *>(feedFrame.data_.data());
        pAvPacket->size = feedFrame.data_.size();
        pAvPacket->pts = feedFrame.nPts_;
        pAvPacket->dts = feedFrame.nDts_;
        pAvPacket_ = const_cast<AVPacket*>(pAvPacket);
}