mirror of
				https://projects.vdr-developer.org/git/vdr-plugin-softhddevice.git
				synced 2023-10-10 17:16:51 +00:00 
			
		
		
		
	Initial vdpau support.
This commit is contained in:
		
							
								
								
									
										12
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								Makefile
									
									
									
									
									
								
							@@ -15,12 +15,18 @@ PLUGIN = softhddevice
 | 
			
		||||
 | 
			
		||||
VERSION = $(shell grep 'static const char \*const VERSION *=' $(PLUGIN).cpp | awk '{ print $$7 }' | sed -e 's/[";]//g')
 | 
			
		||||
 | 
			
		||||
### Configuration (edit this for your needs)
 | 
			
		||||
 | 
			
		||||
CONFIG := -DDEBUG
 | 
			
		||||
CONFIG += $(shell pkg-config --exists libva && echo "-DUSE_VAAPI")
 | 
			
		||||
CONFIG += $(shell pkg-config --exists vdpau && echo "-DUSE_VDPAU")
 | 
			
		||||
 | 
			
		||||
### The C++ compiler and options:
 | 
			
		||||
 | 
			
		||||
CXX      ?= g++
 | 
			
		||||
CXXFLAGS ?= -g -O3 -W -Wall -Wextra -Woverloaded-virtual -fPIC
 | 
			
		||||
CXXFLAGS ?= -g -O2 -W -Wall -Wextra -Woverloaded-virtual -fPIC
 | 
			
		||||
override CXXFLAGS += $(DEFINES) $(INCLUDES)
 | 
			
		||||
CFLAGS   ?=	-g -O3 -W -Wall -Wextra -Winit-self \
 | 
			
		||||
CFLAGS   ?=	-g -O2 -W -Wall -Wextra -Winit-self \
 | 
			
		||||
		-Wdeclaration-after-statement -fPIC
 | 
			
		||||
#CFLAGS	+=	-Werror
 | 
			
		||||
override CFLAGS   +=	$(DEFINES) $(INCLUDES) \
 | 
			
		||||
@@ -60,7 +66,7 @@ PACKAGE = vdr-$(ARCHIVE)
 | 
			
		||||
 | 
			
		||||
INCLUDES += -I$(VDRDIR)/include
 | 
			
		||||
 | 
			
		||||
DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
 | 
			
		||||
DEFINES += $(CONFIG) -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
 | 
			
		||||
 | 
			
		||||
### The object files (add further files here):
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								audio.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								audio.c
									
									
									
									
									
								
							@@ -903,8 +903,10 @@ void AudioInit(void)
 | 
			
		||||
    int chan;
 | 
			
		||||
 | 
			
		||||
#ifndef DEBUG
 | 
			
		||||
    // display alsa error messages
 | 
			
		||||
    // disable display alsa error messages
 | 
			
		||||
    snd_lib_error_set_handler(AlsaNoopCallback);
 | 
			
		||||
#else
 | 
			
		||||
    (void)AlsaNoopCallback;
 | 
			
		||||
#endif
 | 
			
		||||
    AlsaRingBuffer = RingBufferNew(48000 * 8 * 2);	// ~1s 8ch 16bit
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								codec.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								codec.c
									
									
									
									
									
								
							@@ -740,8 +740,10 @@ static void CodecNoopCallback( __attribute__ ((unused))
 | 
			
		||||
void CodecInit(void)
 | 
			
		||||
{
 | 
			
		||||
#ifndef DEBUG
 | 
			
		||||
    // display ffmpeg error messages
 | 
			
		||||
    // disable display ffmpeg error messages
 | 
			
		||||
    av_log_set_callback(CodecNoopCallback);
 | 
			
		||||
#else
 | 
			
		||||
    (void)CodecNoopCallback;
 | 
			
		||||
#endif
 | 
			
		||||
    avcodec_register_all();		// register all formats and codecs
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										20
									
								
								softhddev.c
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								softhddev.c
									
									
									
									
									
								
							@@ -42,8 +42,6 @@
 | 
			
		||||
#include "video.h"
 | 
			
		||||
#include "codec.h"
 | 
			
		||||
 | 
			
		||||
#define DEBUG
 | 
			
		||||
 | 
			
		||||
static char BrokenThreadsAndPlugins;	///< broken vdr threads and plugins
 | 
			
		||||
 | 
			
		||||
//////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
@@ -246,7 +244,6 @@ static void VideoEnqueue(int64_t pts, const void *data, int size)
 | 
			
		||||
    avpkt = &VideoPacketRb[VideoPacketWrite];
 | 
			
		||||
    if (!avpkt->stream_index) {		// add pts only for first added
 | 
			
		||||
	avpkt->pts = pts;
 | 
			
		||||
	avpkt->dts = pts;
 | 
			
		||||
    }
 | 
			
		||||
    if (avpkt->stream_index + size + FF_INPUT_BUFFER_PADDING_SIZE >=
 | 
			
		||||
	avpkt->size) {
 | 
			
		||||
@@ -257,10 +254,12 @@ static void VideoEnqueue(int64_t pts, const void *data, int size)
 | 
			
		||||
	av_grow_packet(avpkt,
 | 
			
		||||
	    ((size + FF_INPUT_BUFFER_PADDING_SIZE + VIDEO_BUFFER_SIZE / 2)
 | 
			
		||||
		/ (VIDEO_BUFFER_SIZE / 2)) * (VIDEO_BUFFER_SIZE / 2));
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
	if (avpkt->size <
 | 
			
		||||
	    avpkt->stream_index + size + FF_INPUT_BUFFER_PADDING_SIZE) {
 | 
			
		||||
	    abort();
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
    }
 | 
			
		||||
#ifdef xxDEBUG
 | 
			
		||||
    if (!avpkt->stream_index) {		// debug save time of first packet
 | 
			
		||||
@@ -542,7 +541,21 @@ int PlayVideo(const uint8_t * data, int size)
 | 
			
		||||
	pts =
 | 
			
		||||
	    (int64_t) (data[9] & 0x0E) << 29 | data[10] << 22 | (data[11] &
 | 
			
		||||
	    0xFE) << 14 | data[12] << 7 | (data[13] & 0xFE) >> 1;
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
	//Debug(3, "video: pts %#012" PRIx64 "\n", pts);
 | 
			
		||||
	if (data[13] != (((pts & 0x7F) << 1) | 1)) {
 | 
			
		||||
	    abort();
 | 
			
		||||
	}
 | 
			
		||||
	if (data[12] != ((pts >> 7) & 0xFF)) {
 | 
			
		||||
	    abort();
 | 
			
		||||
	}
 | 
			
		||||
	if (data[11] != ((((pts >> 15) & 0x7F) << 1) | 1)) {
 | 
			
		||||
	    abort();
 | 
			
		||||
	}
 | 
			
		||||
	if (data[10] != ((pts >> 22) & 0xFF)) {
 | 
			
		||||
	    abort();
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
    }
 | 
			
		||||
    // FIXME: no valid mpeg2/h264 detection yet
 | 
			
		||||
 | 
			
		||||
@@ -627,6 +640,7 @@ void SetPlayMode(void)
 | 
			
		||||
void Clear(void)
 | 
			
		||||
{
 | 
			
		||||
    VideoClearBuffers = 1;
 | 
			
		||||
    // FIXME: avcodec_flush_buffers
 | 
			
		||||
    // FIXME: flush audio buffers
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user