mirror of
https://github.com/tuxbox-fork-migrations/recycled-ni-libstb-hal.git
synced 2025-08-27 07:22:44 +02:00
libeplayer3: further malloc-memcpy-write -> writev replacements; not fully regression tested
Origin commit data
------------------
Branch: master
Commit: a09c2518bc
Author: martii <m4rtii@gmx.de>
Date: 2013-06-08 (Sat, 08 Jun 2013)
------------------
No further description and justification available within origin commit message!
------------------
This commit was generated by Migit
This commit is contained in:
@@ -248,30 +248,17 @@ static int writeData(void* _call)
|
|||||||
if (call->private_data == NULL)
|
if (call->private_data == NULL)
|
||||||
{
|
{
|
||||||
aac_printf(10, "private_data = NULL\n");
|
aac_printf(10, "private_data = NULL\n");
|
||||||
|
|
||||||
#ifdef MARTII
|
|
||||||
memcpy (ExtraData, DefaultAACHeader, AAC_HEADER_LENGTH);
|
memcpy (ExtraData, DefaultAACHeader, AAC_HEADER_LENGTH);
|
||||||
#else
|
|
||||||
call->private_data = DefaultAACHeader;
|
|
||||||
call->private_size = AAC_HEADER_LENGTH;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
#ifdef MARTII
|
|
||||||
else
|
else
|
||||||
#endif
|
|
||||||
|
|
||||||
memcpy (ExtraData, call->private_data, AAC_HEADER_LENGTH);
|
memcpy (ExtraData, call->private_data, AAC_HEADER_LENGTH);
|
||||||
#ifdef MARTII
|
|
||||||
ExtraData[3] |= (PacketLength >> 11) & 0x3;
|
ExtraData[3] |= (PacketLength >> 11) & 0x3;
|
||||||
#else
|
|
||||||
ExtraData[3] |= (PacketLength >> 12) & 0x3;
|
|
||||||
#endif
|
|
||||||
ExtraData[4] = (PacketLength >> 3) & 0xff;
|
ExtraData[4] = (PacketLength >> 3) & 0xff;
|
||||||
ExtraData[5] |= (PacketLength << 5) & 0xe0;
|
ExtraData[5] |= (PacketLength << 5) & 0xe0;
|
||||||
|
|
||||||
unsigned int HeaderLength = InsertPesHeader (PesHeader, PacketLength, AAC_AUDIO_PES_START_CODE, call->Pts, 0);
|
unsigned int HeaderLength = InsertPesHeader (PesHeader, PacketLength, AAC_AUDIO_PES_START_CODE, call->Pts, 0);
|
||||||
|
|
||||||
#ifdef MARTII
|
|
||||||
struct iovec iov[3];
|
struct iovec iov[3];
|
||||||
iov[0].iov_base = PesHeader;
|
iov[0].iov_base = PesHeader;
|
||||||
iov[0].iov_len = HeaderLength;
|
iov[0].iov_len = HeaderLength;
|
||||||
@@ -280,20 +267,6 @@ static int writeData(void* _call)
|
|||||||
iov[2].iov_base = call->data;
|
iov[2].iov_base = call->data;
|
||||||
iov[2].iov_len = call->len;
|
iov[2].iov_len = call->len;
|
||||||
return writev(call->fd, iov, 3);
|
return writev(call->fd, iov, 3);
|
||||||
#else
|
|
||||||
unsigned char* PacketStart = malloc(HeaderLength + sizeof(ExtraData) + call->len);
|
|
||||||
memcpy (PacketStart, PesHeader, HeaderLength);
|
|
||||||
memcpy (PacketStart + HeaderLength, ExtraData, sizeof(ExtraData));
|
|
||||||
memcpy (PacketStart + HeaderLength + sizeof(ExtraData), call->data, call->len);
|
|
||||||
|
|
||||||
aac_printf(100, "H %d d %d ExtraData %d\n", HeaderLength, call->len, sizeof(ExtraData));
|
|
||||||
|
|
||||||
int len = write(call->fd, PacketStart, HeaderLength + call->len + sizeof(ExtraData));
|
|
||||||
|
|
||||||
free(PacketStart);
|
|
||||||
|
|
||||||
return len;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ***************************** */
|
/* ***************************** */
|
||||||
|
@@ -31,6 +31,7 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/uio.h>
|
||||||
#include <linux/dvb/video.h>
|
#include <linux/dvb/video.h>
|
||||||
#include <linux/dvb/audio.h>
|
#include <linux/dvb/audio.h>
|
||||||
#include <memory.h>
|
#include <memory.h>
|
||||||
@@ -118,17 +119,14 @@ static int writeData(void* _call)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int HeaderLength = InsertPesHeader (PesHeader, call->len, PRIVATE_STREAM_1_PES_START_CODE, call->Pts, 0);
|
struct iovec iov[2];
|
||||||
|
|
||||||
unsigned char* PacketStart = malloc(call->len + HeaderLength);
|
iov[0].iov_base = PesHeader;
|
||||||
memcpy (PacketStart, PesHeader, HeaderLength);
|
iov[0].iov_len = InsertPesHeader (PesHeader, call->len, PRIVATE_STREAM_1_PES_START_CODE, call->Pts, 0);
|
||||||
memcpy (PacketStart + HeaderLength, call->data, call->len);
|
iov[1].iov_base = call->data;
|
||||||
|
iov[1].iov_len = call->len;
|
||||||
|
|
||||||
int len = write(call->fd, PacketStart, call->len + HeaderLength);
|
return writev(call->fd, iov, 2);
|
||||||
|
|
||||||
free(PacketStart);
|
|
||||||
|
|
||||||
return len;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ***************************** */
|
/* ***************************** */
|
||||||
|
@@ -31,6 +31,7 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/uio.h>
|
||||||
#include <linux/dvb/video.h>
|
#include <linux/dvb/video.h>
|
||||||
#include <linux/dvb/audio.h>
|
#include <linux/dvb/audio.h>
|
||||||
#include <memory.h>
|
#include <memory.h>
|
||||||
@@ -97,7 +98,6 @@ static int writeData(void* _call)
|
|||||||
unsigned char PesHeader[PES_MAX_HEADER_SIZE];
|
unsigned char PesHeader[PES_MAX_HEADER_SIZE];
|
||||||
unsigned char FakeHeaders[64]; // 64bytes should be enough to make the fake headers
|
unsigned char FakeHeaders[64]; // 64bytes should be enough to make the fake headers
|
||||||
unsigned int FakeHeaderLength;
|
unsigned int FakeHeaderLength;
|
||||||
unsigned int ExtraLength = 0;
|
|
||||||
unsigned char Version = 5;
|
unsigned char Version = 5;
|
||||||
unsigned int FakeStartCode = (Version << 8) | PES_VERSION_FAKE_START_CODE;
|
unsigned int FakeStartCode = (Version << 8) | PES_VERSION_FAKE_START_CODE;
|
||||||
unsigned int HeaderLength = 0;
|
unsigned int HeaderLength = 0;
|
||||||
@@ -147,21 +147,22 @@ static int writeData(void* _call)
|
|||||||
|
|
||||||
FakeHeaderLength = (ld.Ptr - (FakeHeaders));
|
FakeHeaderLength = (ld.Ptr - (FakeHeaders));
|
||||||
|
|
||||||
if (initialHeader) ExtraLength = call->private_size;
|
struct iovec iov[4];
|
||||||
|
int ic = 0;
|
||||||
|
iov[ic].iov_base = PesHeader;
|
||||||
|
iov[ic++].iov_len = InsertPesHeader (PesHeader, call->len, MPEG_VIDEO_PES_START_CODE, call->Pts, FakeStartCode);
|
||||||
|
iov[ic].iov_base = FakeHeaders;
|
||||||
|
iov[ic++].iov_len = FakeHeaderLength;
|
||||||
|
|
||||||
HeaderLength = InsertPesHeader (PesHeader, call->len, MPEG_VIDEO_PES_START_CODE, call->Pts, FakeStartCode);
|
|
||||||
unsigned char* PacketStart = malloc(call->len + HeaderLength + FakeHeaderLength + ExtraLength);
|
|
||||||
memcpy (PacketStart, PesHeader, HeaderLength);
|
|
||||||
memcpy (PacketStart + HeaderLength, FakeHeaders, FakeHeaderLength);
|
|
||||||
if (initialHeader) {
|
if (initialHeader) {
|
||||||
memcpy (PacketStart + HeaderLength + FakeHeaderLength, call->private_data, call->private_size);
|
iov[ic].iov_base = call->private_data;
|
||||||
|
iov[ic++].iov_len = call->private_size;
|
||||||
initialHeader = 0;
|
initialHeader = 0;
|
||||||
}
|
}
|
||||||
memcpy (PacketStart + HeaderLength + FakeHeaderLength + ExtraLength, call->data, call->len);
|
iov[ic].iov_base = call->data;
|
||||||
|
iov[ic++].iov_len = call->len;
|
||||||
|
|
||||||
int len = write(call->fd, PacketStart ,call->len + HeaderLength + FakeHeaderLength + ExtraLength);
|
int len = writev(call->fd, iov, ic);
|
||||||
|
|
||||||
free(PacketStart);
|
|
||||||
|
|
||||||
divx_printf(10, "xvid_Write < len=%d\n", len);
|
divx_printf(10, "xvid_Write < len=%d\n", len);
|
||||||
|
|
||||||
|
@@ -31,6 +31,7 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/uio.h>
|
||||||
#include <linux/dvb/video.h>
|
#include <linux/dvb/video.h>
|
||||||
#include <linux/dvb/audio.h>
|
#include <linux/dvb/audio.h>
|
||||||
#include <memory.h>
|
#include <memory.h>
|
||||||
@@ -98,7 +99,6 @@ static int writeData(void* _call)
|
|||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
unsigned char PesHeader[PES_AUDIO_HEADER_SIZE];
|
unsigned char PesHeader[PES_AUDIO_HEADER_SIZE];
|
||||||
unsigned char * Data = 0;
|
|
||||||
|
|
||||||
dts_printf(10, "\n");
|
dts_printf(10, "\n");
|
||||||
|
|
||||||
@@ -124,7 +124,9 @@ static int writeData(void* _call)
|
|||||||
|
|
||||||
memset (PesHeader, '0', PES_AUDIO_HEADER_SIZE);
|
memset (PesHeader, '0', PES_AUDIO_HEADER_SIZE);
|
||||||
|
|
||||||
Data = (unsigned char *) malloc(call->len);
|
// #define DO_BYTESWAP
|
||||||
|
#ifdef DO_BYTESWAP
|
||||||
|
unsigned char *Data = (unsigned char *) malloc(call->len);
|
||||||
memcpy(Data, call->data, call->len);
|
memcpy(Data, call->data, call->len);
|
||||||
|
|
||||||
/* 16-bit byte swap all data before injecting it */
|
/* 16-bit byte swap all data before injecting it */
|
||||||
@@ -134,16 +136,24 @@ static int writeData(void* _call)
|
|||||||
Data[i] = Data[i+1];
|
Data[i] = Data[i+1];
|
||||||
Data[i+1] = Tmp;
|
Data[i+1] = Tmp;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int HeaderLength = InsertPesHeader (PesHeader, call->len, MPEG_AUDIO_PES_START_CODE/*PRIVATE_STREAM_1_PES_START_CODE*/, call->Pts, 0);
|
struct iovec iov[2];
|
||||||
unsigned char* PacketStart = malloc(call->len + HeaderLength);
|
|
||||||
memcpy (PacketStart, PesHeader, HeaderLength);
|
|
||||||
memcpy (PacketStart + HeaderLength, call->data, call->len);
|
|
||||||
|
|
||||||
int len = write(call->fd,PacketStart,call->len + HeaderLength);
|
iov[0].iov_base = PesHeader;
|
||||||
|
iov[0].iov_len = InsertPesHeader (PesHeader, call->len, MPEG_AUDIO_PES_START_CODE/*PRIVATE_STREAM_1_PES_START_CODE*/, call->Pts, 0);
|
||||||
|
#ifdef DO_BYTESPWAP
|
||||||
|
iov[1].iov_base = Data;
|
||||||
|
#else
|
||||||
|
iov[1].iov_base = call->data;
|
||||||
|
#endif
|
||||||
|
iov[1].iov_len = call->len;
|
||||||
|
|
||||||
free(PacketStart);
|
int len = writev(call->fd, iov, 2);
|
||||||
|
|
||||||
|
#ifdef DO_BYTESWAP
|
||||||
free(Data);
|
free(Data);
|
||||||
|
#endif
|
||||||
|
|
||||||
dts_printf(10, "< len %d\n", len);
|
dts_printf(10, "< len %d\n", len);
|
||||||
return len;
|
return len;
|
||||||
|
@@ -31,6 +31,7 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/uio.h>
|
||||||
#include <linux/dvb/video.h>
|
#include <linux/dvb/video.h>
|
||||||
#include <linux/dvb/audio.h>
|
#include <linux/dvb/audio.h>
|
||||||
#include <memory.h>
|
#include <memory.h>
|
||||||
@@ -116,16 +117,13 @@ static int writeData(void* _call)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int HeaderLength = InsertPesHeader (PesHeader, call->len , MPEG_AUDIO_PES_START_CODE, call->Pts, 0);
|
struct iovec iov[2];
|
||||||
|
iov[0].iov_base = PesHeader;
|
||||||
|
iov[0].iov_len = InsertPesHeader (PesHeader, call->len , MPEG_AUDIO_PES_START_CODE, call->Pts, 0);
|
||||||
|
iov[1].iov_base = call->data;
|
||||||
|
iov[1].iov_len = call->len;
|
||||||
|
|
||||||
unsigned char* PacketStart = malloc(call->len + HeaderLength);
|
int len = writev(call->fd, iov, 2);
|
||||||
|
|
||||||
memcpy (PacketStart, PesHeader, HeaderLength);
|
|
||||||
memcpy (PacketStart + HeaderLength, call->data, call->len);
|
|
||||||
|
|
||||||
int len = write(call->fd, PacketStart, call->len + HeaderLength);
|
|
||||||
|
|
||||||
free(PacketStart);
|
|
||||||
|
|
||||||
flac_printf(10, "flac_Write-< len=%d\n", len);
|
flac_printf(10, "flac_Write-< len=%d\n", len);
|
||||||
return len;
|
return len;
|
||||||
|
@@ -37,9 +37,7 @@
|
|||||||
#include <asm/types.h>
|
#include <asm/types.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#ifdef MARTII
|
|
||||||
#include <sys/uio.h>
|
#include <sys/uio.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "output.h"
|
#include "output.h"
|
||||||
@@ -96,9 +94,6 @@ static int writeData(void* _call)
|
|||||||
WriterAVCallData_t* call = (WriterAVCallData_t*) _call;
|
WriterAVCallData_t* call = (WriterAVCallData_t*) _call;
|
||||||
|
|
||||||
unsigned char PesHeader[PES_MAX_HEADER_SIZE];
|
unsigned char PesHeader[PES_MAX_HEADER_SIZE];
|
||||||
#ifndef MARTII
|
|
||||||
unsigned char DataCopy[PES_MAX_HEADER_SIZE];
|
|
||||||
#endif
|
|
||||||
int len = 0;
|
int len = 0;
|
||||||
|
|
||||||
h263_printf(10, "\n");
|
h263_printf(10, "\n");
|
||||||
@@ -136,30 +131,12 @@ static int writeData(void* _call)
|
|||||||
|
|
||||||
HeaderLength += PrivateHeaderLength;
|
HeaderLength += PrivateHeaderLength;
|
||||||
|
|
||||||
#ifdef MARTII
|
|
||||||
struct iovec iov[2];
|
struct iovec iov[2];
|
||||||
iov[0].iov_base = PesHeader;
|
iov[0].iov_base = PesHeader;
|
||||||
iov[0].iov_len = HeaderLength;
|
iov[0].iov_len = HeaderLength;
|
||||||
iov[1].iov_base = call->data;
|
iov[1].iov_base = call->data;
|
||||||
iov[1].iov_len = call->len;
|
iov[1].iov_len = call->len;
|
||||||
len = writev(call->fd, iov, 2);
|
len = writev(call->fd, iov, 2);
|
||||||
#else
|
|
||||||
unsigned char *PacketData = malloc(HeaderLength + call->len);
|
|
||||||
|
|
||||||
if(PacketData != NULL)
|
|
||||||
{
|
|
||||||
memcpy(PacketData, PesHeader, HeaderLength);
|
|
||||||
memcpy(PacketData + HeaderLength, call->data, call->len);
|
|
||||||
|
|
||||||
len = write(call->fd, PacketData, call->len + HeaderLength);
|
|
||||||
|
|
||||||
free(PacketData);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
h263_err("no mem\n");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
h263_printf(10, "< len %d\n", len);
|
h263_printf(10, "< len %d\n", len);
|
||||||
return len;
|
return len;
|
||||||
|
@@ -31,6 +31,7 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/uio.h>
|
||||||
#include <linux/dvb/video.h>
|
#include <linux/dvb/video.h>
|
||||||
#include <linux/dvb/audio.h>
|
#include <linux/dvb/audio.h>
|
||||||
#include <memory.h>
|
#include <memory.h>
|
||||||
@@ -116,16 +117,13 @@ static int writeData(void* _call)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int HeaderLength = InsertPesHeader (PesHeader, call->len , MPEG_AUDIO_PES_START_CODE, call->Pts, 0);
|
struct iovec iov[2];
|
||||||
|
iov[0].iov_base = PesHeader;
|
||||||
|
iov[0].iov_len = InsertPesHeader (PesHeader, call->len , MPEG_AUDIO_PES_START_CODE, call->Pts, 0);
|
||||||
|
iov[1].iov_base = call->data;
|
||||||
|
iov[1].iov_len = call->len;
|
||||||
|
|
||||||
unsigned char* PacketStart = malloc(call->len + HeaderLength);
|
int len = writev(call->fd, iov, 2);
|
||||||
|
|
||||||
memcpy (PacketStart, PesHeader, HeaderLength);
|
|
||||||
memcpy (PacketStart + HeaderLength, call->data, call->len);
|
|
||||||
|
|
||||||
int len = write(call->fd, PacketStart, call->len + HeaderLength);
|
|
||||||
|
|
||||||
free(PacketStart);
|
|
||||||
|
|
||||||
mp3_printf(10, "mp3_Write-< len=%d\n", len);
|
mp3_printf(10, "mp3_Write-< len=%d\n", len);
|
||||||
return len;
|
return len;
|
||||||
|
@@ -31,6 +31,7 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/uio.h>
|
||||||
#include <linux/dvb/video.h>
|
#include <linux/dvb/video.h>
|
||||||
#include <linux/dvb/audio.h>
|
#include <linux/dvb/audio.h>
|
||||||
#include <memory.h>
|
#include <memory.h>
|
||||||
@@ -119,7 +120,7 @@ static int writeData(void* _call)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
while(1) {
|
while(Position < call->len) {
|
||||||
int PacketLength = (call->len - Position) <= MAX_PES_PACKET_SIZE ?
|
int PacketLength = (call->len - Position) <= MAX_PES_PACKET_SIZE ?
|
||||||
(call->len - Position) : MAX_PES_PACKET_SIZE;
|
(call->len - Position) : MAX_PES_PACKET_SIZE;
|
||||||
|
|
||||||
@@ -127,19 +128,21 @@ static int writeData(void* _call)
|
|||||||
|
|
||||||
mpeg2_printf(20, "PacketLength=%d, Remaining=%d, Position=%d\n", PacketLength, Remaining, Position);
|
mpeg2_printf(20, "PacketLength=%d, Remaining=%d, Position=%d\n", PacketLength, Remaining, Position);
|
||||||
|
|
||||||
int HeaderLength = InsertPesHeader (PesHeader, PacketLength, 0xe0, call->Pts, 0);
|
struct iovec iov[2];
|
||||||
unsigned char* PacketStart = malloc(PacketLength + HeaderLength);
|
iov[0].iov_base = PesHeader;
|
||||||
memcpy (PacketStart, PesHeader, HeaderLength);
|
iov[0].iov_len = InsertPesHeader (PesHeader, PacketLength, 0xe0, call->Pts, 0);
|
||||||
memcpy (PacketStart + HeaderLength, call->data + Position, PacketLength);
|
iov[1].iov_base = call->data + Position;
|
||||||
|
iov[1].iov_len = PacketLength;
|
||||||
|
|
||||||
len = write(call->fd, PacketStart, PacketLength + HeaderLength);
|
ssize_t l = writev(call->fd, iov, 2);
|
||||||
free(PacketStart);
|
if (l < 0) {
|
||||||
|
len = l;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
len += l;
|
||||||
|
|
||||||
Position += PacketLength;
|
Position += PacketLength;
|
||||||
call->Pts = INVALID_PTS_VALUE;
|
call->Pts = INVALID_PTS_VALUE;
|
||||||
|
|
||||||
if (Position == call->len)
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mpeg2_printf(10, "< len %d\n", len);
|
mpeg2_printf(10, "< len %d\n", len);
|
||||||
|
@@ -31,6 +31,7 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/uio.h>
|
||||||
#include <linux/dvb/video.h>
|
#include <linux/dvb/video.h>
|
||||||
#include <linux/dvb/audio.h>
|
#include <linux/dvb/audio.h>
|
||||||
#include <memory.h>
|
#include <memory.h>
|
||||||
@@ -219,7 +220,7 @@ static int writeData(void* _call)
|
|||||||
int Position = 0;
|
int Position = 0;
|
||||||
unsigned char insertSampleHeader = 1;
|
unsigned char insertSampleHeader = 1;
|
||||||
|
|
||||||
while(1) {
|
while(Position < call->len) {
|
||||||
|
|
||||||
int PacketLength = (call->len - Position) <= MAX_PES_PACKET_SIZE ?
|
int PacketLength = (call->len - Position) <= MAX_PES_PACKET_SIZE ?
|
||||||
(call->len - Position) : MAX_PES_PACKET_SIZE;
|
(call->len - Position) : MAX_PES_PACKET_SIZE;
|
||||||
@@ -253,18 +254,21 @@ static int writeData(void* _call)
|
|||||||
insertSampleHeader = 0;
|
insertSampleHeader = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
PacketStart = malloc(call->len + HeaderLength);
|
struct iovec iov[2];
|
||||||
memcpy (PacketStart, PesHeader, HeaderLength);
|
iov[0].iov_base = PesHeader;
|
||||||
memcpy (PacketStart + HeaderLength, call->data + Position, PacketLength);
|
iov[0].iov_len = HeaderLength;
|
||||||
|
iov[1].iov_base = call->data + Position;
|
||||||
|
iov[1].iov_len = PacketLength;
|
||||||
|
|
||||||
len = write(call->fd, PacketStart, PacketLength + HeaderLength);
|
size_t l = writev(call->fd, iov, 2);
|
||||||
free(PacketStart);
|
if (l < 0) {
|
||||||
|
len = l;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
len += l;
|
||||||
|
|
||||||
Position += PacketLength;
|
Position += PacketLength;
|
||||||
call->Pts = INVALID_PTS_VALUE;
|
call->Pts = INVALID_PTS_VALUE;
|
||||||
|
|
||||||
if (Position == call->len)
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -31,6 +31,7 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/uio.h>
|
||||||
#include <linux/dvb/video.h>
|
#include <linux/dvb/video.h>
|
||||||
#include <linux/dvb/audio.h>
|
#include <linux/dvb/audio.h>
|
||||||
#include <memory.h>
|
#include <memory.h>
|
||||||
@@ -116,16 +117,13 @@ static int writeData(void* _call)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int HeaderLength = InsertPesHeader (PesHeader, call->len , MPEG_AUDIO_PES_START_CODE, call->Pts, 0);
|
struct iovec iov[2];
|
||||||
|
iov[0].iov_base = PesHeader;
|
||||||
|
iov[0].iov_len = InsertPesHeader (PesHeader, call->len , MPEG_AUDIO_PES_START_CODE, call->Pts, 0);
|
||||||
|
iov[1].iov_base = call->data;
|
||||||
|
iov[1].iov_len = call->len;
|
||||||
|
|
||||||
unsigned char* PacketStart = malloc(call->len + HeaderLength);
|
int len = writev(call->fd, iov, 2);
|
||||||
|
|
||||||
memcpy (PacketStart, PesHeader, HeaderLength);
|
|
||||||
memcpy (PacketStart + HeaderLength, call->data, call->len);
|
|
||||||
|
|
||||||
int len = write(call->fd, PacketStart, call->len + HeaderLength);
|
|
||||||
|
|
||||||
free(PacketStart);
|
|
||||||
|
|
||||||
vorbis_printf(10, "vorbis_Write-< len=%d\n", len);
|
vorbis_printf(10, "vorbis_Write-< len=%d\n", len);
|
||||||
return len;
|
return len;
|
||||||
|
@@ -31,6 +31,7 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/uio.h>
|
||||||
#include <linux/dvb/video.h>
|
#include <linux/dvb/video.h>
|
||||||
#include <linux/dvb/audio.h>
|
#include <linux/dvb/audio.h>
|
||||||
#include <memory.h>
|
#include <memory.h>
|
||||||
@@ -131,32 +132,34 @@ static int writeData(void* _call)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
HeaderLength = InsertPesHeader (PesHeader, call->private_size, MPEG_AUDIO_PES_START_CODE, 0, 0);
|
|
||||||
|
|
||||||
unsigned char* PacketStart = malloc(call->private_size + HeaderLength);
|
struct iovec iov[2];
|
||||||
memcpy (PacketStart, PesHeader, HeaderLength);
|
iov[0].iov_base = PesHeader;
|
||||||
memcpy (PacketStart + HeaderLength, call->private_data, call->private_size);
|
iov[0].iov_len = InsertPesHeader (PesHeader, call->private_size, MPEG_AUDIO_PES_START_CODE, 0, 0);
|
||||||
|
iov[1].iov_base = call->private_data;
|
||||||
|
iov[1].iov_len = call->private_size;
|
||||||
|
|
||||||
len = write(call->fd, PacketStart, call->private_size + HeaderLength);
|
len = writev(call->fd, iov, 2);
|
||||||
|
|
||||||
free(PacketStart);
|
|
||||||
|
|
||||||
initialHeader = 0;
|
initialHeader = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (call->len > 0 && call->data)
|
if (len > -1 && call->len > 0 && call->data)
|
||||||
{
|
{
|
||||||
unsigned char PesHeader[PES_MAX_HEADER_SIZE];
|
unsigned char PesHeader[PES_MAX_HEADER_SIZE];
|
||||||
|
|
||||||
int HeaderLength = InsertPesHeader (PesHeader, call->len, MPEG_AUDIO_PES_START_CODE, call->Pts, 0);
|
|
||||||
|
|
||||||
unsigned char* PacketStart = malloc(call->len + HeaderLength);
|
struct iovec iov[2];
|
||||||
memcpy (PacketStart, PesHeader, HeaderLength);
|
iov[0].iov_base = PesHeader;
|
||||||
memcpy (PacketStart + HeaderLength, call->data, call->len);
|
iov[0].iov_len = InsertPesHeader (PesHeader, call->len, MPEG_AUDIO_PES_START_CODE, call->Pts, 0);
|
||||||
|
iov[1].iov_base = call->data;
|
||||||
|
iov[1].iov_len = call->len;
|
||||||
|
|
||||||
len = write(call->fd, PacketStart, call->len + HeaderLength);
|
ssize_t l = writev(call->fd, iov, 2);
|
||||||
|
if (l > -1)
|
||||||
free(PacketStart);
|
len += l;
|
||||||
|
else
|
||||||
|
len = l;
|
||||||
}
|
}
|
||||||
|
|
||||||
wma_printf(10, "wma < %d\n", len);
|
wma_printf(10, "wma < %d\n", len);
|
||||||
|
@@ -31,6 +31,7 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/uio.h>
|
||||||
#include <linux/dvb/video.h>
|
#include <linux/dvb/video.h>
|
||||||
#include <linux/dvb/audio.h>
|
#include <linux/dvb/audio.h>
|
||||||
#include <memory.h>
|
#include <memory.h>
|
||||||
@@ -123,7 +124,7 @@ static int writeData(void* _call)
|
|||||||
{
|
{
|
||||||
WriterAVCallData_t* call = (WriterAVCallData_t*) _call;
|
WriterAVCallData_t* call = (WriterAVCallData_t*) _call;
|
||||||
|
|
||||||
awmv_t *private_data = (awmv_t *)malloc(sizeof(awmv_t));
|
awmv_t private_data;
|
||||||
int len = 0;
|
int len = 0;
|
||||||
|
|
||||||
wmv_printf(10, "\n");
|
wmv_printf(10, "\n");
|
||||||
@@ -137,12 +138,12 @@ static int writeData(void* _call)
|
|||||||
|
|
||||||
wmv_printf(10, "Got Private Size %d\n", call->private_size);
|
wmv_printf(10, "Got Private Size %d\n", call->private_size);
|
||||||
|
|
||||||
memcpy(private_data->privateData, call->private_data,
|
memcpy(private_data.privateData, call->private_data,
|
||||||
call->private_size>WMV3_PRIVATE_DATA_LENGTH?WMV3_PRIVATE_DATA_LENGTH:call->private_size);
|
call->private_size>WMV3_PRIVATE_DATA_LENGTH?WMV3_PRIVATE_DATA_LENGTH:call->private_size);
|
||||||
|
|
||||||
private_data->width = call->Width;
|
private_data.width = call->Width;
|
||||||
private_data->height = call->Height;
|
private_data.height = call->Height;
|
||||||
private_data->framerate = call->FrameRate;
|
private_data.framerate = call->FrameRate;
|
||||||
|
|
||||||
if ((call->data == NULL) || (call->len <= 0)) {
|
if ((call->data == NULL) || (call->len <= 0)) {
|
||||||
wmv_err("parsing NULL Data. ignoring...\n");
|
wmv_err("parsing NULL Data. ignoring...\n");
|
||||||
@@ -160,16 +161,11 @@ static int writeData(void* _call)
|
|||||||
unsigned int MetadataLength;
|
unsigned int MetadataLength;
|
||||||
unsigned int crazyFramerate = 0;
|
unsigned int crazyFramerate = 0;
|
||||||
|
|
||||||
if (private_data == NULL) {
|
wmv_printf(10, "Framerate: %u\n", private_data.framerate);
|
||||||
wmv_err("private_data NULL\n");
|
wmv_printf(10, "biWidth: %d\n", private_data.width);
|
||||||
return -1;
|
wmv_printf(10, "biHeight: %d\n", private_data.height);
|
||||||
}
|
|
||||||
|
|
||||||
wmv_printf(10, "Framerate: %u\n", private_data->framerate);
|
crazyFramerate = ((10000000.0 / private_data.framerate) * 1000.0);
|
||||||
wmv_printf(10, "biWidth: %d\n", private_data->width);
|
|
||||||
wmv_printf(10, "biHeight: %d\n", private_data->height);
|
|
||||||
|
|
||||||
crazyFramerate = ((10000000.0 / private_data->framerate) * 1000.0);
|
|
||||||
wmv_printf(10, "crazyFramerate: %u\n", crazyFramerate);
|
wmv_printf(10, "crazyFramerate: %u\n", crazyFramerate);
|
||||||
|
|
||||||
PesPtr = &PesPacket[PES_MIN_HEADER_SIZE];
|
PesPtr = &PesPacket[PES_MIN_HEADER_SIZE];
|
||||||
@@ -177,18 +173,18 @@ static int writeData(void* _call)
|
|||||||
memcpy (PesPtr, Metadata, sizeof(Metadata));
|
memcpy (PesPtr, Metadata, sizeof(Metadata));
|
||||||
PesPtr += METADATA_STRUCT_C_START;
|
PesPtr += METADATA_STRUCT_C_START;
|
||||||
|
|
||||||
memcpy (PesPtr, private_data->privateData, WMV3_PRIVATE_DATA_LENGTH);
|
memcpy (PesPtr, private_data.privateData, WMV3_PRIVATE_DATA_LENGTH);
|
||||||
PesPtr += WMV3_PRIVATE_DATA_LENGTH;
|
PesPtr += WMV3_PRIVATE_DATA_LENGTH;
|
||||||
|
|
||||||
/* Metadata Header Struct A */
|
/* Metadata Header Struct A */
|
||||||
*PesPtr++ = (private_data->height >> 0) & 0xff;
|
*PesPtr++ = (private_data.height >> 0) & 0xff;
|
||||||
*PesPtr++ = (private_data->height >> 8) & 0xff;
|
*PesPtr++ = (private_data.height >> 8) & 0xff;
|
||||||
*PesPtr++ = (private_data->height >> 16) & 0xff;
|
*PesPtr++ = (private_data.height >> 16) & 0xff;
|
||||||
*PesPtr++ = private_data->height >> 24;
|
*PesPtr++ = private_data.height >> 24;
|
||||||
*PesPtr++ = (private_data->width >> 0) & 0xff;
|
*PesPtr++ = (private_data.width >> 0) & 0xff;
|
||||||
*PesPtr++ = (private_data->width >> 8) & 0xff;
|
*PesPtr++ = (private_data.width >> 8) & 0xff;
|
||||||
*PesPtr++ = (private_data->width >> 16) & 0xff;
|
*PesPtr++ = (private_data.width >> 16) & 0xff;
|
||||||
*PesPtr++ = private_data->width >> 24;
|
*PesPtr++ = private_data.width >> 24;
|
||||||
|
|
||||||
PesPtr += 12; /* Skip flag word and Struct B first 8 bytes */
|
PesPtr += 12; /* Skip flag word and Struct B first 8 bytes */
|
||||||
|
|
||||||
@@ -209,7 +205,7 @@ static int writeData(void* _call)
|
|||||||
if(call->len > 0 && call->data) {
|
if(call->len > 0 && call->data) {
|
||||||
int Position = 0;
|
int Position = 0;
|
||||||
unsigned char insertSampleHeader = 1;
|
unsigned char insertSampleHeader = 1;
|
||||||
while(1) {
|
while(Position < call->len) {
|
||||||
|
|
||||||
int PacketLength = (call->len - Position) <= MAX_PES_PACKET_SIZE ?
|
int PacketLength = (call->len - Position) <= MAX_PES_PACKET_SIZE ?
|
||||||
(call->len - Position) : MAX_PES_PACKET_SIZE;
|
(call->len - Position) : MAX_PES_PACKET_SIZE;
|
||||||
@@ -241,18 +237,21 @@ static int writeData(void* _call)
|
|||||||
insertSampleHeader = 0;
|
insertSampleHeader = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
PacketStart = malloc(call->len + HeaderLength);
|
struct iovec iov[2];
|
||||||
memcpy (PacketStart, PesHeader, HeaderLength);
|
iov[0].iov_base = PesHeader;
|
||||||
memcpy (PacketStart + HeaderLength, call->data + Position, PacketLength);
|
iov[0].iov_len = HeaderLength;
|
||||||
|
iov[1].iov_base = call->data + Position;
|
||||||
|
iov[1].iov_len = PacketLength;
|
||||||
|
|
||||||
len = write(call->fd, PacketStart, PacketLength + HeaderLength);
|
ssize_t l = writev(call->fd, iov, 2);
|
||||||
free(PacketStart);
|
if (l < 0) {
|
||||||
|
len = l;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
len += l;
|
||||||
|
|
||||||
Position += PacketLength;
|
Position += PacketLength;
|
||||||
call->Pts = INVALID_PTS_VALUE;
|
call->Pts = INVALID_PTS_VALUE;
|
||||||
|
|
||||||
if (Position == call->len)
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user