Skip to content

Commit

Permalink
Fix dual keyframe extractions
Browse files Browse the repository at this point in the history
  • Loading branch information
zoriya committed Aug 27, 2024
1 parent 45d17fd commit b505019
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 2 deletions.
4 changes: 4 additions & 0 deletions transcoder/src/info.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"path/filepath"
"strconv"
"strings"
"sync"
"time"

"golang.org/x/text/language"
Expand Down Expand Up @@ -55,6 +56,9 @@ type MediaInfo struct {
Fonts []string `json:"fonts"`
/// The list of chapters. See Chapter for more information.
Chapters []Chapter `json:"chapters"`

/// lock used to read/set keyframes of video/audio
lock sync.Mutex
}

type Video struct {
Expand Down
18 changes: 16 additions & 2 deletions transcoder/src/keyframes.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,11 +89,17 @@ type KeyframeKey struct {
}

func (s *MetadataService) GetKeyframes(info *MediaInfo, isVideo bool, idx uint32) (*Keyframe, error) {
info.lock.Lock()
var ret *Keyframe
if isVideo && info.Videos[idx].Keyframes != nil {
return info.Videos[idx].Keyframes, nil
ret = info.Videos[idx].Keyframes
}
if !isVideo && info.Audios[idx].Keyframes != nil {
return info.Audios[idx].Keyframes, nil
ret = info.Audios[idx].Keyframes
}
info.lock.Unlock()
if ret != nil {
return ret, nil
}

get_running, set := s.keyframeLock.Start(KeyframeKey{
Expand All @@ -111,6 +117,14 @@ func (s *MetadataService) GetKeyframes(info *MediaInfo, isVideo bool, idx uint32
}
kf.info.ready.Add(1)

info.lock.Lock()
if isVideo {
info.Videos[idx].Keyframes = kf
} else {
info.Audios[idx].Keyframes = kf
}
info.lock.Unlock()

go func() {
var table string
var err error
Expand Down

0 comments on commit b505019

Please sign in to comment.