libeplayer3/wmv: revert to (almost) original version

This commit is contained in:
martii
2013-08-15 17:05:55 +02:00
parent 86e70db211
commit 672b5d10d2

View File

@@ -154,10 +154,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);
@@ -167,7 +168,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;
@@ -192,13 +193,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;
} }
@@ -216,7 +215,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;
@@ -236,18 +237,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;