X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=video_encoder.cpp;h=f7369877b7b55f67a4af3e795a5ed99bb5d88e21;hb=e8a66daac69cf6f243e03489aec8b9321d59e169;hp=dfbf565437d5dcfc311f84c7245eaa06eaee68be;hpb=b561d43a60201395f1354a585aa37670eda45883;p=nageru diff --git a/video_encoder.cpp b/video_encoder.cpp index dfbf565..f736987 100644 --- a/video_encoder.cpp +++ b/video_encoder.cpp @@ -1,16 +1,28 @@ #include "video_encoder.h" #include - +#include +#include +#include #include +#include + +extern "C" { +#include +} +#include "audio_encoder.h" #include "defs.h" +#include "ffmpeg_raii.h" #include "flags.h" #include "httpd.h" -#include "timebase.h" +#include "mux.h" #include "quicksync_encoder.h" +#include "timebase.h" #include "x264_encoder.h" +class RefCountedFrame; + using namespace std; using namespace movit; @@ -158,6 +170,14 @@ int VideoEncoder::write_packet2_thunk(void *opaque, uint8_t *buf, int buf_size, int VideoEncoder::write_packet2(uint8_t *buf, int buf_size, AVIODataMarkerType type, int64_t time) { + if (type == AVIO_DATA_MARKER_SYNC_POINT || type == AVIO_DATA_MARKER_BOUNDARY_POINT) { + seen_sync_markers = true; + } else if (type == AVIO_DATA_MARKER_UNKNOWN && !seen_sync_markers) { + // We don't know if this is a keyframe or not (the muxer could + // avoid marking it), so we just have to make the best of it. + type = AVIO_DATA_MARKER_SYNC_POINT; + } + if (type == AVIO_DATA_MARKER_HEADER) { stream_mux_header.append((char *)buf, buf_size); httpd->set_header(stream_mux_header);