| | |
| | | |
| | | FormatIn::~FormatIn() |
| | | { |
| | | if(ctx_){ |
| | | if (!(ctx_->flags & AVFMT_FLAG_CUSTOM_IO)){ |
| | | avformat_close_input(&ctx_); |
| | | }else{ |
| | | avformat_free_context(ctx_); |
| | | } |
| | | logIt("free format in"); |
| | | if(dec_ctx_){ |
| | | avcodec_close(dec_ctx_); |
| | | avcodec_free_context(&dec_ctx_); |
| | | dec_ctx_ = NULL; |
| | | } |
| | | |
| | | if(ctx_){ |
| | | avformat_close_input(&ctx_); |
| | | ctx_ = NULL; |
| | | if(dec_ctx_){ |
| | | avcodec_close(dec_ctx_); |
| | | dec_ctx_ = NULL; |
| | | } |
| | | |
| | | } |
| | | |
| | | if (handle_gb28181){ |
| | | delete handle_gb28181; |
| | | } |
| | | if(read_io_buff_){ |
| | | av_free(read_io_buff_); |
| | | read_io_buff_ = NULL; |
| | | } |
| | | |
| | | if(io_ctx_){ |
| | | av_freep(&io_ctx_->buffer); |
| | | avio_context_free(&io_ctx_); |
| | | io_ctx_ = NULL; |
| | | } |
| | |
| | | |
| | | ctx_->pb = io_ctx_; |
| | | |
| | | auto err = av_probe_input_buffer(ctx_->pb, &ctx_->iformat, NULL, NULL, 0, 0); |
| | | if(err != 0){ |
| | | logIt("open with custom io prob input buffer error:%d err: %s\n", err, getAVErrorDesc(err).c_str()); |
| | | return -1; |
| | | } |
| | | // auto err = av_probe_input_buffer(ctx_->pb, &ctx_->iformat, NULL, NULL, 0, 0); |
| | | // if(err != 0){ |
| | | // logIt("open with custom io prob input buffer error:%d err: %s\n", err, getAVErrorDesc(err).c_str()); |
| | | // return -1; |
| | | // } |
| | | |
| | | return 0; |
| | | } |
| | |
| | | pthread_mutex_lock(&mtx); |
| | | if (q.empty()) { |
| | | gettimeofday(&now, NULL); |
| | | t.tv_sec = now.tv_sec + 5; |
| | | t.tv_sec = now.tv_sec + 3; |
| | | t.tv_nsec = now.tv_usec * 1000; |
| | | // pthread_cond_wait(&cond, &mtx); |
| | | pthread_cond_timedwait(&cond, &mtx, &t); |