当前位置: 首页>>代码示例>>C++>>正文


C++ GstEnginePipeline::EndOfStreamReached方法代码示例

本文整理汇总了C++中GstEnginePipeline::EndOfStreamReached方法的典型用法代码示例。如果您正苦于以下问题:C++ GstEnginePipeline::EndOfStreamReached方法的具体用法?C++ GstEnginePipeline::EndOfStreamReached怎么用?C++ GstEnginePipeline::EndOfStreamReached使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在GstEnginePipeline的用法示例。


在下文中一共展示了GstEnginePipeline::EndOfStreamReached方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: BusCallbackSync

GstBusSyncReply GstEnginePipeline::BusCallbackSync(GstBus*, GstMessage* msg,
        gpointer self) {
    GstEnginePipeline* instance = reinterpret_cast<GstEnginePipeline*>(self);

    qLog(Debug) << instance->id() << "sync bus message"
                << GST_MESSAGE_TYPE_NAME(msg);

    switch (GST_MESSAGE_TYPE(msg)) {
    case GST_MESSAGE_EOS:
        emit instance->EndOfStreamReached(instance->id(), false);
        break;

    case GST_MESSAGE_TAG:
        instance->TagMessageReceived(msg);
        break;

    case GST_MESSAGE_ERROR:
        instance->ErrorMessageReceived(msg);
        break;

    case GST_MESSAGE_ELEMENT:
        instance->ElementMessageReceived(msg);
        break;

    case GST_MESSAGE_STATE_CHANGED:
        instance->StateChangedMessageReceived(msg);
        break;

    case GST_MESSAGE_BUFFERING:
        instance->BufferingMessageReceived(msg);
        break;

    case GST_MESSAGE_STREAM_STATUS:
        instance->StreamStatusMessageReceived(msg);
        break;

    case GST_MESSAGE_STREAM_START:
        if (instance->emit_track_ended_on_stream_start_) {
            qLog(Debug) << "New segment started, EOS will signal on next buffer "
                        "discontinuity";
            instance->emit_track_ended_on_stream_start_ = false;
            instance->emit_track_ended_on_time_discontinuity_ = true;
        }
        break;

    default:
        break;
    }

    return GST_BUS_PASS;
}
开发者ID:redyoshi49q,项目名称:Clementine,代码行数:51,代码来源:gstenginepipeline.cpp

示例2: BusCallbackSync

GstBusSyncReply GstEnginePipeline::BusCallbackSync(GstBus*, GstMessage* msg,
                                                   gpointer self) {
  GstEnginePipeline* instance = reinterpret_cast<GstEnginePipeline*>(self);

  qLog(Debug) << instance->id() << "sync bus message"
              << GST_MESSAGE_TYPE_NAME(msg);

  switch (GST_MESSAGE_TYPE(msg)) {
    case GST_MESSAGE_EOS:
      emit instance->EndOfStreamReached(instance->id(), false);
      break;

    case GST_MESSAGE_TAG:
      instance->TagMessageReceived(msg);
      break;

    case GST_MESSAGE_ERROR:
      instance->ErrorMessageReceived(msg);
      break;

    case GST_MESSAGE_ELEMENT:
      instance->ElementMessageReceived(msg);
      break;

    case GST_MESSAGE_STATE_CHANGED:
      instance->StateChangedMessageReceived(msg);
      break;

    case GST_MESSAGE_BUFFERING:
      instance->BufferingMessageReceived(msg);
      break;

    case GST_MESSAGE_STREAM_STATUS:
      instance->StreamStatusMessageReceived(msg);
      break;

    default:
      break;
  }

  return GST_BUS_PASS;
}
开发者ID:Gu1,项目名称:Clementine,代码行数:42,代码来源:gstenginepipeline.cpp

示例3: HandoffCallback

bool GstEnginePipeline::HandoffCallback(GstPad*, GstBuffer* buf,
                                        gpointer self) {
  GstEnginePipeline* instance = reinterpret_cast<GstEnginePipeline*>(self);

  QList<BufferConsumer*> consumers;
  {
    QMutexLocker l(&instance->buffer_consumers_mutex_);
    consumers = instance->buffer_consumers_;
  }

  for (BufferConsumer* consumer : consumers) {
    gst_buffer_ref(buf);
    consumer->ConsumeBuffer(buf, instance->id());
  }

  // Calculate the end time of this buffer so we can stop playback if it's
  // after the end time of this song.
  if (instance->end_offset_nanosec_ > 0) {
    quint64 start_time = GST_BUFFER_TIMESTAMP(buf) - instance->segment_start_;
    quint64 duration = GST_BUFFER_DURATION(buf);
    quint64 end_time = start_time + duration;

    if (end_time > instance->end_offset_nanosec_) {
      if (instance->has_next_valid_url()) {
        if (instance->next_url_ == instance->url_ &&
            instance->next_beginning_offset_nanosec_ ==
                instance->end_offset_nanosec_) {
          // The "next" song is actually the next segment of this file - so
          // cheat and keep on playing, but just tell the Engine we've moved on.
          instance->end_offset_nanosec_ = instance->next_end_offset_nanosec_;
          instance->next_url_ = QUrl();
          instance->next_beginning_offset_nanosec_ = 0;
          instance->next_end_offset_nanosec_ = 0;

          // GstEngine will try to seek to the start of the new section, but
          // we're already there so ignore it.
          instance->ignore_next_seek_ = true;
          emit instance->EndOfStreamReached(instance->id(), true);
        } else {
          // We have a next song but we can't cheat, so move to it normally.
          instance->TransitionToNext();
        }
      } else {
        // There's no next song
        emit instance->EndOfStreamReached(instance->id(), false);
      }
    }
  }

  if (instance->emit_track_ended_on_time_discontinuity_) {
    if (GST_BUFFER_FLAG_IS_SET(buf, GST_BUFFER_FLAG_DISCONT) ||
        GST_BUFFER_OFFSET(buf) < instance->last_buffer_offset_) {
      qLog(Debug) << "Buffer discontinuity - emitting EOS";
      instance->emit_track_ended_on_time_discontinuity_ = false;
      emit instance->EndOfStreamReached(instance->id(), true);
    }
  }

  instance->last_buffer_offset_ = GST_BUFFER_OFFSET(buf);

  return true;
}
开发者ID:Gu1,项目名称:Clementine,代码行数:62,代码来源:gstenginepipeline.cpp


注:本文中的GstEnginePipeline::EndOfStreamReached方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。