/*视频合成主调用*/ int video_combine2(char* filelist[],int fileCnt) { char* outfilename=filelist[fileCnt-1]; videoFile outVideo; videoFile inVideo; open_video(filelist[1],&inVideo); avformat_alloc_output_context2(&(outVideo.pFormatCtx), NULL, NULL, outfilename); AVFormatContext* pFormatCtx=outVideo.pFormatCtx; init_output(&inVideo,outfilename,&outVideo); av_dump_format(outVideo.pFormatCtx,0,outfilename,1); if (avio_open(&(pFormatCtx->pb),outfilename, AVIO_FLAG_READ_WRITE) < 0) { printf("输出文件打开失败"); return -1; } if(avformat_write_header(pFormatCtx,NULL)<0){ERROR("写入文件尾失败");} AVFrame* frameArr[10000]; int index[10]={0}; int i=0; for(i=1;i<fileCnt-1;i++) { open_video(filelist[i],&inVideo); //printf("%d\n",read_video(&inVideo,frameArr,index[i-1])); if(i==1){index[i]=read_video(&inVideo,frameArr,0)-1;} else{index[i]=read_video(&inVideo,frameArr,index[i-1]+1)+index[i-1];} } //STOP; //printf("%d %d %d %d\n",index[0],index[1],index[2],index[3]); write_video3(&outVideo,&inVideo,frameArr,index,fileCnt-2); if(av_write_trailer(pFormatCtx)!=0){ERROR("写入文件尾失败");} avio_close(pFormatCtx->pb); avformat_free_context(pFormatCtx); }
file_status_e avi_reader_c::read(generic_packetizer_c *ptzr, bool) { if ((-1 != m_vptzr) && (PTZR(m_vptzr) == ptzr)) return read_video(); for (auto &demuxer : m_audio_demuxers) if ((-1 != demuxer.m_ptzr) && (PTZR(demuxer.m_ptzr) == ptzr)) return read_audio(demuxer); for (auto &subs_demuxer : m_subtitle_demuxers) if ((-1 != subs_demuxer.m_ptzr) && (PTZR(subs_demuxer.m_ptzr) == ptzr)) return read_subtitles(subs_demuxer); return flush_packetizers(); }
int Asset::read(FileXML *file, int expand_relative) { int result = 0; // Check for relative path. if(expand_relative) { char new_path[BCTEXTLEN]; char asset_directory[BCTEXTLEN]; char input_directory[BCTEXTLEN]; FileSystem fs; strcpy(new_path, path); fs.set_current_dir(""); fs.extract_dir(asset_directory, path); // No path in asset. // Take path of XML file. if(!asset_directory[0]) { fs.extract_dir(input_directory, file->filename); // Input file has a path if(input_directory[0]) { fs.join_names(path, input_directory, new_path); } } } while(!result) { result = file->read_tag(); if(!result) { if(file->tag.title_is("/ASSET")) { result = 1; } else if(file->tag.title_is("AUDIO")) { read_audio(file); } else if(file->tag.title_is("AUDIO_OMIT")) { read_audio(file); } else if(file->tag.title_is("FORMAT")) { char *string = file->tag.get_property("TYPE"); format = File::strtoformat(string); use_header = file->tag.get_property("USE_HEADER", use_header); } else if(file->tag.title_is("FOLDER")) { char *string = file->tag.get_property("NUMBER"); if(string) awindow_folder = atoi(string); else awindow_folder = AWindowGUI::folder_number(file->read_text()); } else if(file->tag.title_is("VIDEO")) { read_video(file); } else if(file->tag.title_is("VIDEO_OMIT")) { read_video(file); } else if(file->tag.title_is("INDEX")) { read_index(file); } } } //printf("Asset::read 2\n"); return 0; }