File tree 4 files changed +36
-2
lines changed
4 files changed +36
-2
lines changed Original file line number Diff line number Diff line change @@ -299,7 +299,15 @@ void OMXPlayerAudio::Process()
299
299
else if (!omx_pkt && !m_packets.empty ())
300
300
{
301
301
omx_pkt = m_packets.front ();
302
- m_cached_size -= omx_pkt->size ;
302
+ if (omx_pkt)
303
+ {
304
+ m_cached_size -= omx_pkt->size ;
305
+ }
306
+ else
307
+ {
308
+ assert (m_cached_size == 0 );
309
+ SubmitEOSInternal ();
310
+ }
303
311
m_packets.pop_front ();
304
312
}
305
313
UnLock ();
@@ -491,6 +499,14 @@ double OMXPlayerAudio::GetCacheTotal()
491
499
}
492
500
493
501
void OMXPlayerAudio::SubmitEOS ()
502
+ {
503
+ Lock ();
504
+ m_packets.push_back (nullptr );
505
+ UnLock ();
506
+ pthread_cond_broadcast (&m_packet_cond);
507
+ }
508
+
509
+ void OMXPlayerAudio::SubmitEOSInternal ()
494
510
{
495
511
if (m_decoder)
496
512
m_decoder->SubmitEOS ();
Original file line number Diff line number Diff line change @@ -101,6 +101,7 @@ class OMXPlayerAudio : public OMXThread
101
101
double GetCacheTotal ();
102
102
double GetCurrentPTS () { return m_iCurrentPts; };
103
103
void SubmitEOS ();
104
+ void SubmitEOSInternal ();
104
105
bool IsEOS ();
105
106
unsigned int GetCached () { return m_cached_size; };
106
107
unsigned int GetMaxCached () { return m_config.queue_size * 1024 * 1024 ; };
Original file line number Diff line number Diff line change @@ -247,7 +247,15 @@ void OMXPlayerVideo::Process()
247
247
else if (!omx_pkt && !m_packets.empty ())
248
248
{
249
249
omx_pkt = m_packets.front ();
250
- m_cached_size -= omx_pkt->size ;
250
+ if (omx_pkt)
251
+ {
252
+ m_cached_size -= omx_pkt->size ;
253
+ }
254
+ else
255
+ {
256
+ assert (m_cached_size == 0 );
257
+ SubmitEOSInternal ();
258
+ }
251
259
m_packets.pop_front ();
252
260
}
253
261
UnLock ();
@@ -371,6 +379,14 @@ int OMXPlayerVideo::GetDecoderFreeSpace()
371
379
}
372
380
373
381
void OMXPlayerVideo::SubmitEOS ()
382
+ {
383
+ Lock ();
384
+ m_packets.push_back (nullptr );
385
+ UnLock ();
386
+ pthread_cond_broadcast (&m_packet_cond);
387
+ }
388
+
389
+ void OMXPlayerVideo::SubmitEOSInternal ()
374
390
{
375
391
if (m_decoder)
376
392
m_decoder->SubmitEOS ();
Original file line number Diff line number Diff line change @@ -92,6 +92,7 @@ class OMXPlayerVideo : public OMXThread
92
92
unsigned int GetMaxCached () { return m_config.queue_size * 1024 * 1024 ; };
93
93
unsigned int GetLevel () { return m_config.queue_size ? 100 .0f * m_cached_size / (m_config.queue_size * 1024 .0f * 1024 .0f ) : 0 ; };
94
94
void SubmitEOS ();
95
+ void SubmitEOSInternal ();
95
96
bool IsEOS ();
96
97
void SetDelay (double delay) { m_iVideoDelay = delay; }
97
98
double GetDelay () { return m_iVideoDelay; }
You can’t perform that action at this time.
0 commit comments