вт, 17 мар. 2020 г. в 23:51, Giuseppe Torelli <[email protected]>:
> >> I'm not sure if this is completely sane but I'm using this method for >> testing how FFMpeg can mix codec and container: create memory writing >> context, prepare writing of container, add single stream with the specific >> encoding format, try to finish. >> If there is any error assume the format is not supported in the container. >> > > Would you please share some code? > https://sourceforge.net/p/vdfiltermod/cch_input/ci/master/tree/export.cpp#l884 This is part of VirtualDub2 IOWBuffer io; int buf_size = 4096; void* buf = av_malloc(buf_size); AVIOContext* avio_ctx = avio_alloc_context((unsigned char*)buf,buf_size,1,&io,0,&IOWBuffer::Write,&IOWBuffer::Seek); AVFormatContext* ofmt = avformat_alloc_context(); ofmt->pb = avio_ctx; ofmt->oformat = this->ofmt->oformat; AVStream* st = avformat_new_stream(ofmt, 0); avcodec_parameters_copy(st->codecpar, si.st->codecpar); st->sample_aspect_ratio = si.st->sample_aspect_ratio; st->avg_frame_rate = si.st->avg_frame_rate; av_stream_set_r_frame_rate(st,st->avg_frame_rate); st->time_base = si.st->time_base; if(st->codecpar->codec_type==AVMEDIA_TYPE_AUDIO){ if(ofmt->oformat==av_guess_format("mp4", 0, 0)){ st->codecpar->codec_tag = 0; } } bool failed = true; if(avformat_write_header(ofmt, 0)<0) goto cleanup; if(av_write_trailer(ofmt)<0) goto cleanup; failed = false; cleanup: av_free(avio_ctx->buffer); av_free(avio_ctx); avformat_free_context(ofmt); if(failed){ std::string msg; msg += avcodec_get_name(codec_id); msg += ": codec not currently supported in container "; msg += format_name; mContext.mpCallbacks->SetError(msg.c_str()); return false; }
_______________________________________________ Libav-user mailing list [email protected] https://ffmpeg.org/mailman/listinfo/libav-user To unsubscribe, visit link above, or email [email protected] with subject "unsubscribe".
