diff --git a/libeplayer3/output/writer/divx.c b/libeplayer3/output/writer/divx.c index 59f7756..cd18b71 100644 --- a/libeplayer3/output/writer/divx.c +++ b/libeplayer3/output/writer/divx.c @@ -111,8 +111,6 @@ static int writeData(void* _call) return 0; } - divx_printf(10, "AudioPts %lld\n", call->Pts); - if ((call->data == NULL) || (call->len <= 0)) { divx_err("parsing NULL Data. ignoring...\n"); @@ -125,6 +123,8 @@ static int writeData(void* _call) return 0; } + divx_printf(10, "AudioPts %lld\n", call->Pts); + usecPerFrame = 1000000000 / call->FrameRate; divx_printf(10, "Microsecends per frame = %d\n", usecPerFrame); @@ -148,20 +148,23 @@ static int writeData(void* _call) 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 = PesHeader; iov[ic].iov_base = FakeHeaders; iov[ic++].iov_len = FakeHeaderLength; + int len = 0; if (initialHeader) { + initialHeader = 0; iov[ic].iov_base = call->private_data; iov[ic++].iov_len = call->private_size; - initialHeader = 0; + len += call->private_size; } iov[ic].iov_base = call->data; iov[ic++].iov_len = call->len; + len += call->len; + iov[0].iov_len = InsertPesHeader (PesHeader, len, MPEG_VIDEO_PES_START_CODE, call->Pts, FakeStartCode); - int len = writev(call->fd, iov, ic); + len = writev(call->fd, iov, ic); divx_printf(10, "xvid_Write < len=%d\n", len);