mirror of
				https://projects.vdr-developer.org/git/vdr-plugin-softhddevice.git
				synced 2023-10-10 17:16:51 +00:00 
			
		
		
		
	Fix bug: no sound with video output "none".
This commit is contained in:
		
							
								
								
									
										18
									
								
								softhddev.c
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								softhddev.c
									
									
									
									
									
								
							@@ -51,7 +51,7 @@
 | 
				
			|||||||
#include "codec.h"
 | 
					#include "codec.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef DEBUG
 | 
					#ifdef DEBUG
 | 
				
			||||||
static int H264Dump(const uint8_t * data, int size);
 | 
					static int DumpH264(const uint8_t * data, int size);
 | 
				
			||||||
static void DumpMpeg(const uint8_t * data, int size);
 | 
					static void DumpMpeg(const uint8_t * data, int size);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -989,8 +989,8 @@ int PlayAudio(const uint8_t * data, int size, uint8_t id)
 | 
				
			|||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    // soft limit buffer full
 | 
					    // soft limit buffer full
 | 
				
			||||||
    if (AudioUsedBytes() > AUDIO_MIN_BUFFER_FREE && (!AudioSyncStream
 | 
					    if (AudioSyncStream && VideoGetBuffers(AudioSyncStream) > 3
 | 
				
			||||||
	    || VideoGetBuffers(AudioSyncStream) > 3)) {
 | 
						&& AudioUsedBytes() > AUDIO_MIN_BUFFER_FREE) {
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    // PES header 0x00 0x00 0x01 ID
 | 
					    // PES header 0x00 0x00 0x01 ID
 | 
				
			||||||
@@ -1213,8 +1213,8 @@ int PlayTsAudio(const uint8_t * data, int size)
 | 
				
			|||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    // soft limit buffer full
 | 
					    // soft limit buffer full
 | 
				
			||||||
    if (AudioUsedBytes() > AUDIO_MIN_BUFFER_FREE && (!AudioSyncStream
 | 
					    if (AudioSyncStream && VideoGetBuffers(AudioSyncStream) > 3
 | 
				
			||||||
	    || VideoGetBuffers(AudioSyncStream) > 3)) {
 | 
						&& AudioUsedBytes() > AUDIO_MIN_BUFFER_FREE) {
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1427,7 +1427,7 @@ static void VideoNextPacket(VideoStream * stream, int codec_id)
 | 
				
			|||||||
    memset(avpkt->data + avpkt->stream_index, 0, FF_INPUT_BUFFER_PADDING_SIZE);
 | 
					    memset(avpkt->data + avpkt->stream_index, 0, FF_INPUT_BUFFER_PADDING_SIZE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    avpkt->priv = (void *)(size_t) codec_id;
 | 
					    avpkt->priv = (void *)(size_t) codec_id;
 | 
				
			||||||
    //H264Dump(avpkt->data, avpkt->stream_index);
 | 
					    //DumpH264(avpkt->data, avpkt->stream_index);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // advance packet write
 | 
					    // advance packet write
 | 
				
			||||||
    stream->PacketWrite = (stream->PacketWrite + 1) % VIDEO_PACKET_MAX;
 | 
					    stream->PacketWrite = (stream->PacketWrite + 1) % VIDEO_PACKET_MAX;
 | 
				
			||||||
@@ -1939,7 +1939,7 @@ static void DumpMpeg(const uint8_t * data, int size)
 | 
				
			|||||||
**
 | 
					**
 | 
				
			||||||
**	Function to Dump a h264 packet, not needed.
 | 
					**	Function to Dump a h264 packet, not needed.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
static int H264Dump(const uint8_t * data, int size)
 | 
					static int DumpH264(const uint8_t * data, int size)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    printf("H264:");
 | 
					    printf("H264:");
 | 
				
			||||||
    do {
 | 
					    do {
 | 
				
			||||||
@@ -2057,9 +2057,8 @@ int PlayVideo3(VideoStream * stream, const uint8_t * data, int size)
 | 
				
			|||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    // soft limit buffer full
 | 
					    // soft limit buffer full
 | 
				
			||||||
    if (atomic_read(&stream->PacketsFilled) > 3
 | 
					    if (AudioSyncStream == stream && atomic_read(&stream->PacketsFilled) > 3
 | 
				
			||||||
	&& AudioUsedBytes() > AUDIO_MIN_BUFFER_FREE) {
 | 
						&& AudioUsedBytes() > AUDIO_MIN_BUFFER_FREE) {
 | 
				
			||||||
	// FIXME: audio only for main video stream
 | 
					 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    // get pts/dts
 | 
					    // get pts/dts
 | 
				
			||||||
@@ -2580,6 +2579,7 @@ int Poll(int timeout)
 | 
				
			|||||||
	int filled;
 | 
						int filled;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	used = AudioUsedBytes();
 | 
						used = AudioUsedBytes();
 | 
				
			||||||
 | 
						// FIXME: no video!
 | 
				
			||||||
	filled = atomic_read(&MyVideoStream->PacketsFilled);
 | 
						filled = atomic_read(&MyVideoStream->PacketsFilled);
 | 
				
			||||||
	// soft limit + hard limit
 | 
						// soft limit + hard limit
 | 
				
			||||||
	full = (used > AUDIO_MIN_BUFFER_FREE && filled > 3)
 | 
						full = (used > AUDIO_MIN_BUFFER_FREE && filled > 3)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user