<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">вт, 17 мар. 2020 г. в 23:51, Giuseppe Torelli <<a href="mailto:giutorcom@gmail.com">giutorcom@gmail.com</a>>:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div><br>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. <br></div><div>If there is any error assume the format is not supported in the container.</div><div></div></div></div></blockquote><div><br></div><div>Would you please share some code?</div></div></div></blockquote><div> </div><div><a href="https://sourceforge.net/p/vdfiltermod/cch_input/ci/master/tree/export.cpp#l884">https://sourceforge.net/p/vdfiltermod/cch_input/ci/master/tree/export.cpp#l884</a> </div><div>This is part of VirtualDub2</div><div><br></div>    IOWBuffer io;<br>    int buf_size = 4096;<br>    void* buf = av_malloc(buf_size);<br>    AVIOContext* avio_ctx = avio_alloc_context((unsigned char*)buf,buf_size,1,&io,0,&IOWBuffer::Write,&IOWBuffer::Seek);<br>    AVFormatContext* ofmt = avformat_alloc_context();<br>    ofmt->pb = avio_ctx;<br>    ofmt->oformat = this->ofmt->oformat;<br>    AVStream* st = avformat_new_stream(ofmt, 0);<br>    avcodec_parameters_copy(st->codecpar, si.st->codecpar);<br>    st->sample_aspect_ratio = si.st->sample_aspect_ratio;<br>    st->avg_frame_rate = si.st->avg_frame_rate;<br>    av_stream_set_r_frame_rate(st,st->avg_frame_rate);<br>    st->time_base = si.st->time_base;<br><br>    if(st->codecpar->codec_type==AVMEDIA_TYPE_AUDIO){<br>      if(ofmt->oformat==av_guess_format("mp4", 0, 0)){<br>        st->codecpar->codec_tag = 0;<br>      }<br>    }<br><br>    bool failed = true;<br>    if(avformat_write_header(ofmt, 0)<0) goto cleanup;<br>    if(av_write_trailer(ofmt)<0) goto cleanup;<br>    failed = false;<br><br>  cleanup:<br>    av_free(avio_ctx->buffer);<br>    av_free(avio_ctx);<br>    avformat_free_context(ofmt);<br>    if(failed){<br>      std::string msg;<br>      msg += avcodec_get_name(codec_id);<br>      msg += ": codec not currently supported in container ";<br>      msg += format_name;<br>      mContext.mpCallbacks->SetError(msg.c_str());<br>      return false;<br>    }<br><div>   <br></div></div></div>