Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(27)

Unified Diff: services/media/framework_ffmpeg/ffmpeg_demux.cc

Issue 1814553002: Motown: Improvements to packet definition (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: services/media/framework_ffmpeg/ffmpeg_demux.cc
diff --git a/services/media/framework_ffmpeg/ffmpeg_demux.cc b/services/media/framework_ffmpeg/ffmpeg_demux.cc
index b8825883dd3e8758071458b6970fbe9a4d9433d0..38b194daab6fe202254fa9e4b71b94f92829230f 100644
--- a/services/media/framework_ffmpeg/ffmpeg_demux.cc
+++ b/services/media/framework_ffmpeg/ffmpeg_demux.cc
@@ -6,6 +6,7 @@
#include "base/logging.h"
#include "services/media/framework/safe_clone.h"
+#include "services/media/framework_ffmpeg/av_packet.h"
#include "services/media/framework_ffmpeg/ffmpeg_demux.h"
#include "services/media/framework_ffmpeg/ffmpeg_io.h"
#include "services/media/framework_ffmpeg/ffmpeg_type_converters.h"
@@ -54,36 +55,29 @@ class FfmpegDemuxImpl : public FfmpegDemux {
// Specialized packet implementation.
class DemuxPacket : public Packet {
public:
- DemuxPacket() {
- av_init_packet(&av_packet_);
- }
-
- // Packet implementation.
- int64_t presentation_time() const override { return av_packet_.pts; };
-
- uint64_t duration() const override { return av_packet_.duration; };
-
- bool end_of_stream() const override { return false; }
-
- size_t size() const override { return size_t(av_packet_.size); }
-
- void* payload() const override {
- return reinterpret_cast<void*>(av_packet_.data);
+ static PacketPtr Create(AvPacketPtr av_packet) {
+ return PacketPtr(new DemuxPacket(std::move(av_packet)));
}
AVPacket& av_packet() {
- return av_packet_;
+ return *av_packet_;
}
protected:
- ~DemuxPacket() override {
- av_free_packet(&av_packet_);
- }
+ ~DemuxPacket() override {}
void Release() override { delete this; }
- private:
- AVPacket av_packet_;
+ private:
+ DemuxPacket(AvPacketPtr av_packet) :
+ Packet(
+ av_packet->pts,
johngro 2016/03/21 19:47:56 Since this is a place where we we are coming from
dalesat 2016/03/21 22:30:59 Done.
+ false,
+ static_cast<size_t>(av_packet->size),
johngro 2016/03/21 19:47:56 If this cast is required because av_packet->size i
dalesat 2016/03/21 22:30:59 Done.
+ av_packet->data),
+ av_packet_(std::move(av_packet)) {}
+
+ AvPacketPtr av_packet_;
};
struct AVFormatContextDeleter {
@@ -105,7 +99,7 @@ class FfmpegDemuxImpl : public FfmpegDemux {
AvioContextPtr io_context_;
std::vector<DemuxStream*> streams_;
std::unique_ptr<Metadata> metadata_;
- int64_t next_presentation_time_;
+ int64_t next_pts_;
int next_stream_to_end_ = -1; // -1: don't end, streams_.size(): stop.
};
@@ -199,26 +193,23 @@ PacketPtr FfmpegDemuxImpl::PullPacket(size_t* stream_index_out) {
return PullEndOfStreamPacket(stream_index_out);
}
- FfmpegDemuxImpl::DemuxPacket* demux_packet =
- new FfmpegDemuxImpl::DemuxPacket();
+ AvPacketPtr av_packet = AvPacket::Create();
- demux_packet->av_packet().data = nullptr;
- demux_packet->av_packet().size = 0;
+ av_packet->data = nullptr;
+ av_packet->size = 0;
- if (av_read_frame(format_context_.get(), &demux_packet->av_packet()) < 0) {
+ if (av_read_frame(format_context_.get(), av_packet.get()) < 0) {
// End of stream. Start producing end-of-stream packets for all the streams.
- PacketPtr(demux_packet); // Deletes demux_packet.
next_stream_to_end_ = 0;
return PullEndOfStreamPacket(stream_index_out);
}
*stream_index_out =
- static_cast<size_t>(demux_packet->av_packet().stream_index);
+ static_cast<size_t>(av_packet->stream_index);
// TODO(dalesat): What if the packet has no PTS or duration?
- next_presentation_time_ =
- demux_packet->presentation_time() + demux_packet->duration();
+ next_pts_ = av_packet->pts + av_packet->duration;
- return PacketPtr(demux_packet);
+ return DemuxPacket::Create(std::move(av_packet));
}
PacketPtr FfmpegDemuxImpl::PullEndOfStreamPacket(size_t* stream_index_out) {
@@ -230,7 +221,7 @@ PacketPtr FfmpegDemuxImpl::PullEndOfStreamPacket(size_t* stream_index_out) {
}
*stream_index_out = next_stream_to_end_++;
- return Packet::CreateEndOfStream(next_presentation_time_);
+ return Packet::CreateEndOfStream(next_pts_);
}
void FfmpegDemuxImpl::CopyMetadata(

Powered by Google App Engine
This is Rietveld 408576698