mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 17:20:36 +00:00
use new bytestream api
Original commit message from CVS: use new bytestream api
This commit is contained in:
parent
012aaa2cb0
commit
9275ce0e15
5 changed files with 58 additions and 24 deletions
|
@ -224,10 +224,12 @@ gst_afparse_loop(GstElement *element)
|
||||||
if (bypass_afread){
|
if (bypass_afread){
|
||||||
GstEvent *event = NULL;
|
GstEvent *event = NULL;
|
||||||
guint32 waiting;
|
guint32 waiting;
|
||||||
|
guint32 got_bytes;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
buf = gst_bytestream_read (bs, bytes_per_read);
|
got_bytes = gst_bytestream_read (bs, &buf, bytes_per_read);
|
||||||
if (buf == NULL) {
|
if (got_bytes == 0) {
|
||||||
/* we need to check for an event. */
|
/* we need to check for an event. */
|
||||||
gst_bytestream_get_status (bs, &waiting, &event);
|
gst_bytestream_get_status (bs, &waiting, &event);
|
||||||
if (event && GST_EVENT_TYPE(event) == GST_EVENT_EOS) {
|
if (event && GST_EVENT_TYPE(event) == GST_EVENT_EOS) {
|
||||||
|
@ -237,8 +239,16 @@ gst_afparse_loop(GstElement *element)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
GST_BUFFER_TIMESTAMP(buf) = afparse->timestamp;
|
||||||
gst_pad_push (afparse->srcpad, buf);
|
gst_pad_push (afparse->srcpad, buf);
|
||||||
afparse->timestamp += numframes * 1E9 / afparse->rate;
|
if (got_bytes != bytes_per_read){
|
||||||
|
/* this shouldn't happen very often */
|
||||||
|
/* FIXME calculate the timestamps based on the fewer bytes received */
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
afparse->timestamp += frames_per_read * 1E9 / afparse->rate;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (TRUE);
|
while (TRUE);
|
||||||
|
@ -424,29 +434,49 @@ static ssize_t
|
||||||
gst_afparse_vf_read (AFvirtualfile *vfile, void *data, size_t nbytes)
|
gst_afparse_vf_read (AFvirtualfile *vfile, void *data, size_t nbytes)
|
||||||
{
|
{
|
||||||
GstByteStream *bs = (GstByteStream*)vfile->closure;
|
GstByteStream *bs = (GstByteStream*)vfile->closure;
|
||||||
guint8 *bytes;
|
guint8 *bytes = NULL;
|
||||||
GstEvent *event = NULL;
|
GstEvent *event = NULL;
|
||||||
guint32 waiting;
|
guint32 waiting;
|
||||||
|
guint32 got_bytes;
|
||||||
|
/*gchar *debug_str;*/
|
||||||
|
|
||||||
while (!(bytes = gst_bytestream_peek_bytes(bs, nbytes))){
|
got_bytes = gst_bytestream_peek_bytes(bs, &bytes, nbytes);
|
||||||
|
|
||||||
|
while (got_bytes != nbytes){
|
||||||
/* handle events */
|
/* handle events */
|
||||||
gst_bytestream_get_status (bs, &waiting, &event);
|
gst_bytestream_get_status (bs, &waiting, &event);
|
||||||
|
|
||||||
if (!event) return 0;
|
/* FIXME this event handling isn't right yet */
|
||||||
|
if (!event){
|
||||||
|
/*g_print("no event found with %u bytes\n", got_bytes);*/
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
if (event){
|
if (event){
|
||||||
if (GST_EVENT_TYPE(event) == GST_EVENT_EOS) return 0;
|
g_print("got event\n");
|
||||||
if (GST_EVENT_TYPE(event) == GST_EVENT_DISCONTINUOUS){
|
if (GST_EVENT_TYPE(event) == GST_EVENT_EOS){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else if (GST_EVENT_TYPE(event) == GST_EVENT_FLUSH){
|
||||||
|
g_print("flush\n");
|
||||||
|
}
|
||||||
|
else if (GST_EVENT_TYPE(event) == GST_EVENT_DISCONTINUOUS){
|
||||||
g_print("seek done\n");
|
g_print("seek done\n");
|
||||||
|
got_bytes = gst_bytestream_peek_bytes(bs, &bytes, nbytes);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
g_print("unknown event %d", GST_EVENT_TYPE(event));
|
||||||
|
got_bytes = gst_bytestream_peek_bytes(bs, &bytes, nbytes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(data, bytes, nbytes);
|
memcpy(data, bytes, got_bytes);
|
||||||
gst_bytestream_flush_fast(bs, nbytes);
|
gst_bytestream_flush_fast(bs, got_bytes);
|
||||||
|
|
||||||
/*g_print("read %d bytes\n", nbytes);*/
|
|
||||||
|
|
||||||
return nbytes;
|
/* debug_str = g_strndup((gchar*)bytes, got_bytes);
|
||||||
|
g_print("read %u bytes: %s\n", got_bytes, debug_str);
|
||||||
|
*/
|
||||||
|
return got_bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
static long
|
static long
|
||||||
|
@ -468,9 +498,10 @@ gst_afparse_vf_seek (AFvirtualfile *vfile, long offset, int is_relative)
|
||||||
if (offset == 0) return current_offset;
|
if (offset == 0) return current_offset;
|
||||||
type = GST_SEEK_BYTEOFFSET_CUR;
|
type = GST_SEEK_BYTEOFFSET_CUR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_print("doing seek to %d, current offset %lld\n", (gint)offset, current_offset);
|
||||||
if (gst_bytestream_seek(bs, type, (gint64)offset)){
|
if (gst_bytestream_seek(bs, type, (gint64)offset)){
|
||||||
g_print("doing seek to %d\n", (gint)offset);
|
|
||||||
return offset;
|
return offset;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -421,7 +421,7 @@ gst_jack_loop (GstElement *element)
|
||||||
if (!pad->bs)
|
if (!pad->bs)
|
||||||
pad->bs = gst_bytestream_new (pad->pad);
|
pad->bs = gst_bytestream_new (pad->pad);
|
||||||
|
|
||||||
if (!(peeked = gst_bytestream_peek_bytes (pad->bs, len))) {
|
if (gst_bytestream_peek_bytes (pad->bs, (guint8**)&peeked, len) < len) {
|
||||||
gst_bytestream_get_status(pad->bs, &avail, &event);
|
gst_bytestream_get_status(pad->bs, &avail, &event);
|
||||||
if (event) {
|
if (event) {
|
||||||
g_warning("got an event on jacksink");
|
g_warning("got an event on jacksink");
|
||||||
|
|
|
@ -716,6 +716,7 @@ gst_ladspa_loop(GstElement *element)
|
||||||
guint num_processed, num_to_process;
|
guint num_processed, num_to_process;
|
||||||
GstEvent *event = NULL;
|
GstEvent *event = NULL;
|
||||||
guint32 waiting;
|
guint32 waiting;
|
||||||
|
guint32 got_bytes;
|
||||||
LADSPA_Data **data_in, **data_out;
|
LADSPA_Data **data_in, **data_out;
|
||||||
GstBuffer **buffers_in, **buffers_out;
|
GstBuffer **buffers_in, **buffers_out;
|
||||||
GstBufferPool *bufpool;
|
GstBufferPool *bufpool;
|
||||||
|
@ -750,9 +751,9 @@ gst_ladspa_loop(GstElement *element)
|
||||||
/* first get all the necessary data from the input ports */
|
/* first get all the necessary data from the input ports */
|
||||||
for (i=0 ; i<numsinkpads ; i++){
|
for (i=0 ; i<numsinkpads ; i++){
|
||||||
GST_DEBUG (0, "pulling %u bytes through channel %d'sbytestream", bufferbytesize, i);
|
GST_DEBUG (0, "pulling %u bytes through channel %d'sbytestream", bufferbytesize, i);
|
||||||
buffers_in[i] = gst_bytestream_read (bytestreams[i], bufferbytesize);
|
got_bytes = gst_bytestream_read (bytestreams[i], buffers_in + i, bufferbytesize);
|
||||||
|
|
||||||
if (buffers_in[i] == NULL) {
|
if (got_bytes != bufferbytesize) {
|
||||||
/* we need to check for an event. */
|
/* we need to check for an event. */
|
||||||
gst_bytestream_get_status (bytestreams[i], &waiting, &event);
|
gst_bytestream_get_status (bytestreams[i], &waiting, &event);
|
||||||
|
|
||||||
|
|
|
@ -435,11 +435,12 @@ static GstBuffer*
|
||||||
flx_get_data(GstFlxDec *flxdec, gulong size)
|
flx_get_data(GstFlxDec *flxdec, gulong size)
|
||||||
{
|
{
|
||||||
GstBuffer *retbuf;
|
GstBuffer *retbuf;
|
||||||
|
guint32 got_bytes;
|
||||||
|
|
||||||
g_return_val_if_fail (flxdec != NULL, NULL);
|
g_return_val_if_fail (flxdec != NULL, NULL);
|
||||||
|
|
||||||
retbuf = gst_bytestream_read (flxdec->bs, size);
|
got_bytes = gst_bytestream_read (flxdec->bs, &retbuf, size);
|
||||||
if (!retbuf) {
|
if (got_bytes < size) {
|
||||||
GstEvent *event;
|
GstEvent *event;
|
||||||
guint32 remaining;
|
guint32 remaining;
|
||||||
|
|
||||||
|
|
|
@ -362,7 +362,7 @@ gst_qtp_read_bytes_atom_head(GstQTDemux * qtdemux,GstQtpAtom * atom)
|
||||||
/* FIXME this can't be right, rewrite with _read */
|
/* FIXME this can't be right, rewrite with _read */
|
||||||
do { /* do ... while (event()) is necessary for bytestream events */
|
do { /* do ... while (event()) is necessary for bytestream events */
|
||||||
if (!amh) {
|
if (!amh) {
|
||||||
if ((amh = (GstQtpAtomMinHeader*) gst_bytestream_peek_bytes (bs, 8))) {
|
if (gst_bytestream_peek_bytes (bs, (guint8**)&amh, 8) == 8) {
|
||||||
atom->size = GUINT32_FROM_BE(amh->size);
|
atom->size = GUINT32_FROM_BE(amh->size);
|
||||||
atom->type = amh->type; /* don't need to turn this around magicly FIXME this can depend on endiannes */
|
atom->type = amh->type; /* don't need to turn this around magicly FIXME this can depend on endiannes */
|
||||||
atom->start = qtdemux->bs_pos;
|
atom->start = qtdemux->bs_pos;
|
||||||
|
@ -372,7 +372,7 @@ gst_qtp_read_bytes_atom_head(GstQTDemux * qtdemux,GstQtpAtom * atom)
|
||||||
}
|
}
|
||||||
if (amh) {
|
if (amh) {
|
||||||
if (atom->size == 1) { /* need to peek extended size field */
|
if (atom->size == 1) { /* need to peek extended size field */
|
||||||
if ((esize = (guint64*) gst_bytestream_peek_bytes (bs, 8))) {
|
if (gst_bytestream_peek_bytes (bs, (guint8**)&esize, 8) == 8) {
|
||||||
atom->size = GUINT64_FROM_BE(*esize);
|
atom->size = GUINT64_FROM_BE(*esize);
|
||||||
gst_bytestream_flush (bs, 8);
|
gst_bytestream_flush (bs, 8);
|
||||||
qtdemux->bs_pos += 8;
|
qtdemux->bs_pos += 8;
|
||||||
|
@ -391,8 +391,9 @@ gst_qtp_read_bytes(GstQTDemux * qtdemux, void * buffer, size_t size)
|
||||||
{
|
{
|
||||||
void * data;
|
void * data;
|
||||||
GstByteStream * bs = qtdemux->bs;
|
GstByteStream * bs = qtdemux->bs;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if ((data = gst_bytestream_peek_bytes (bs,size))) {
|
if (gst_bytestream_peek_bytes (bs, (guint8**)&data, size) == size) {
|
||||||
memcpy(buffer,data,size);
|
memcpy(buffer,data,size);
|
||||||
gst_bytestream_flush(bs,size);
|
gst_bytestream_flush(bs,size);
|
||||||
qtdemux->bs_pos += size;
|
qtdemux->bs_pos += size;
|
||||||
|
@ -407,7 +408,7 @@ gst_qtp_read(GstQTDemux * qtdemux, size_t size)
|
||||||
GstBuffer * buf;
|
GstBuffer * buf;
|
||||||
GstByteStream * bs = qtdemux->bs;
|
GstByteStream * bs = qtdemux->bs;
|
||||||
do {
|
do {
|
||||||
if ((buf = gst_bytestream_read (bs,size))) {
|
if (gst_bytestream_read (bs, &buf, size) == size) {
|
||||||
qtdemux->bs_pos += size;
|
qtdemux->bs_pos += size;
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue