mirror of
				https://github.com/jojo61/vdr-plugin-softhdcuvid.git
				synced 2025-03-01 10:39:28 +00:00 
			
		
		
		
	more Frame Statistik
This commit is contained in:
		
							
								
								
									
										215
									
								
								softhdcuvid.cpp
									
									
									
									
									
								
							
							
						
						
									
										215
									
								
								softhdcuvid.cpp
									
									
									
									
									
								
							| @@ -959,9 +959,7 @@ inline cOsdItem *cMenuSetupSoft::CollapsedItem(const char *label, int &flag, | ||||
| { | ||||
|     cOsdItem *item; | ||||
|  | ||||
|     item = | ||||
| 	new cMenuEditBoolItem(cString::sprintf("* %s", label), &flag, | ||||
| 	msg ? msg : tr("show"), tr("hide")); | ||||
|     item = new cMenuEditBoolItem(cString::sprintf("* %s", label), &flag,msg ? msg : tr("show"), tr("hide")); | ||||
|  | ||||
|     return item; | ||||
| } | ||||
| @@ -1011,10 +1009,8 @@ void cMenuSetupSoft::Create(void) | ||||
|     Add(CollapsedItem(tr("General"), General)); | ||||
|  | ||||
|     if (General) { | ||||
| 	Add(new cMenuEditBoolItem(tr("Make primary device"), &MakePrimary, | ||||
| 		trVDR("no"), trVDR("yes"))); | ||||
| 	Add(new cMenuEditBoolItem(tr("Hide main menu entry"), | ||||
| 		&HideMainMenuEntry, trVDR("no"), trVDR("yes"))); | ||||
| 	Add(new cMenuEditBoolItem(tr("Make primary device"), &MakePrimary,	trVDR("no"), trVDR("yes"))); | ||||
| 	Add(new cMenuEditBoolItem(tr("Hide main menu entry"),&HideMainMenuEntry, trVDR("no"), trVDR("yes"))); | ||||
| 	// | ||||
| 	//	osd | ||||
| 	// | ||||
| @@ -1030,12 +1026,9 @@ void cMenuSetupSoft::Create(void) | ||||
| 	//	suspend | ||||
| 	// | ||||
| 	Add(SeparatorItem(tr("Suspend"))); | ||||
| 	Add(new cMenuEditBoolItem(tr("Detach from main menu entry"), | ||||
| 		&DetachFromMainMenu, trVDR("no"), trVDR("yes"))); | ||||
| 	Add(new cMenuEditBoolItem(tr("Suspend closes video+audio"), | ||||
| 		&SuspendClose, trVDR("no"), trVDR("yes"))); | ||||
| 	Add(new cMenuEditBoolItem(tr("Suspend stops x11"), &SuspendX11, | ||||
| 		trVDR("no"), trVDR("yes"))); | ||||
| 	Add(new cMenuEditBoolItem(tr("Detach from main menu entry"),&DetachFromMainMenu, trVDR("no"), trVDR("yes"))); | ||||
| 	Add(new cMenuEditBoolItem(tr("Suspend closes video+audio"),	&SuspendClose, trVDR("no"), trVDR("yes"))); | ||||
| 	Add(new cMenuEditBoolItem(tr("Suspend stops x11"), &SuspendX11,	trVDR("no"), trVDR("yes"))); | ||||
|     } | ||||
|     // | ||||
|     //	video | ||||
| @@ -1113,12 +1106,9 @@ void cMenuSetupSoft::Create(void) | ||||
| 	//  auto-crop | ||||
| 	// | ||||
| 	Add(SeparatorItem(tr("Auto-crop"))); | ||||
| 	Add(new cMenuEditIntItem(tr("Autocrop interval (frames)"), | ||||
| 		&AutoCropInterval, 0, 200, tr("off"))); | ||||
| 	Add(new cMenuEditIntItem(tr("Autocrop delay (n * interval)"), | ||||
| 		&AutoCropDelay, 0, 200)); | ||||
| 	Add(new cMenuEditIntItem(tr("Autocrop tolerance (pixel)"), | ||||
| 		&AutoCropTolerance, 0, 32)); | ||||
| 	Add(new cMenuEditIntItem(tr("Autocrop interval (frames)"),	&AutoCropInterval, 0, 200, tr("off"))); | ||||
| 	Add(new cMenuEditIntItem(tr("Autocrop delay (n * interval)"),	&AutoCropDelay, 0, 200)); | ||||
| 	Add(new cMenuEditIntItem(tr("Autocrop tolerance (pixel)"),	&AutoCropTolerance, 0, 32)); | ||||
|     } | ||||
|     // | ||||
|     //	audio | ||||
| @@ -1126,36 +1116,21 @@ void cMenuSetupSoft::Create(void) | ||||
|     Add(CollapsedItem(tr("Audio"), Audio)); | ||||
|  | ||||
|     if (Audio) { | ||||
| 	Add(new cMenuEditIntItem(tr("Audio/Video delay (ms)"), &AudioDelay, | ||||
| 		-1000, 1000)); | ||||
| 	Add(new cMenuEditStraItem(tr("Audio drift correction"), &AudioDrift, 4, | ||||
| 		audiodrift)); | ||||
| 	Add(new cMenuEditBoolItem(tr("Pass-through default"), | ||||
| 		&AudioPassthroughDefault, trVDR("off"), trVDR("on"))); | ||||
| 	Add(new cMenuEditBoolItem(tr("\040\040PCM pass-through"), | ||||
| 		&AudioPassthroughPCM, trVDR("no"), trVDR("yes"))); | ||||
| 	Add(new cMenuEditBoolItem(tr("\040\040AC-3 pass-through"), | ||||
| 		&AudioPassthroughAC3, trVDR("no"), trVDR("yes"))); | ||||
| 	Add(new cMenuEditBoolItem(tr("\040\040E-AC-3 pass-through"), | ||||
| 		&AudioPassthroughEAC3, trVDR("no"), trVDR("yes"))); | ||||
| 	Add(new cMenuEditBoolItem(tr("Enable (E-)AC-3 (decoder) downmix"), | ||||
| 		&AudioDownmix, trVDR("no"), trVDR("yes"))); | ||||
| 	Add(new cMenuEditBoolItem(tr("Volume control"), &AudioSoftvol, | ||||
| 		tr("Hardware"), tr("Software"))); | ||||
| 	Add(new cMenuEditBoolItem(tr("Enable normalize volume"), | ||||
| 		&AudioNormalize, trVDR("no"), trVDR("yes"))); | ||||
| 	Add(new cMenuEditIntItem(tr("  Max normalize factor (/1000)"), | ||||
| 		&AudioMaxNormalize, 0, 10000)); | ||||
| 	Add(new cMenuEditBoolItem(tr("Enable volume compression"), | ||||
| 		&AudioCompression, trVDR("no"), trVDR("yes"))); | ||||
| 	Add(new cMenuEditIntItem(tr("  Max compression factor (/1000)"), | ||||
| 		&AudioMaxCompression, 0, 10000)); | ||||
| 	Add(new cMenuEditIntItem(tr("Reduce stereo volume (/1000)"), | ||||
| 		&AudioStereoDescent, 0, 1000)); | ||||
| 	Add(new cMenuEditIntItem(tr("Audio buffer size (ms)"), | ||||
| 		&AudioBufferTime, 0, 1000)); | ||||
| 	Add(new cMenuEditBoolItem(tr("Enable automatic AES"), &AudioAutoAES, | ||||
| 		trVDR("no"), trVDR("yes"))); | ||||
| 		Add(new cMenuEditIntItem(tr("Audio/Video delay (ms)"), &AudioDelay,	-1000, 1000)); | ||||
| 		Add(new cMenuEditStraItem(tr("Audio drift correction"), &AudioDrift, 4,	audiodrift)); | ||||
| 		Add(new cMenuEditBoolItem(tr("Pass-through default"), &AudioPassthroughDefault, trVDR("off"), trVDR("on"))); | ||||
| 		Add(new cMenuEditBoolItem(tr("\040\040PCM pass-through"), &AudioPassthroughPCM, trVDR("no"), trVDR("yes"))); | ||||
| 		Add(new cMenuEditBoolItem(tr("\040\040AC-3 pass-through"),&AudioPassthroughAC3, trVDR("no"), trVDR("yes"))); | ||||
| 		Add(new cMenuEditBoolItem(tr("\040\040E-AC-3 pass-through"),&AudioPassthroughEAC3, trVDR("no"), trVDR("yes"))); | ||||
| 		Add(new cMenuEditBoolItem(tr("Enable (E-)AC-3 (decoder) downmix"),	&AudioDownmix, trVDR("no"), trVDR("yes"))); | ||||
| 		Add(new cMenuEditBoolItem(tr("Volume control"), &AudioSoftvol,tr("Hardware"), tr("Software"))); | ||||
| 		Add(new cMenuEditBoolItem(tr("Enable normalize volume"),&AudioNormalize, trVDR("no"), trVDR("yes"))); | ||||
| 		Add(new cMenuEditIntItem(tr("  Max normalize factor (/1000)"),&AudioMaxNormalize, 0, 10000)); | ||||
| 		Add(new cMenuEditBoolItem(tr("Enable volume compression"),	&AudioCompression, trVDR("no"), trVDR("yes"))); | ||||
| 		Add(new cMenuEditIntItem(tr("  Max compression factor (/1000)"),&AudioMaxCompression, 0, 10000)); | ||||
| 		Add(new cMenuEditIntItem(tr("Reduce stereo volume (/1000)"),&AudioStereoDescent, 0, 1000)); | ||||
| 		Add(new cMenuEditIntItem(tr("Audio buffer size (ms)"),&AudioBufferTime, 0, 1000)); | ||||
| 		Add(new cMenuEditBoolItem(tr("Enable automatic AES"), &AudioAutoAES,trVDR("no"), trVDR("yes"))); | ||||
|     } | ||||
| #ifdef USE_PIP | ||||
|     // | ||||
| @@ -1163,33 +1138,23 @@ void cMenuSetupSoft::Create(void) | ||||
|     // | ||||
|     Add(CollapsedItem(tr("Picture-In-Picture"), Pip)); | ||||
|     if (Pip) { | ||||
| 	// FIXME: predefined modes/custom mode | ||||
| 	Add(new cMenuEditIntItem(tr("Pip X (%)"), &PipX, 0, 100)); | ||||
| 	Add(new cMenuEditIntItem(tr("Pip Y (%)"), &PipY, 0, 100)); | ||||
| 	Add(new cMenuEditIntItem(tr("Pip Width (%)"), &PipWidth, 0, 100)); | ||||
| 	Add(new cMenuEditIntItem(tr("Pip Height (%)"), &PipHeight, 0, 100)); | ||||
| 	Add(new cMenuEditIntItem(tr("Video X (%)"), &PipVideoX, 0, 100)); | ||||
| 	Add(new cMenuEditIntItem(tr("Video Y (%)"), &PipVideoY, 0, 100)); | ||||
| 	Add(new cMenuEditIntItem(tr("Video Width (%)"), &PipVideoWidth, 0, | ||||
| 		100)); | ||||
| 	Add(new cMenuEditIntItem(tr("Video Height (%)"), &PipVideoHeight, 0, | ||||
| 		100)); | ||||
| 	Add(new cMenuEditIntItem(tr("Alternative Pip X (%)"), &PipAltX, 0, | ||||
| 		100)); | ||||
| 	Add(new cMenuEditIntItem(tr("Alternative Pip Y (%)"), &PipAltY, 0, | ||||
| 		100)); | ||||
| 	Add(new cMenuEditIntItem(tr("Alternative Pip Width (%)"), &PipAltWidth, | ||||
| 		0, 100)); | ||||
| 	Add(new cMenuEditIntItem(tr("Alternative Pip Height (%)"), | ||||
| 		&PipAltHeight, 0, 100)); | ||||
| 	Add(new cMenuEditIntItem(tr("Alternative Video X (%)"), &PipAltVideoX, | ||||
| 		0, 100)); | ||||
| 	Add(new cMenuEditIntItem(tr("Alternative Video Y (%)"), &PipAltVideoY, | ||||
| 		0, 100)); | ||||
| 	Add(new cMenuEditIntItem(tr("Alternative Video Width (%)"), | ||||
| 		&PipAltVideoWidth, 0, 100)); | ||||
| 	Add(new cMenuEditIntItem(tr("Alternative Video Height (%)"), | ||||
| 		&PipAltVideoHeight, 0, 100)); | ||||
| 		// FIXME: predefined modes/custom mode | ||||
| 		Add(new cMenuEditIntItem(tr("Pip X (%)"), &PipX, 0, 100)); | ||||
| 		Add(new cMenuEditIntItem(tr("Pip Y (%)"), &PipY, 0, 100)); | ||||
| 		Add(new cMenuEditIntItem(tr("Pip Width (%)"), &PipWidth, 0, 100)); | ||||
| 		Add(new cMenuEditIntItem(tr("Pip Height (%)"), &PipHeight, 0, 100)); | ||||
| 		Add(new cMenuEditIntItem(tr("Video X (%)"), &PipVideoX, 0, 100)); | ||||
| 		Add(new cMenuEditIntItem(tr("Video Y (%)"), &PipVideoY, 0, 100)); | ||||
| 		Add(new cMenuEditIntItem(tr("Video Width (%)"), &PipVideoWidth, 0,100)); | ||||
| 		Add(new cMenuEditIntItem(tr("Video Height (%)"), &PipVideoHeight, 0,100)); | ||||
| 		Add(new cMenuEditIntItem(tr("Alternative Pip X (%)"), &PipAltX, 0,100)); | ||||
| 		Add(new cMenuEditIntItem(tr("Alternative Pip Y (%)"), &PipAltY, 0,100)); | ||||
| 		Add(new cMenuEditIntItem(tr("Alternative Pip Width (%)"), &PipAltWidth,	0, 100)); | ||||
| 		Add(new cMenuEditIntItem(tr("Alternative Pip Height (%)"),&PipAltHeight, 0, 100)); | ||||
| 		Add(new cMenuEditIntItem(tr("Alternative Video X (%)"), &PipAltVideoX,0, 100)); | ||||
| 		Add(new cMenuEditIntItem(tr("Alternative Video Y (%)"), &PipAltVideoY,0, 100)); | ||||
| 		Add(new cMenuEditIntItem(tr("Alternative Video Width (%)"),	&PipAltVideoWidth, 0, 100)); | ||||
| 		Add(new cMenuEditIntItem(tr("Alternative Video Height (%)"),&PipAltVideoHeight, 0, 100)); | ||||
|     } | ||||
| #endif | ||||
|  | ||||
| @@ -1225,22 +1190,22 @@ eOSState cMenuSetupSoft::ProcessKey(eKeys key) | ||||
|     state = cMenuSetupPage::ProcessKey(key); | ||||
|  | ||||
|     if (key != kNone) { | ||||
| 	// update menu only, if something on the structure has changed | ||||
| 	// this is needed because VDR menus are evil slow | ||||
| 	if (old_general != General || old_video != Video || old_audio != Audio | ||||
| 		// update menu only, if something on the structure has changed | ||||
| 		// this is needed because VDR menus are evil slow | ||||
| 		if (old_general != General || old_video != Video || old_audio != Audio | ||||
| #ifdef USE_PIP | ||||
| 	    || old_pip != Pip | ||||
| 			|| old_pip != Pip | ||||
| #endif | ||||
| 	    || old_osd_size != OsdSize) { | ||||
| 	    Create();			// update menu | ||||
| 	} else { | ||||
| 	    for (i = 0; i < RESOLUTIONS; ++i) { | ||||
| 		if (old_resolution_shown[i] != ResolutionShown[i]) { | ||||
| 		    Create();		// update menu | ||||
| 		    break; | ||||
| 			|| old_osd_size != OsdSize) { | ||||
| 			Create();			// update menu | ||||
| 		} else { | ||||
| 			for (i = 0; i < RESOLUTIONS; ++i) { | ||||
| 				if (old_resolution_shown[i] != ResolutionShown[i]) { | ||||
| 					Create();		// update menu | ||||
| 					break; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	    } | ||||
| 	} | ||||
|     } | ||||
|  | ||||
|     return state; | ||||
| @@ -1443,27 +1408,27 @@ void cMenuSetupSoft::Store(void) | ||||
|     VideoSetHue(ConfigVideoHue); | ||||
|  | ||||
|     for (i = 0; i < RESOLUTIONS; ++i) { | ||||
| 	char buf[128]; | ||||
| 		char buf[128]; | ||||
|  | ||||
| 	snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], "Scaling"); | ||||
| 	SetupStore(buf, ConfigVideoScaling[i] = Scaling[i]); | ||||
| 	snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], "Deinterlace"); | ||||
| 	SetupStore(buf, ConfigVideoDeinterlace[i] = Deinterlace[i]); | ||||
| 	snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], | ||||
| 	    "SkipChromaDeinterlace"); | ||||
| 	SetupStore(buf, ConfigVideoSkipChromaDeinterlace[i] = | ||||
| 	    SkipChromaDeinterlace[i]); | ||||
| 	snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], "InverseTelecine"); | ||||
| 	SetupStore(buf, ConfigVideoInverseTelecine[i] = InverseTelecine[i]); | ||||
| 	snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], "Denoise"); | ||||
| 	SetupStore(buf, ConfigVideoDenoise[i] = Denoise[i]); | ||||
| 	snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], "Sharpen"); | ||||
| 	SetupStore(buf, ConfigVideoSharpen[i] = Sharpen[i]); | ||||
| 		snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], "Scaling"); | ||||
| 		SetupStore(buf, ConfigVideoScaling[i] = Scaling[i]); | ||||
| 		snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], "Deinterlace"); | ||||
| 		SetupStore(buf, ConfigVideoDeinterlace[i] = Deinterlace[i]); | ||||
| 		snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], | ||||
| 			"SkipChromaDeinterlace"); | ||||
| 		SetupStore(buf, ConfigVideoSkipChromaDeinterlace[i] = | ||||
| 			SkipChromaDeinterlace[i]); | ||||
| 		snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], "InverseTelecine"); | ||||
| 		SetupStore(buf, ConfigVideoInverseTelecine[i] = InverseTelecine[i]); | ||||
| 		snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], "Denoise"); | ||||
| 		SetupStore(buf, ConfigVideoDenoise[i] = Denoise[i]); | ||||
| 		snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], "Sharpen"); | ||||
| 		SetupStore(buf, ConfigVideoSharpen[i] = Sharpen[i]); | ||||
|  | ||||
| 	snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], "CutTopBottom"); | ||||
| 	SetupStore(buf, ConfigVideoCutTopBottom[i] = CutTopBottom[i]); | ||||
| 	snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], "CutLeftRight"); | ||||
| 	SetupStore(buf, ConfigVideoCutLeftRight[i] = CutLeftRight[i]); | ||||
| 		snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], "CutTopBottom"); | ||||
| 		SetupStore(buf, ConfigVideoCutTopBottom[i] = CutTopBottom[i]); | ||||
| 		snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], "CutLeftRight"); | ||||
| 		SetupStore(buf, ConfigVideoCutLeftRight[i] = CutLeftRight[i]); | ||||
|     } | ||||
|     VideoSetScaling(ConfigVideoScaling); | ||||
|     VideoSetDeinterlace(ConfigVideoDeinterlace); | ||||
| @@ -1490,18 +1455,18 @@ void cMenuSetupSoft::Store(void) | ||||
|     // FIXME: can handle more audio state changes here | ||||
|     // downmix changed reset audio, to get change direct | ||||
|     if (ConfigAudioDownmix != AudioDownmix) { | ||||
| 	ResetChannelId(); | ||||
| 		ResetChannelId(); | ||||
|     } | ||||
|     ConfigAudioPassthrough = (AudioPassthroughPCM ? CodecPCM : 0) | ||||
| 	| (AudioPassthroughAC3 ? CodecAC3 : 0) | ||||
| 	| (AudioPassthroughEAC3 ? CodecEAC3 : 0); | ||||
|     AudioPassthroughState = AudioPassthroughDefault; | ||||
|     if (AudioPassthroughState) { | ||||
| 	SetupStore("AudioPassthrough", ConfigAudioPassthrough); | ||||
| 	CodecSetAudioPassthrough(ConfigAudioPassthrough); | ||||
| 		SetupStore("AudioPassthrough", ConfigAudioPassthrough); | ||||
| 		CodecSetAudioPassthrough(ConfigAudioPassthrough); | ||||
|     } else { | ||||
| 	SetupStore("AudioPassthrough", -ConfigAudioPassthrough); | ||||
| 	CodecSetAudioPassthrough(0); | ||||
| 		SetupStore("AudioPassthrough", -ConfigAudioPassthrough); | ||||
| 		CodecSetAudioPassthrough(0); | ||||
|     } | ||||
|     SetupStore("AudioDownmix", ConfigAudioDownmix = AudioDownmix); | ||||
|     CodecSetAudioDownmix(ConfigAudioDownmix); | ||||
| @@ -1735,7 +1700,7 @@ void cSoftReceiver::Activate(bool on) | ||||
| 		ConfigPipHeight ? (ConfigPipHeight * height) / 100 : height); | ||||
| 	} | ||||
|     } else { | ||||
| 	PipStop(); | ||||
| 		PipStop(); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -1923,13 +1888,13 @@ static void NewPip(int channel_nr) | ||||
| static void TogglePip(void) | ||||
| { | ||||
|     if (PipReceiver) { | ||||
| 	int attached; | ||||
| 		int attached; | ||||
|  | ||||
| 	attached = PipReceiver->IsAttached(); | ||||
| 	DelPip(); | ||||
| 	if (attached) {			// turn off only if last PIP was on | ||||
| 	    return; | ||||
| 	} | ||||
| 		attached = PipReceiver->IsAttached(); | ||||
| 		DelPip(); | ||||
| 		if (attached) {			// turn off only if last PIP was on | ||||
| 			return; | ||||
| 		} | ||||
|     } | ||||
|     NewPip(PipChannelNr); | ||||
| } | ||||
| @@ -2072,6 +2037,7 @@ void cSoftHdMenu::Create(void) | ||||
|     int duped; | ||||
|     int dropped; | ||||
|     int counter; | ||||
| 	float frametime; | ||||
|  | ||||
|     current = Current();		// get current menu item index | ||||
|     Clear();				// clear the menu | ||||
| @@ -2106,12 +2072,9 @@ void cSoftHdMenu::Create(void) | ||||
| #endif | ||||
|     Add(new cOsdItem(NULL, osUnknown, false)); | ||||
|     Add(new cOsdItem(NULL, osUnknown, false)); | ||||
|     GetStats(&missed, &duped, &dropped, &counter); | ||||
|     Add(new | ||||
| 	cOsdItem(cString::sprintf(tr | ||||
| 		(" Frames missed(%d) duped(%d) dropped(%d) total(%d)"), missed, | ||||
| 		duped, dropped, counter), osUnknown, false)); | ||||
|  | ||||
|     GetStats(&missed, &duped, &dropped, &counter, &frametime); | ||||
|     Add(new	cOsdItem(cString::sprintf(tr(" Frames missed(%d) duped(%d) dropped(%d) total(%d)"), missed, duped, dropped, counter), osUnknown, false)); | ||||
|     Add(new	cOsdItem(cString::sprintf(tr(" Frame Process time %2.2fms"), frametime), osUnknown, false)); | ||||
|     SetCurrent(Get(current));		// restore selected menu entry | ||||
|     Display();				// display build menu | ||||
| } | ||||
|   | ||||
| @@ -3403,15 +3403,15 @@ void Resume(void) | ||||
| **	@param[out] dropped	dropped frames | ||||
| **	@param[out] count	number of decoded frames | ||||
| */ | ||||
| void GetStats(int *missed, int *duped, int *dropped, int *counter) | ||||
| void GetStats(int *missed, int *duped, int *dropped, int *counter, float *frametime) | ||||
| { | ||||
|     *missed = 0; | ||||
|     *duped = 0; | ||||
|     *dropped = 0; | ||||
|     *counter = 0; | ||||
| 	*frametime = 0.0f; | ||||
|     if (MyVideoStream->HwDecoder) { | ||||
| 	VideoGetStats(MyVideoStream->HwDecoder, missed, duped, dropped, | ||||
| 	    counter); | ||||
| 		VideoGetStats(MyVideoStream->HwDecoder, missed, duped, dropped, counter, frametime); | ||||
|     } | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -98,7 +98,7 @@ extern "C" | ||||
|     extern void Resume(void); | ||||
|  | ||||
|     /// Get decoder statistics | ||||
|     extern void GetStats(int *, int *, int *, int *); | ||||
|     extern void GetStats(int *, int *, int *, int *, float *); | ||||
|     /// C plugin scale video | ||||
|     extern void ScaleVideo(int, int, int, int); | ||||
|  | ||||
|   | ||||
							
								
								
									
										22
									
								
								video.c
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								video.c
									
									
									
									
									
								
							| @@ -279,7 +279,7 @@ typedef struct _video_module_ | ||||
|     void (*const ResetStart) (const VideoHwDecoder *); | ||||
|     void (*const SetTrickSpeed) (const VideoHwDecoder *, int); | ||||
|     uint8_t *(*const GrabOutput)(int *, int *, int *); | ||||
|     void (*const GetStats) (VideoHwDecoder *, int *, int *, int *, int *); | ||||
|     void (*const GetStats) (VideoHwDecoder *, int *, int *, int *, int *, float *); | ||||
|     void (*const SetBackground) (uint32_t); | ||||
|     void (*const SetVideoMode) (void); | ||||
|     void (*const ResetAutoCrop) (void); | ||||
| @@ -1624,6 +1624,7 @@ typedef struct _cuvid_decoder_ | ||||
|     int FramesDropped;			///< number of frames dropped | ||||
|     int FrameCounter;			///< number of frames decoded | ||||
|     int FramesDisplayed;		///< number of frames displayed | ||||
| 	float Frameproc;				/// Time to process frame | ||||
| } CuvidDecoder; | ||||
|  | ||||
| static CuvidDecoder *CuvidDecoders[2];	///< open decoder streams | ||||
| @@ -3062,15 +3063,18 @@ static void CuvidDisplayFrame(void) | ||||
| { | ||||
|  | ||||
| 	uint64_t first_time, diff, akt_time; | ||||
| 	static uint64_t last_time; | ||||
| 	static uint64_t last_time = 0; | ||||
| 	int i; | ||||
| 	static unsigned int Count; | ||||
| 	int filled; | ||||
| 	CuvidDecoder *decoder; | ||||
|  | ||||
| //	glXMakeCurrent(XlibDisplay, VideoWindow, GlxSharedContext); | ||||
|  | ||||
| 	glXMakeCurrent(XlibDisplay, VideoWindow, GlxContext);	 | ||||
| 	CuvidDecoders[0]->Frameproc = (float)(GetusTicks()-last_time)/1000000.0; | ||||
| //	printf("Time used %2.2f\n",CuvidDecoders[0]->Frameproc); | ||||
|     glXWaitVideoSyncSGI (2, (Count + 1) % 2, &Count);   // wait for previous frame to swap | ||||
| 	last_time = GetusTicks(); | ||||
| 	glClear(GL_COLOR_BUFFER_BIT); | ||||
| 	// | ||||
| 	//	Render videos into output | ||||
| @@ -3100,6 +3104,7 @@ static void CuvidDisplayFrame(void) | ||||
| 		} | ||||
| 	} | ||||
| 	// | ||||
| 	    | ||||
| 	//	add osd to surface | ||||
| 	// | ||||
| 	if (OsdShown) {		 | ||||
| @@ -3219,12 +3224,13 @@ static void CuvidSetTrickSpeed(CuvidDecoder * decoder, int speed) | ||||
| ///	@param[out] count	number of decoded frames | ||||
| /// | ||||
| void CuvidGetStats(CuvidDecoder * decoder, int *missed, int *duped, | ||||
| 	int *dropped, int *counter) | ||||
| 	int *dropped, int *counter, float *frametime) | ||||
| { | ||||
| 	*missed = decoder->FramesMissed; | ||||
| 	*duped = decoder->FramesDuped; | ||||
| 	*dropped = decoder->FramesDropped; | ||||
| 	*counter = decoder->FrameCounter; | ||||
| 	*frametime = decoder->Frameproc; | ||||
| } | ||||
|  | ||||
| /// | ||||
| @@ -3612,7 +3618,7 @@ static const VideoModule CuvidModule = { | ||||
|     .SetTrickSpeed = (void (*const) (const VideoHwDecoder *, int))CuvidSetTrickSpeed, | ||||
|     .GrabOutput = CuvidGrabOutputSurface, | ||||
|     .GetStats = (void (*const) (VideoHwDecoder *, int *, int *, int *, | ||||
| 	    int *))CuvidGetStats, | ||||
| 	    int *, float *))CuvidGetStats, | ||||
|     .SetBackground = CuvidSetBackground, | ||||
|     .SetVideoMode = CuvidSetVideoMode, | ||||
|   //  .ResetAutoCrop = CuvidResetAutoCrop, | ||||
| @@ -3783,7 +3789,7 @@ static const VideoModule NoopModule = { | ||||
| 	(void (*const) (const VideoHwDecoder *, int))NoopSetTrickSpeed, | ||||
|     .GrabOutput = NoopGrabOutputSurface, | ||||
|     .GetStats = (void (*const) (VideoHwDecoder *, int *, int *, int *, | ||||
| 	    int *))NoopGetStats, | ||||
| 	    int *, float *))NoopGetStats, | ||||
| #endif | ||||
|     .SetBackground = NoopSetBackground, | ||||
|     .SetVideoMode = NoopVoid, | ||||
| @@ -4625,9 +4631,9 @@ uint8_t *VideoGrabService(int *size, int *width, int *height) | ||||
| ///	@param[out] count	number of decoded frames | ||||
| /// | ||||
| void VideoGetStats(VideoHwDecoder * hw_decoder, int *missed, int *duped, | ||||
|     int *dropped, int *counter) | ||||
|     int *dropped, int *counter, float *frametime) | ||||
| { | ||||
|     VideoUsedModule->GetStats(hw_decoder, missed, duped, dropped, counter); | ||||
|     VideoUsedModule->GetStats(hw_decoder, missed, duped, dropped, counter, frametime); | ||||
| } | ||||
|  | ||||
| /// | ||||
|   | ||||
							
								
								
									
										2
									
								
								video.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								video.h
									
									
									
									
									
								
							| @@ -210,7 +210,7 @@ extern uint8_t *VideoGrab(int *, int *, int *, int); | ||||
| extern uint8_t *VideoGrabService(int *, int *, int *); | ||||
|  | ||||
|     /// Get decoder statistics. | ||||
| extern void VideoGetStats(VideoHwDecoder *, int *, int *, int *, int *); | ||||
| extern void VideoGetStats(VideoHwDecoder *, int *, int *, int *, int *, float *); | ||||
|  | ||||
|     /// Get video stream size | ||||
| extern void VideoGetVideoSize(VideoHwDecoder *, int *, int *, int *, int *); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user