28 std::unique_ptr<H26xByteToUnitStreamConverter> stream_converter,
30 const EmitSampleCB& emit_sample_cb);
34 bool Parse(
const uint8_t* buf,
int size, int64_t pts, int64_t dts)
override;
35 bool Flush()
override;
36 void Reset()
override;
41 bool is_key_frame =
false;
49 return stream_converter_.get();
63 uint64_t position = 0;
64 uint8_t start_code_size = 0;
71 virtual bool ProcessNalu(
const Nalu& nalu,
72 VideoSliceInfo* video_slice_info) = 0;
76 virtual bool UpdateVideoDecoderConfig(
int pps_id) = 0;
81 bool SearchForNalu(uint64_t* position, Nalu* nalu);
88 bool EmitCurrentAccessUnit();
92 bool EmitFrame(int64_t access_unit_pos,
97 virtual int64_t CalculateSampleDuration(
int pps_id) = 0;
100 EmitSampleCB emit_sample_cb_;
103 Nalu::CodecType type_;
106 std::unique_ptr<media::OffsetByteQueue> es_queue_;
107 std::list<std::pair<int64_t, TimingDesc>> timing_desc_list_;
111 uint64_t current_search_position_ = 0;
113 uint64_t current_access_unit_position_ = 0;
116 VideoSliceInfo current_video_slice_info_;
117 bool next_access_unit_position_set_ =
false;
118 uint64_t next_access_unit_position_ = 0;
120 std::unique_ptr<NaluInfo> current_nalu_info_;
122 std::unique_ptr<NaluInfo> next_nalu_info_;
125 std::unique_ptr<H26xByteToUnitStreamConverter> stream_converter_;
128 std::shared_ptr<MediaSample> pending_sample_;
129 int pending_sample_pps_id_ = -1;
130 int64_t pending_sample_duration_ = 0;
133 bool waiting_for_key_frame_ =
true;