void ADM_EditorSegment::dumpSegmentsInternal(ListOfSegments &l) { int n=l.size(); for(int i=0;i<n;i++) { _SEGMENT s=l.at(i); printf("Segment :%d/%d\n",i,n); printf("\tReference :%"PRIu32" %s\n",s._reference,ADM_us2plain(s._reference)); printf("\tstartLinear :%08"PRIu64" %s\n",s._startTimeUs,ADM_us2plain(s._startTimeUs)); printf("\tduration :%08"PRIu64" %s\n",s._durationUs,ADM_us2plain(s._durationUs)); printf("\trefStartPts :%08"PRIu64" %s\n",s._refStartTimeUs,ADM_us2plain(s._refStartTimeUs)); printf("\trefStartDts :%08"PRIu64" %s\n",s._refStartDts,ADM_us2plain(s._refStartDts)); } }
/** \fn setSegments \brief setter for the list of segments */ bool ADM_EditorSegment::setSegments(ListOfSegments segm) { if(segm.size()) { segments=segm; return true; } return false; }
/** * \fn pasteFromClipBoard * \brief instert clipboard at currentTime position * @param currentTime * @return */ bool ADM_EditorSegment::pasteFromClipBoard(uint64_t currentTime) { if(clipboardEmpty()) { ADM_info("The clipboard is empty, nothing to do\n"); return true; } ADM_info("Pasting from clipboard to %s\n",ADM_us2plain(currentTime)); uint32_t startSeg; uint64_t startSegTime; convertLinearTimeToSeg( currentTime, &startSeg,&startSegTime); ListOfSegments tmp=segments; ListOfSegments newSegs; int n=segments.size(); for(int i=0;i<n;i++) { _SEGMENT s=segments[i]; if(i==startSeg) { // insert clipboard // Do we need to split it ? if(currentTime==s._startTimeUs) { // nope for(int j=0;j<clipboard.size();j++) newSegs.push_back(clipboard[j]); }else { _SEGMENT pre=s,post=s; uint64_t offset=currentTime-s._startTimeUs; pre._durationUs=offset; post._refStartTimeUs+=offset; post._durationUs-=offset; newSegs.push_back(pre); for(int j=0;j<clipboard.size();j++) newSegs.push_back(clipboard[j]); newSegs.push_back(post); continue; } } newSegs.push_back(s); } segments=newSegs; // If a video doesn't start at zero and we paste to its first frame, // we end up with an empty segment at the beginning. Remove it. removeEmptySegments(); updateStartTime(); dump(); return true; }
/** * \fn pasteFromClipBoard * \brief instert clipboard at currentTime position * @param currentTime * @return */ bool ADM_EditorSegment::pasteFromClipBoard(uint64_t currentTime) { ADM_info("Pasting from clipboard to %s\n",ADM_us2plain(currentTime)); uint32_t startSeg; uint64_t startSegTime; convertLinearTimeToSeg( currentTime, &startSeg,&startSegTime); ListOfSegments newSegs; int n=segments.size(); for(int i=0;i<n;i++) { _SEGMENT s=segments[i]; if(i==startSeg) { // insert clipboard // Do we need to split it ? if(currentTime==s._startTimeUs) { // nope for(int j=0;j<clipboard.size();j++) newSegs.push_back(clipboard[j]); }else { _SEGMENT pre=s,post=s; uint64_t offset=currentTime-s._startTimeUs; pre._durationUs=offset; post._refStartTimeUs+=offset; post._durationUs-=offset; newSegs.push_back(pre); for(int j=0;j<clipboard.size();j++) newSegs.push_back(clipboard[j]); newSegs.push_back(post); continue; } } newSegs.push_back(s); } segments=newSegs; updateStartTime(); return true; }