Dear visitor, welcome to VDR Portal. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.
This post has been edited 1 times, last edit by "cmsa" (Feb 27th 2012, 8:02am)

This post has been edited 1 times, last edit by "cmsa" (Feb 27th 2012, 8:11am)
|
|
Source code |
1 2 3 4 5 6 7 |
Feb 27 09:15:17 i3v vdr: postproc: video postprocessor available Feb 27 09:15:17 i3v vdr: postproc returned 2 filters Feb 27 09:15:17 i3v vdr: postproc returned 2 interlacers Feb 27 09:15:17 i3v vdr: postproc filter 0 is noise reduction Feb 27 09:15:17 i3v vdr: postproc filter 1 is deinterlacer Feb 27 09:15:17 i3v vdr: postproc deinterlacer 0 is bob Feb 27 09:15:17 i3v vdr: postproc deinterlacer 1 is weave |
|
|
Source code |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
// cmsa: Interlacing
evp = VaapiFindProfile(profiles, profile_n, VAEntrypointVideoProc);
if (evp == -1) {
Warning(_("postproc: unsupported: video postprocessor\n"));
return; //oops
} else {
Warning(_("postproc: video postprocessor available\n"));
}
vaQueryVideoProcFilters(decoder->VaDisplay, decoder->VaapiContext[0].context_id,
filters, &num_filters);
Warning(_("postproc returned %d filters\n"), num_filters);
// vaQueryVideoProcFilterCaps(decoder->VaDisplay, decoder->VaapiContext[0].context_id, VAProcFilterNoiseReduction, &denoise_caps, &num_denoise_caps);
unsigned int num_deinterlacing_caps = 20;
VAProcDeinterlacingType deinterlacing_caps[20];
vaQueryVideoProcFilterCaps(decoder->VaDisplay, decoder->VaapiContext[0].context_id, VAProcFilterDeinterlacing, deinterlacing_caps, &num_deinterlacing_caps);
Warning(_("postproc returned %d interlacers\n"), num_deinterlacing_caps);
unsigned int i, j;
for (i=0; i<num_filters; i++) {
switch (filters[i]) {
case VAProcFilterNoiseReduction:
Warning(_("postproc filter %d is noise reduction\n"), i);
break;
case VAProcFilterDeinterlacing:
Warning(_("postproc filter %d is deinterlacer\n"), i);
for (j=0; j<num_deinterlacing_caps; j++) {
int t;
t = ((VAProcFilterCapDeinterlacing *)&(deinterlacing_caps[j]))->type;
switch (t) {
case VAProcDeinterlacingNone:
Warning(_("postproc deinterlacer %d is none\n"), j);
break;
case VAProcDeinterlacingBob:
Warning(_("postproc deinterlacer %d is bob\n"), j);
break;
case VAProcDeinterlacingWeave:
Warning(_("postproc deinterlacer %d is weave\n"), j);
break;
case VAProcDeinterlacingMotionAdaptive:
Warning(_("postproc deinterlacer %d is motion adaptive\n"), j);
break;
case VAProcDeinterlacingMotionCompensated:
Warning(_("postproc deinterlacer %d is motion compensated\n"), j);
break;
default:
Warning(_("postproc deinterlacer %d is unknown\n"), j);
break;
}
}
break;
default:
Warning(_("postproc filter %d is unknown\n"), i);
break;
}
|
|
|
Source code |
1 |
gcc -ggdb -o vaapi-killer chaos/vaapi.c `pkg-config --libs libva-x11 libva-glx libva` |
Als interessierter Laie würde ich gerne etwas zur Theorie der Bildaufbereitung erfahren. Es geht um den in softhddevice erwähnten Known bugs VA-API 1080i does no v-sync, wie wir es auch in diesem Beitrag kurz andiskutiert hatten.
Lässt es sich kurz erläutern, welche algorithmische Mechanik hinter diesem syncing steht?
Das ist genau mein Punkt.Zurück zu VA-API. Hier sollte vaPutSurface sich um den v-sync kümmern.
Also man ruft einfach vaPutSurface, wenn eine Frame noch angezeigt wird, dann warte diese Funktion bis die Nächste angezeigt wird.
Siehe Beispiel aus libva "putsurface" bzw. "test/putsurface/" für den Source.
Wenn man den Bildschirm mit 50 Hz laufen lässt, dann braucht vaPutSurface im Schnitt 20ms und mit 60 Hz dann 16.6ms.
|
|
Source code |
1 2 3 4 |
187: while (1) {
209: vaPutSurface();
238: sleep(interFrameGap);
367: }
|
Weil in Kürze gibt es einen Update der die Advanced Deinterlacer für die
normalen Routinen entfernt.
Wie die bisherige Diskussion verstanden habe, können libva/i965 sowieso nur bob/weave. Was hat sich denn da verschlechtert?
Quoted from " Gwenole Beauchesne"
Avoid advanced deinterlacing kernels as they allocate extra temporary surfaces, which are useless for such simple tasks. i.e. display either field of an interlaced surface.
Wenn der staging Branch verwendet wird, kann man sehen, wie sich Intel die Programmierung der Videopipeline vorstellt.
Wie die bisherige Diskussion verstanden habe, können libva/i965 sowieso nur bob/weave. Was hat sich denn da verschlechtert?
Weil in Kürze gibt es einen Update der die Advanced Deinterlacer für die
normalen Routinen entfernt.
Wie kommst du darauf? Meinst du das hier?
Wie die bisherige Diskussion verstanden habe, können libva/i965 sowieso nur bob/weave. Was hat sich denn da verschlechtert?
Quoted from " Gwenole Beauchesne"
Avoid advanced deinterlacing kernels as they allocate extra temporary surfaces, which are useless for such simple tasks. i.e. display either field of an interlaced surface.
