mirror of
https://github.com/tuxbox-neutrino/libstb-hal.git
synced 2025-08-27 07:23:11 +02:00
libeplayer3/wmv: revert to (almost) original version
This commit is contained in:
@@ -155,10 +155,11 @@ static int writeData(void* _call)
|
|||||||
private_data.height = call->Height;
|
private_data.height = call->Height;
|
||||||
private_data.framerate = call->FrameRate;
|
private_data.framerate = call->FrameRate;
|
||||||
|
|
||||||
|
#define PES_MIN_HEADER_SIZE 9
|
||||||
if (initialHeader) {
|
if (initialHeader) {
|
||||||
unsigned char PesHeader[PES_MAX_HEADER_SIZE];
|
unsigned char PesPacket[PES_MIN_HEADER_SIZE+128];
|
||||||
unsigned char PesPayload[128];
|
unsigned char* PesPtr;
|
||||||
unsigned char* PesPtr = PesPayload;
|
unsigned int MetadataLength;
|
||||||
unsigned int crazyFramerate = 0;
|
unsigned int crazyFramerate = 0;
|
||||||
|
|
||||||
wmv_printf(10, "Framerate: %u\n", private_data.framerate);
|
wmv_printf(10, "Framerate: %u\n", private_data.framerate);
|
||||||
@@ -168,7 +169,7 @@ static int writeData(void* _call)
|
|||||||
crazyFramerate = ((10000000.0 / private_data.framerate) * 1000.0);
|
crazyFramerate = ((10000000.0 / private_data.framerate) * 1000.0);
|
||||||
wmv_printf(10, "crazyFramerate: %u\n", crazyFramerate);
|
wmv_printf(10, "crazyFramerate: %u\n", crazyFramerate);
|
||||||
|
|
||||||
memset (PesPayload, 0, sizeof(PesPayload));
|
PesPtr = &PesPacket[PES_MIN_HEADER_SIZE];
|
||||||
|
|
||||||
memcpy (PesPtr, Metadata, sizeof(Metadata));
|
memcpy (PesPtr, Metadata, sizeof(Metadata));
|
||||||
PesPtr += METADATA_STRUCT_C_START;
|
PesPtr += METADATA_STRUCT_C_START;
|
||||||
@@ -193,13 +194,11 @@ static int writeData(void* _call)
|
|||||||
*PesPtr++ = (crazyFramerate >> 16) & 0xff;
|
*PesPtr++ = (crazyFramerate >> 16) & 0xff;
|
||||||
*PesPtr++ = crazyFramerate >> 24;
|
*PesPtr++ = crazyFramerate >> 24;
|
||||||
|
|
||||||
struct iovec iov[2];
|
MetadataLength = PesPtr - &PesPacket[PES_MIN_HEADER_SIZE];
|
||||||
iov[0].iov_base = PesHeader;
|
|
||||||
iov[1].iov_base = PesPayload;
|
|
||||||
iov[1].iov_len = PesPtr - PesPayload;
|
|
||||||
iov[0].iov_len = InsertPesHeader (PesHeader, iov[1].iov_len, VC1_VIDEO_PES_START_CODE, INVALID_PTS_VALUE, 0);
|
|
||||||
|
|
||||||
len = writev(call->fd, iov, 2);
|
int HeaderLength = InsertPesHeader (PesPacket, MetadataLength, VC1_VIDEO_PES_START_CODE, INVALID_PTS_VALUE, 0);
|
||||||
|
|
||||||
|
len = write(call->fd,PesPacket, HeaderLength + MetadataLength);
|
||||||
|
|
||||||
initialHeader = 0;
|
initialHeader = 0;
|
||||||
}
|
}
|
||||||
@@ -217,7 +216,9 @@ static int writeData(void* _call)
|
|||||||
wmv_printf(20, "PacketLength=%d, Remaining=%d, Position=%d\n", PacketLength, Remaining, Position);
|
wmv_printf(20, "PacketLength=%d, Remaining=%d, Position=%d\n", PacketLength, Remaining, Position);
|
||||||
|
|
||||||
unsigned char PesHeader[PES_MAX_HEADER_SIZE];
|
unsigned char PesHeader[PES_MAX_HEADER_SIZE];
|
||||||
|
memset (PesHeader, '0', PES_MAX_HEADER_SIZE);
|
||||||
int HeaderLength = InsertPesHeader (PesHeader, PacketLength, VC1_VIDEO_PES_START_CODE, call->Pts, 0);
|
int HeaderLength = InsertPesHeader (PesHeader, PacketLength, VC1_VIDEO_PES_START_CODE, call->Pts, 0);
|
||||||
|
unsigned char* PacketStart;
|
||||||
|
|
||||||
if(insertSampleHeader) {
|
if(insertSampleHeader) {
|
||||||
unsigned int PesLength;
|
unsigned int PesLength;
|
||||||
@@ -237,18 +238,12 @@ static int writeData(void* _call)
|
|||||||
insertSampleHeader = 0;
|
insertSampleHeader = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct iovec iov[2];
|
PacketStart = malloc(call->len + HeaderLength);
|
||||||
iov[0].iov_base = PesHeader;
|
memcpy (PacketStart, PesHeader, HeaderLength);
|
||||||
iov[0].iov_len = HeaderLength;
|
memcpy (PacketStart + HeaderLength, call->data + Position, PacketLength);
|
||||||
iov[1].iov_base = call->data + Position;
|
|
||||||
iov[1].iov_len = PacketLength;
|
|
||||||
|
|
||||||
ssize_t l = writev(call->fd, iov, 2);
|
len = write(call->fd, PacketStart, PacketLength + HeaderLength);
|
||||||
if (l < 0) {
|
free(PacketStart);
|
||||||
len = l;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
len += l;
|
|
||||||
|
|
||||||
Position += PacketLength;
|
Position += PacketLength;
|
||||||
call->Pts = INVALID_PTS_VALUE;
|
call->Pts = INVALID_PTS_VALUE;
|
||||||
|
Reference in New Issue
Block a user