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