Add A-V info output and compile time option.

This commit is contained in:
Johns 2012-02-01 23:12:45 +01:00
parent a7389111ff
commit 91dbe46786
4 changed files with 38 additions and 22 deletions

View File

@ -1,6 +1,7 @@
User johns User johns
Date: Date:
Add A-V info output and compile time option.
Fix bug: VA-API intel software decoder broken by aspect commit. Fix bug: VA-API intel software decoder broken by aspect commit.
Add support for 4:3 output modes. Add support for 4:3 output modes.
Quicker auto-crop after channel switch. Quicker auto-crop after channel switch.

View File

@ -19,6 +19,7 @@ GIT_REV = $(shell git describe --always 2>/dev/null)
### Configuration (edit this for your needs) ### Configuration (edit this for your needs)
CONFIG := #-DDEBUG CONFIG := #-DDEBUG
CONFIG += -DAV_INFO
#CONFIG += -DHAVE_PTHREAD_NAME #CONFIG += -DHAVE_PTHREAD_NAME
CONFIG += $(shell pkg-config --exists vdpau && echo "-DUSE_VDPAU") CONFIG += $(shell pkg-config --exists vdpau && echo "-DUSE_VDPAU")
CONFIG += $(shell pkg-config --exists libva && echo "-DUSE_VAAPI") CONFIG += $(shell pkg-config --exists libva && echo "-DUSE_VAAPI")

1
Todo
View File

@ -51,6 +51,7 @@ libva:
yaepghd (VaapiSetOutputPosition) support yaepghd (VaapiSetOutputPosition) support
can associate only displayed part of osd can associate only displayed part of osd
grab image for va-api grab image for va-api
remove stderr output of libva init
still many: (workaround export NO_MPEG_HW=1) still many: (workaround export NO_MPEG_HW=1)
[drm:i915_hangcheck_elapsed] *ERROR* Hangcheck timer elapsed... GPU hung [drm:i915_hangcheck_elapsed] *ERROR* Hangcheck timer elapsed... GPU hung
[drm:i915_wait_request] *ERROR* i915_wait_request returns -11 ... [drm:i915_wait_request] *ERROR* i915_wait_request returns -11 ...

57
video.c
View File

@ -338,6 +338,29 @@ static int64_t VideoDeltaPTS; ///< FIXME: fix pts
static void VideoThreadLock(void); ///< lock video thread static void VideoThreadLock(void); ///< lock video thread
static void VideoThreadUnlock(void); ///< unlock video thread static void VideoThreadUnlock(void); ///< unlock video thread
#if defined(DEBUG) || defined(AV_INFO)
///
/// Nice time-stamp string.
///
static const char *VideoTimeStampString(int64_t ts)
{
static char buf[64];
int hh;
int mm;
int ss;
int uu;
ts = ts / 90;
uu = ts % 1000;
ss = (ts / 1000) % 60;
mm = (ts / 60000) % 60;
hh = ts / 3600000;
snprintf(buf, sizeof(buf), "%2d:%02d:%02d.%03d", hh, mm, ss, uu);
return buf;
}
#endif
/// ///
/// Update video pts. /// Update video pts.
/// ///
@ -3683,6 +3706,7 @@ static void VaapiAdvanceFrame(void)
} else if (filled == 1) { } else if (filled == 1) {
++decoder->FramesDuped; ++decoder->FramesDuped;
decoder->DropNextFrame = 0; decoder->DropNextFrame = 0;
// FIXME: don't warn after stream start
Warning(_ Warning(_
("video: display buffer empty, duping frame (%d/%d) %d\n"), ("video: display buffer empty, duping frame (%d/%d) %d\n"),
decoder->FramesDuped, decoder->FrameCounter, decoder->FramesDuped, decoder->FrameCounter,
@ -3837,20 +3861,14 @@ static void VaapiSyncDisplayFrame(VaapiDecoder * decoder)
decoder->DropNextFrame = 1; decoder->DropNextFrame = 1;
} }
} }
#ifdef DEBUG #if defined(DEBUG) || defined(AV_INFO)
// debug audio/video sync // debug audio/video sync
if (decoder->DupNextFrame || decoder->DropNextFrame if (decoder->DupNextFrame || decoder->DropNextFrame
|| !(decoder->FramesDisplayed % (50 * 10))) { || !(decoder->FramesDisplayed % (50 * 10))) {
static int64_t last_video_clock; Info("video: %s%+5" PRId64 " %4" PRId64 " %3d/\\ms %3d v-buf\n",
VideoTimeStampString(video_clock),
Debug(3, (video_clock - audio_clock) / 90, AudioGetDelay() / 90,
"video: %6" PRId64 " %6" PRId64 " pts %+4d %4" PRId64 " %+4" PRId64 (int)VideoDeltaPTS / 90, atomic_read(&VideoPacketsFilled));
" ms %3d bufs\n", video_clock - last_video_clock,
audio_clock - video_clock, (int)(audio_clock - video_clock) / 90,
AudioGetDelay() / 90, VideoDeltaPTS / 90,
atomic_read(&VideoPacketsFilled));
last_video_clock = video_clock;
} }
#endif #endif
} }
@ -6620,6 +6638,7 @@ static void VdpauAdvanceFrame(void)
// keep use of last surface // keep use of last surface
++decoder->FramesDuped; ++decoder->FramesDuped;
decoder->DropNextFrame = 0; decoder->DropNextFrame = 0;
// FIXME: don't warn after stream start
Warning(_ Warning(_
("video: display buffer empty, duping frame (%d/%d) %d\n"), ("video: display buffer empty, duping frame (%d/%d) %d\n"),
decoder->FramesDuped, decoder->FrameCounter, decoder->FramesDuped, decoder->FrameCounter,
@ -6775,20 +6794,14 @@ static void VdpauSyncDisplayFrame(VdpauDecoder * decoder)
decoder->DropNextFrame = 1; decoder->DropNextFrame = 1;
} }
} }
#ifdef DEBUG #if defined(DEBUG) || defined(AV_INFO)
// debug audio/video sync // debug audio/video sync
if (decoder->DupNextFrame || decoder->DropNextFrame if (decoder->DupNextFrame || decoder->DropNextFrame
|| !(decoder->FramesDisplayed % (50 * 10))) { || !(decoder->FramesDisplayed % (50 * 10))) {
static int64_t last_video_clock; Info("video: %s%+5" PRId64 " %4" PRId64 " %3d/\\ms %3d v-buf\n",
VideoTimeStampString(video_clock),
Debug(3, (video_clock - audio_clock) / 90, AudioGetDelay() / 90,
"video: %6" PRId64 " %6" PRId64 " pts %+4d %4" PRId64 " %+4" PRId64 (int)VideoDeltaPTS / 90, atomic_read(&VideoPacketsFilled));
" ms %3d bufs\n", video_clock - last_video_clock,
audio_clock - video_clock, (int)(audio_clock - video_clock) / 90,
AudioGetDelay() / 90, VideoDeltaPTS / 90,
atomic_read(&VideoPacketsFilled));
last_video_clock = video_clock;
} }
#endif #endif
} }