LOCAL BOOL size_image(LPIMAGE lpImage, LFIXED Width , LFIXED Height, int Resolution, BOOL bSmartSize) { int pix, lin, res; LPFRAME lpDataFrame; LPFRAME lpAlphaFrame; LPOBJECT lpBase; LPALPHA lpAlpha; RECT rAlpha; if (!lpImage) return(FALSE); lpBase = ImgGetBase(lpImage); lpAlpha = lpBase->lpAlpha; res = Resolution; ProgressBegin(1, 0); pix = FMUL( res, Width ); lin = FMUL( res, Height ); lpAlphaFrame = NULL; if (lpDataFrame = SizeFrame(lpBase->Pixmap.EditFrame, pix, lin, res, bSmartSize)) { if (lpAlpha) lpAlphaFrame = SizeFrame(lpAlpha->Pixmap.EditFrame, pix, lin, res, bSmartSize); } if ( !lpDataFrame || (lpAlpha && !lpAlphaFrame)) { if (lpDataFrame) FrameClose(lpDataFrame); if (lpAlphaFrame) FrameClose(lpAlphaFrame); ProgressEnd(); return( FALSE ); } lpBase->rObject.right = FrameXSize(lpDataFrame)-1; lpBase->rObject.bottom = FrameYSize(lpDataFrame)-1; if (lpAlpha) MaskRectUpdate(lpAlpha, &rAlpha); ProgressEnd(); return( TRUE ); }
void ResizePuzzleFrame(LPFRAME lpNewFrame) { LPFRAME lpOldFrame; LPFRAME lpPrevFrame; double fXMult; double fYMult; double fMult; int iXNew; int iYNew; int iXOld; int iYOld; lpOldFrame = ImgGetBaseEditFrame(lpImage); iXNew = FrameXSize(lpNewFrame); iYNew = FrameYSize(lpNewFrame); iXOld = FrameXSize(lpOldFrame); iYOld = FrameYSize(lpOldFrame); fXMult = (double)iXOld / (double)iXNew; fYMult = (double)iYOld / (double)iYNew; if (fXMult < fYMult) fMult = fXMult; else fMult = fYMult; iXNew = (int)((double)iXNew * fMult); iYNew = (int)((double)iYNew * fMult); lpPrevFrame = lpNewFrame; lpNewFrame = SizeFrame( lpNewFrame, iXNew, iYNew, FrameResolution(lpOldFrame), FALSE); FrameClose(lpPrevFrame); iXNew = (FrameXSize(lpOldFrame) - FrameXSize(lpNewFrame)) / 2; iYNew = (FrameYSize(lpOldFrame) - FrameYSize(lpNewFrame)) / 2; iXNew = max(0, iXNew); iYNew = max(0, iYNew); lpPrevFrame = lpNewFrame; lpNewFrame = ExpandFrame(lpNewFrame, FrameXSize(lpOldFrame), /*pix*/ FrameYSize(lpOldFrame), /*lin*/ iXNew, /*left*/ iYNew, /*top*/ FrameGetBackground(lpOldFrame)); ImgReplaceBaseEditFrame(lpImage, lpNewFrame); FrameClose(lpPrevFrame); }
void MPAStream::FillAUbuffer(unsigned int frames_to_buffer ) { unsigned int padding_bit; last_buffered_AU += frames_to_buffer; if( eoscan ) return; mjpeg_debug( "Scanning %d MPA frames to frame %d", frames_to_buffer, last_buffered_AU ); while( !bs.eos() && decoding_order < last_buffered_AU && !muxinto.AfterMaxPTS(access_unit.PTS) ) { int skip=access_unit.length-4; bs.SeekFwdBits( skip ); prev_offset = AU_start; AU_start = bs.bitcount(); if( AU_start - prev_offset != access_unit.length*8 ) { mjpeg_warn("Discarding incomplete final frame MPEG audio stream %02x!", stream_id ); aunits.DropLast(); --decoding_order; break; } /* Check we have reached the end of have another catenated stream to process before finishing ... */ if ( (syncword = bs.GetBits( 11))!=AUDIO_SYNCWORD ) { // // Handle a broken last frame... if( !bs.eos() ) { mjpeg_warn( "Data follows end of last recogniseable MPEG audio frame - bad stream?"); eoscan = true; return; } break; } // Skip version_id:2, layer:2, protection:1 (void) bs.GetBits( 5); int rate_code = bs.GetBits( 4); // Skip frequency (void) bs.GetBits( 2); padding_bit=bs.Get1Bit(); access_unit.start = AU_start; access_unit.length = SizeFrame( rate_code, padding_bit ); access_unit.PTS = static_cast<clockticks>(decoding_order) * static_cast<clockticks>(mpa_samples[layer]) * static_cast<clockticks>(CLOCKS) / samples_per_second; access_unit.DTS = access_unit.PTS; access_unit.dorder = decoding_order; decoding_order++; aunits.Append( access_unit ); num_frames[padding_bit]++; bs.GetBits( 9); num_syncword++; if (num_syncword >= old_frames+10 ) { mjpeg_debug ("Got %d frame headers.", num_syncword); old_frames=num_syncword; } } last_buffered_AU = decoding_order; eoscan = bs.eos() || muxinto.AfterMaxPTS(access_unit.PTS); }