Пример #1
0
/**
When all slice are decoded, we execute the MMO operation and the loop filter, and the display management.
*/
void FinishFrame(SPS *Sps, PPS *Pps, LIST_MMO *Current_pic, SLICE *Slice, int EndOfSlice, unsigned char *SliceTab, DATA *TabBlbock, 
				 RESIDU *Residu, short *MvL0, short *MvL1, short *RefL0, short *RefL1, int *Crop, int *ImgToDisplay, DISPLAY_M* display_memory, 
				 MMO *Mmo, unsigned char *RefY, unsigned char *RefU, unsigned char *RefV, int *xsize, int *ysize)
{


	if (!EndOfSlice){
		unsigned int PicWidthInPix = (Sps -> pic_width_in_mbs + 2) << 4   ;
		unsigned int PicHeightInPix = (Sps -> pic_height_in_map_units ) << 4 ;
		unsigned char *Y = Current_pic->picture_memory_y;
		unsigned char *U = Current_pic->picture_memory_u;
		unsigned char *V = Current_pic->picture_memory_v;

		//Short and long term management
		execute_ref_pic_marking(Sps,Mmo,0,0);

		if( Slice -> disable_deblocking_filter_idc != 1){
			//Deblocking filter if necessary
			filter_P(Sps, Pps, Slice, SliceTab, MvL0, RefL0, Residu, Y, U, V);
		}

		//Padding for motion interpolation
		ImageSetEdges(Y, U, V, PicWidthInPix, PicHeightInPix);

		//Display managment.
		display_order(Sps, Current_pic, display_memory, xsize, ysize, Crop, ImgToDisplay, Mmo);
	}
}
Пример #2
0
void FinishFrameSVC( NAL *Nal, SPS *Sps, PPS *Pps, LIST_MMO *Current_pic, SLICE *Slice, int EndOfSlice, 
					DATA *TabBlbock, RESIDU *Residu, MMO *Mmo)
{


	if (!EndOfSlice && Mmo -> MemoryAllocation){
		LAYER_MMO *LayerMmo = &(Mmo->LayerMMO[Nal->LayerId]);
		DEP_MMO* dep_mmo = LayerMmo->dep_mmo;
		if ( Nal -> PicToDisplay && Nal->bFinishLayerRepresent){
			const int PicWidthInPix = (Sps -> pic_width_in_mbs + 2) << 4;
			const int PicHeightInPix = (Sps -> pic_height_in_map_units ) << 4;
			short *mvL0 = Current_pic->mv_memory_l0;
			short *mvL1 = Current_pic->mv_memory_l1;
			short *refL0 = Current_pic->ref_memory_l0;
			short *refL1 = Current_pic->ref_memory_l1;
			unsigned char *Y = Current_pic->picture_memory_y;
			unsigned char *U = Current_pic->picture_memory_u;
			unsigned char *V = Current_pic->picture_memory_v;
			//Deblocking filter
			if (!Nal -> DqId){
				Loop_filter_avc(Sps, Pps, Slice, Current_pic, LayerMmo->mb_slice_table, TabBlbock, mvL0, mvL1, refL0, refL1, Residu, Y, U, V);
			}else {
				Loop_filter_svc(Nal, Sps, Pps, Slice, Current_pic, LayerMmo->mb_slice_table, mvL0, mvL1, refL0, refL1, Residu, Y, U, V);
			}
			//Padding for motion interpolation
			ImageSetEdges(Y, U, V, PicWidthInPix, PicHeightInPix);
			logStr("add to poc buffer, poc:%d, pic number:%d\tmemory:%x\n",Current_pic->poc,
					Mmo->nb_img_display - Mmo -> num_free_poc_address,Current_pic->picture_memory_y);
			StorePicture(&(Mmo->poc_params[Mmo->nb_img_display - Mmo -> num_free_poc_address]),
					Current_pic,Sps,Nal->DqIdToDisplay);
			Mmo->num_free_poc_address--;
		}
	}
}
Пример #3
0
/**
This function applies the deblocking filter if necessary and stores the decoded pictures.
*/
void FinishFrameSVC(const int NbMacro, NAL *Nal, SPS *Sps, PPS *Pps, LIST_MMO *Current_pic, SLICE *Slice, int EndOfSlice, 
					unsigned char *SliceTab, DATA *TabBlbock, RESIDU *Residu, short *MvL0, short *MvL1, short *RefL0, 
					short *RefL1, int *Crop, int *ImgToDisplay, int *AdressPic, MMO *Mmo,  
					unsigned char *RefY, unsigned char *RefU, unsigned char *RefV, int *xsize, int *ysize)
{


	if (!EndOfSlice && Mmo -> MemoryAllocation){
		//Short and long term management
		execute_ref_pic_marking(Current_pic, Mmo, Nal -> LayerId);

		if ( Nal -> PicToDisplay){
			const int PicWidthInPix = (Sps -> pic_width_in_mbs + 2) << 4;
			const int PicHeightInPix = (Sps -> pic_height_in_map_units ) << 4;
			short *mvL0 = &MvL0[Current_pic -> MvMemoryAddress];
			short *mvL1 = &MvL1[Current_pic -> MvMemoryAddress];
			short *refL0 = &RefL0[Current_pic -> MvMemoryAddress >> 1];
			short *refL1 = &RefL1[Current_pic -> MvMemoryAddress >> 1];
			unsigned char *Y = &RefY[Current_pic -> MemoryAddress];
			unsigned char *U = &RefU[Current_pic -> MemoryAddress >> 2];
			unsigned char *V = &RefV[Current_pic -> MemoryAddress >> 2];

			//Deblocking filter
			if (!Nal -> DqId){
				Loop_filter_avc(NbMacro, 0, Sps, Pps, Slice, Current_pic, SliceTab, TabBlbock, mvL0, mvL1, refL0, refL1, Residu, Y, U, V);
			}else {
				Loop_filter_svc(NbMacro, Nal, Sps, Pps, Slice, Current_pic, SliceTab, mvL0, mvL1, refL0, refL1, Residu, Y, U, V);
			}

			//Padding for motion interpolation
			ImageSetEdges(Y, U, V, PicWidthInPix, PicHeightInPix);
		}

		//Display managment.
		DisplayOrderSvc(Sps, Current_pic, Nal, AdressPic, xsize, ysize, Crop, ImgToDisplay, Mmo);
	}else {