Skip to content

Commit 0b48b43

Browse files
committed
avplayer: fix warning propagation + small fixes
1 parent bf1fcc3 commit 0b48b43

File tree

3 files changed

+19
-25
lines changed

3 files changed

+19
-25
lines changed

src/core/libraries/avplayer/avplayer_source.cpp

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,6 @@ static AvPlayerStreamType CodecTypeToStreamType(AVMediaType codec_type) {
9191
}
9292
}
9393

94-
static f32 AVRationalToF32(const AVRational rational) {
95-
return f32(rational.num) / rational.den;
96-
}
97-
9894
bool AvPlayerSource::GetStreamInfo(u32 stream_index, AvPlayerStreamInfo& info) {
9995
info = {};
10096
if (m_avformat_context == nullptr || stream_index >= m_avformat_context->nb_streams) {
@@ -265,11 +261,11 @@ bool AvPlayerSource::Stop() {
265261
m_demuxer_thread.Stop();
266262

267263
if (m_current_audio_frame.has_value()) {
268-
m_audio_buffers.Push(std::move(m_current_audio_frame.value()));
264+
m_audio_buffers.Push(std::move(m_current_audio_frame->buffer));
269265
m_current_audio_frame.reset();
270266
}
271267
if (m_current_video_frame.has_value()) {
272-
m_video_buffers.Push(std::move(m_current_video_frame.value()));
268+
m_video_buffers.Push(std::move(m_current_video_frame->buffer));
273269
m_current_video_frame.reset();
274270
}
275271

@@ -281,12 +277,12 @@ bool AvPlayerSource::Stop() {
281277
}
282278

283279
void AvPlayerSource::Pause() {
284-
m_last_paused_time = std::chrono::high_resolution_clock::now();
280+
m_pause_time = std::chrono::high_resolution_clock::now();
285281
m_is_paused = true;
286282
}
287283

288284
void AvPlayerSource::Resume() {
289-
m_stalled_time += std::chrono::high_resolution_clock::now() - m_last_paused_time;
285+
m_pause_duration += std::chrono::high_resolution_clock::now() - m_pause_time;
290286
m_is_paused = false;
291287
}
292288

@@ -313,23 +309,22 @@ bool AvPlayerSource::GetVideoData(AvPlayerFrameInfoEx& video_info) {
313309
return false;
314310
}
315311

316-
const auto& last_frame = m_video_frames.Front();
312+
const auto& new_frame = m_video_frames.Front();
317313
if (m_state.GetSyncMode() == AvPlayerAvSyncMode::Default) {
318-
const auto current_time =
319-
m_audio_stream_index.has_value() ? m_last_audio_packet_time : CurrentTime();
320-
if (0 < current_time && current_time < last_frame.info.timestamp) {
314+
const auto current_time = CurrentTime();
315+
if (0 < current_time && current_time < new_frame.info.timestamp) {
321316
return false;
322317
}
323318
}
324319

325320
auto frame = m_video_frames.Pop();
326321
if (m_current_video_frame.has_value()) {
327322
// return the buffer to the queue
328-
m_video_buffers.Push(std::move(m_current_video_frame.value()));
323+
m_video_buffers.Push(std::move(m_current_video_frame->buffer));
329324
m_video_buffers_cv.Notify();
330325
}
331-
m_current_video_frame = std::move(frame->buffer);
332326
video_info = frame->info;
327+
m_current_video_frame = std::move(frame);
333328
return true;
334329
}
335330

@@ -345,18 +340,17 @@ bool AvPlayerSource::GetAudioData(AvPlayerFrameInfo& audio_info) {
345340
auto frame = m_audio_frames.Pop();
346341
if (m_current_audio_frame.has_value()) {
347342
// return the buffer to the queue
348-
m_audio_buffers.Push(std::move(m_current_audio_frame.value()));
343+
m_audio_buffers.Push(std::move(m_current_audio_frame->buffer));
349344
m_audio_buffers_cv.Notify();
350345
}
351-
m_current_audio_frame = std::move(frame->buffer);
352-
m_last_audio_packet_time = frame->info.timestamp;
353346

354347
audio_info = {};
355348
audio_info.timestamp = frame->info.timestamp;
356349
audio_info.p_data = reinterpret_cast<u8*>(frame->info.p_data);
357350
audio_info.details.audio.sample_rate = frame->info.details.audio.sample_rate;
358351
audio_info.details.audio.size = frame->info.details.audio.size;
359352
audio_info.details.audio.channel_count = frame->info.details.audio.channel_count;
353+
m_current_audio_frame = std::move(frame);
360354
return true;
361355
}
362356

@@ -365,7 +359,8 @@ u64 AvPlayerSource::CurrentTime() {
365359
return 0;
366360
}
367361
using namespace std::chrono;
368-
return duration_cast<milliseconds>(high_resolution_clock::now() - m_start_time - m_stalled_time)
362+
return duration_cast<milliseconds>(high_resolution_clock::now() - m_start_time -
363+
m_pause_duration)
369364
.count();
370365
}
371366

@@ -568,7 +563,7 @@ Frame AvPlayerSource::PrepareVideoFrame(FrameBuffer buffer, const AVFrame& frame
568563
{
569564
.width = width,
570565
.height = height,
571-
.aspect_ratio = AVRationalToF32(frame.sample_aspect_ratio),
566+
.aspect_ratio = (float)av_q2d(frame.sample_aspect_ratio),
572567
.crop_left_offset = u32(frame.crop_left),
573568
.crop_right_offset = u32(frame.crop_right + (width - frame.width)),
574569
.crop_top_offset = u32(frame.crop_top),

src/core/libraries/avplayer/avplayer_source.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,8 @@ class AvPlayerSource {
188188
AvPlayerQueue<Frame> m_audio_frames;
189189
AvPlayerQueue<Frame> m_video_frames;
190190

191-
std::optional<FrameBuffer> m_current_video_frame;
192-
std::optional<FrameBuffer> m_current_audio_frame;
191+
std::optional<Frame> m_current_video_frame;
192+
std::optional<Frame> m_current_audio_frame;
193193

194194
std::optional<s32> m_video_stream_index{};
195195
std::optional<s32> m_audio_stream_index{};
@@ -214,9 +214,8 @@ class AvPlayerSource {
214214
SWSContextPtr m_sws_context{nullptr, &ReleaseSWSContext};
215215

216216
std::chrono::high_resolution_clock::time_point m_start_time{};
217-
std::chrono::high_resolution_clock::time_point m_last_paused_time{};
218-
std::chrono::high_resolution_clock::duration m_stalled_time{};
219-
u64 m_last_audio_packet_time{};
217+
std::chrono::high_resolution_clock::time_point m_pause_time{};
218+
std::chrono::high_resolution_clock::duration m_pause_duration{};
220219
};
221220

222221
} // namespace Libraries::AvPlayer

src/core/libraries/avplayer/avplayer_state.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,7 @@ void AvPlayerState::ProcessEvent() {
429429
}
430430
switch (event->event) {
431431
case AvEventType::WarningId: {
432-
OnWarning(event->payload.error);
432+
EmitEvent(AvPlayerEvents::WarningId, &event->payload.error);
433433
break;
434434
}
435435
case AvEventType::RevertState: {

0 commit comments

Comments
 (0)