mirror of
https://github.com/tuxbox-fork-migrations/recycled-ni-libstb-hal.git
synced 2025-08-26 23:12:44 +02:00
arm try improve fast backward
Origin commit data
------------------
Branch: master
Commit: 785f0bee1c
Author: max_10 <max_10@gmx.de>
Date: 2018-01-24 (Wed, 24 Jan 2018)
------------------
No further description and justification available within origin commit message!
------------------
This commit was generated by Migit
This commit is contained in:
@@ -588,8 +588,48 @@ static void FFMPEGThread(Context_t *context)
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (context->playback->BackWard && av_gettime() >= showtime) {
|
||||
context->output->Command(context, OUTPUT_CLEAR, "video");
|
||||
|
||||
if (bofcount == 1) {
|
||||
showtime = av_gettime();
|
||||
usleep(100000);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (avContextTab[0]->iformat->flags & AVFMT_TS_DISCONT) {
|
||||
off_t pos = avio_tell(avContextTab[0]->pb);
|
||||
|
||||
if (pos > 0) {
|
||||
float br;
|
||||
if (avContextTab[0]->bit_rate)
|
||||
br = avContextTab[0]->bit_rate / 8.0;
|
||||
else
|
||||
br = 180000.0;
|
||||
seek_target_bytes = (double)pos + (double)context->playback->Speed * 8.0 * br;
|
||||
if (seek_target_bytes < 0)
|
||||
seek_target_bytes = 1;
|
||||
do_seek_target_bytes = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int64_t currPts = -1;
|
||||
context->playback->Command(context, PLAYBACK_PTS, &currPts);
|
||||
seek_target_seconds = ((double)currPts / 90000.0 + context->playback->Speed) * AV_TIME_BASE;
|
||||
if (seek_target_seconds < 0)
|
||||
seek_target_seconds = AV_TIME_BASE;
|
||||
do_seek_target_seconds = 1;
|
||||
}
|
||||
showtime = av_gettime() + 300000; //jump back every 300ms
|
||||
}
|
||||
else
|
||||
{
|
||||
bofcount = 0;
|
||||
}
|
||||
if (do_seek_target_seconds || do_seek_target_bytes)
|
||||
{
|
||||
int res = -1;
|
||||
isWaitingForFinish = 0;
|
||||
if (do_seek_target_seconds)
|
||||
{
|
||||
@@ -607,8 +647,9 @@ static void FFMPEGThread(Context_t *context)
|
||||
{
|
||||
seek_target_seconds += avContextTab[i]->start_time;
|
||||
}
|
||||
//av_seek_frame(avContextTab[i], -1, seek_target_seconds, 0);
|
||||
avformat_seek_file(avContextTab[i], -1, INT64_MIN, seek_target_seconds, INT64_MAX, 0);
|
||||
res = avformat_seek_file(avContextTab[i], -1, INT64_MIN, seek_target_seconds, INT64_MAX, 0);
|
||||
if (res < 0 && context->playback->BackWard)
|
||||
bofcount = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1784,7 +1825,7 @@ int32_t container_ffmpeg_update_tracks(Context_t *context, char *filename, int32
|
||||
{
|
||||
track.TimeScale = 1000;
|
||||
}
|
||||
ffmpeg_printf(10, "bit_rate [%d]\n", get_codecpar(stream)->bit_rate);
|
||||
ffmpeg_printf(10, "bit_rate [%lld]\n", get_codecpar(stream)->bit_rate);
|
||||
ffmpeg_printf(10, "time_base.den [%d]\n", stream->time_base.den);
|
||||
ffmpeg_printf(10, "time_base.num [%d]\n", stream->time_base.num);
|
||||
ffmpeg_printf(10, "width [%d]\n", get_codecpar(stream)->width);
|
||||
@@ -1803,6 +1844,7 @@ int32_t container_ffmpeg_update_tracks(Context_t *context, char *filename, int32
|
||||
ffmpeg_printf(10, "Stream has no duration so we take the duration from context\n");
|
||||
track.duration = (int64_t) avContext->duration / 1000;
|
||||
}
|
||||
ffmpeg_printf(10, "duration [%lld]\n", track.duration);
|
||||
if (context->manager->video)
|
||||
{
|
||||
if (get_codecpar(stream)->codec_id == AV_CODEC_ID_MPEG4)
|
||||
|
@@ -96,20 +96,7 @@ static void SupervisorThread(Context_t *context)
|
||||
playback_printf(10, ">\n");
|
||||
while (context && context->playback && context->playback->isPlaying && !context->playback->abortRequested)
|
||||
{
|
||||
if (context->playback->BackWard != 0)
|
||||
{
|
||||
/* Offset -3 seconds for backward
|
||||
* so initial backward speed is 4x */
|
||||
int64_t pos = (int64_t)context->playback->Speed - 3;
|
||||
playback_printf(10, "Speed %d BackWard %d to seek %lld\n", context->playback->Speed, context->playback->BackWard, pos);
|
||||
context->playback->isSeeking = 1;
|
||||
context->output->Command(context, OUTPUT_CLEAR, NULL);
|
||||
context->container->selectedContainer->Command(context, CONTAINER_SEEK, &pos);
|
||||
context->playback->isSeeking = 0;
|
||||
usleep(350000);
|
||||
} else {
|
||||
usleep(100000);
|
||||
}
|
||||
usleep(100000);
|
||||
}
|
||||
playback_printf(10, "<\n");
|
||||
hasThreadStarted = 2;
|
||||
|
Reference in New Issue
Block a user