mirror of
https://projects.vdr-developer.org/git/vdr-plugin-softhddevice.git
synced 2023-10-10 19:16:51 +02:00
Workaround for ffmpeg 1.1.x get_format bug.
This commit is contained in:
parent
746746d5b7
commit
21e4f4ee04
17
video.c
17
video.c
@ -152,6 +152,15 @@ typedef enum
|
|||||||
#include <libavcodec/vaapi.h>
|
#include <libavcodec/vaapi.h>
|
||||||
#include <libavutil/pixdesc.h>
|
#include <libavutil/pixdesc.h>
|
||||||
|
|
||||||
|
#if LIBAVCODEC_VERSION_INT == AV_VERSION_INT(54,86,100)
|
||||||
|
///
|
||||||
|
/// ffmpeg version 1.1.1 calls get_format with zero width and height
|
||||||
|
/// for H264 codecs.
|
||||||
|
/// since version 1.1.3 get_format is called twice.
|
||||||
|
///
|
||||||
|
#define FFMPEG_BUG1_WORKAROUND ///< get_format bug workaround
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
#include "video.h"
|
#include "video.h"
|
||||||
#include "audio.h"
|
#include "audio.h"
|
||||||
@ -2429,6 +2438,7 @@ static void VaapiSetup(VaapiDecoder * decoder,
|
|||||||
static VASurfaceID VaapiGetSurface(VaapiDecoder * decoder,
|
static VASurfaceID VaapiGetSurface(VaapiDecoder * decoder,
|
||||||
const AVCodecContext * video_ctx)
|
const AVCodecContext * video_ctx)
|
||||||
{
|
{
|
||||||
|
#ifdef FFMPEG_BUG1_WORKAROUND
|
||||||
// get_format not called with valid informations.
|
// get_format not called with valid informations.
|
||||||
if (video_ctx->width != decoder->InputWidth
|
if (video_ctx->width != decoder->InputWidth
|
||||||
|| video_ctx->height != decoder->InputHeight) {
|
|| video_ctx->height != decoder->InputHeight) {
|
||||||
@ -2459,6 +2469,7 @@ static VASurfaceID VaapiGetSurface(VaapiDecoder * decoder,
|
|||||||
}
|
}
|
||||||
// FIXME: too late to switch to software rending on failures
|
// FIXME: too late to switch to software rending on failures
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
return VaapiGetSurface0(decoder);
|
return VaapiGetSurface0(decoder);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2659,7 +2670,7 @@ static enum PixelFormat Vaapi_get_format(VaapiDecoder * decoder,
|
|||||||
decoder->InputWidth = 0;
|
decoder->InputWidth = 0;
|
||||||
decoder->InputHeight = 0;
|
decoder->InputHeight = 0;
|
||||||
|
|
||||||
#if 0
|
#ifndef FFMPEG_BUG1_WORKAROUND
|
||||||
if (video_ctx->width && video_ctx->height) {
|
if (video_ctx->width && video_ctx->height) {
|
||||||
VAStatus status;
|
VAStatus status;
|
||||||
|
|
||||||
@ -6743,6 +6754,7 @@ static void VdpauSetupOutput(VdpauDecoder * decoder)
|
|||||||
static unsigned VdpauGetSurface(VdpauDecoder * decoder,
|
static unsigned VdpauGetSurface(VdpauDecoder * decoder,
|
||||||
const AVCodecContext * video_ctx)
|
const AVCodecContext * video_ctx)
|
||||||
{
|
{
|
||||||
|
#ifdef FFMPEG_BUG1_WORKAROUND
|
||||||
// get_format not called with valid informations.
|
// get_format not called with valid informations.
|
||||||
if (video_ctx->width != decoder->InputWidth
|
if (video_ctx->width != decoder->InputWidth
|
||||||
|| video_ctx->height != decoder->InputHeight) {
|
|| video_ctx->height != decoder->InputHeight) {
|
||||||
@ -6766,6 +6778,7 @@ static unsigned VdpauGetSurface(VdpauDecoder * decoder,
|
|||||||
|
|
||||||
VdpauSetupOutput(decoder);
|
VdpauSetupOutput(decoder);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
return VdpauGetSurface0(decoder);
|
return VdpauGetSurface0(decoder);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6925,7 +6938,7 @@ static enum PixelFormat Vdpau_get_format(VdpauDecoder * decoder,
|
|||||||
decoder->InputWidth = 0;
|
decoder->InputWidth = 0;
|
||||||
decoder->InputHeight = 0;
|
decoder->InputHeight = 0;
|
||||||
|
|
||||||
#if 0
|
#ifndef FFMPEG_BUG1_WORKAROUND
|
||||||
if (video_ctx->width && video_ctx->height) {
|
if (video_ctx->width && video_ctx->height) {
|
||||||
VdpStatus status;
|
VdpStatus status;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user