mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 05:06:17 +00:00
avc: Emit a single buffer per callback
This commit is contained in:
parent
edc93f89e1
commit
66956d1c96
1 changed files with 13 additions and 5 deletions
|
@ -224,23 +224,31 @@ MyStructuredDataPushProc (UInt32 CycleDataCount,
|
||||||
GstAVCSrc *avcsrc = GST_AVC_SRC (pRefCon);
|
GstAVCSrc *avcsrc = GST_AVC_SRC (pRefCon);
|
||||||
|
|
||||||
if (avcsrc) {
|
if (avcsrc) {
|
||||||
|
UInt32 numPackets = 0;
|
||||||
|
for (UInt32 cycle = 0; cycle < CycleDataCount; cycle++)
|
||||||
|
numPackets += pCycleData[cycle].tsPacketCount;
|
||||||
|
GstBuffer *buffer;
|
||||||
|
|
||||||
|
buffer = gst_buffer_new_and_alloc (numPackets*kMPEG2TSPacketSize);
|
||||||
|
|
||||||
|
guint8 *data = GST_BUFFER_DATA (buffer);
|
||||||
|
|
||||||
for (UInt32 cycle = 0; cycle < CycleDataCount; cycle++) {
|
for (UInt32 cycle = 0; cycle < CycleDataCount; cycle++) {
|
||||||
GST_LOG("Received cycle %lu of %lu - %lu packets (fw time %lx)",
|
GST_LOG("Received cycle %lu of %lu - %lu packets (fw time %lx)",
|
||||||
cycle, CycleDataCount, pCycleData[cycle].tsPacketCount,
|
cycle, CycleDataCount, pCycleData[cycle].tsPacketCount,
|
||||||
pCycleData[cycle].fireWireTimeStamp);
|
pCycleData[cycle].fireWireTimeStamp);
|
||||||
for (UInt32 sourcePacket = 0; sourcePacket < pCycleData[cycle].tsPacketCount;
|
for (UInt32 sourcePacket = 0; sourcePacket < pCycleData[cycle].tsPacketCount;
|
||||||
sourcePacket++) {
|
sourcePacket++) {
|
||||||
GstBuffer *buffer;
|
memcpy (data,
|
||||||
|
|
||||||
buffer = gst_buffer_new_and_alloc (kMPEG2TSPacketSize);
|
|
||||||
memcpy (GST_BUFFER_DATA (buffer),
|
|
||||||
pCycleData[cycle].pBuf[sourcePacket], kMPEG2TSPacketSize);
|
pCycleData[cycle].pBuf[sourcePacket], kMPEG2TSPacketSize);
|
||||||
|
data += kMPEG2TSPacketSize;
|
||||||
|
|
||||||
gst_atomic_queue_push (avcsrc->queue, buffer);
|
|
||||||
avcsrc->packets_enqueued++;
|
avcsrc->packets_enqueued++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gst_atomic_queue_push (avcsrc->queue, buffer);
|
||||||
|
|
||||||
g_mutex_lock (avcsrc->queue_lock);
|
g_mutex_lock (avcsrc->queue_lock);
|
||||||
g_cond_signal (avcsrc->cond);
|
g_cond_signal (avcsrc->cond);
|
||||||
g_mutex_unlock (avcsrc->queue_lock);
|
g_mutex_unlock (avcsrc->queue_lock);
|
||||||
|
|
Loading…
Reference in a new issue