Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -41,37 +41,119 @@ import { DEFAULT_MINIMUM_TAKE_SPAN } from '@sofie-automation/shared-lib/dist/cor
const mockMediaObjectsCollection = MongoMock.getInnerMockCollection<MediaObject>(MediaObjects)

describe('lib/mediaObjects', () => {
test('buildFormatString', () => {
const format1 = buildFormatString(
PackageInfo.FieldOrder.TFF,
literal<PieceContentStreamInfo>({
width: 1920,
height: 1080,
codec_time_base: '1/25',
})
)
expect(format1).toEqual('1920x1080i2500tff')
describe('buildFormatString', () => {
it('deepscan tff, stream unknown', () => {
const format1 = buildFormatString(
PackageInfo.FieldOrder.TFF,
literal<PieceContentStreamInfo>({
width: 1920,
height: 1080,
codec_time_base: '1/25',
})
)
expect(format1).toEqual('1920x1080i2500tff')
})

const format2 = buildFormatString(
PackageInfo.FieldOrder.Progressive,
it('deepscan progressive, stream unknown', () => {
const format2 = buildFormatString(
PackageInfo.FieldOrder.Progressive,
literal<PieceContentStreamInfo>({
width: 1280,
height: 720,
codec_time_base: '1001/60000',
})
)
expect(format2).toEqual('1280x720p5994')
})

literal<PieceContentStreamInfo>({
width: 1280,
height: 720,
codec_time_base: '1001/60000',
})
)
expect(format2).toEqual('1280x720p5994')
it('deepscan bff, stream unknown', () => {
const format3 = buildFormatString(
PackageInfo.FieldOrder.BFF,
literal<PieceContentStreamInfo>({
width: 720,
height: 576,
codec_time_base: '1/25',
})
)
expect(format3).toEqual('720x576i2500bff')
})

const format3 = buildFormatString(
PackageInfo.FieldOrder.BFF,
literal<PieceContentStreamInfo>({
width: 720,
height: 576,
codec_time_base: '1/25',
})
)
expect(format3).toEqual('720x576i2500bff')
it('deepscan tff, stream bff', () => {
const format3 = buildFormatString(
PackageInfo.FieldOrder.TFF,
literal<PieceContentStreamInfo>({
width: 720,
height: 576,
codec_time_base: '1/25',
field_order: PackageInfo.FieldOrder.BFF,
})
)
expect(format3).toEqual('720x576i2500bff')
})

it('deepscan bff, stream tff', () => {
const format3 = buildFormatString(
PackageInfo.FieldOrder.BFF,
literal<PieceContentStreamInfo>({
width: 720,
height: 576,
codec_time_base: '1/25',
field_order: PackageInfo.FieldOrder.TFF,
})
)
expect(format3).toEqual('720x576i2500tff')
})

it('deepscan progressive, stream tff', () => {
const format3 = buildFormatString(
PackageInfo.FieldOrder.Progressive,
literal<PieceContentStreamInfo>({
width: 720,
height: 576,
codec_time_base: '1/25',
field_order: PackageInfo.FieldOrder.TFF,
})
)
expect(format3).toEqual('720x576i2500tff')
})

it('deepscan bff, stream progressive', () => {
const format3 = buildFormatString(
PackageInfo.FieldOrder.BFF,
literal<PieceContentStreamInfo>({
width: 720,
height: 576,
codec_time_base: '1/25',
field_order: PackageInfo.FieldOrder.Progressive,
})
)
expect(format3).toEqual('720x576i2500bff')
})

it('deepscan unknown, stream progressive', () => {
const format3 = buildFormatString(
undefined,
literal<PieceContentStreamInfo>({
width: 720,
height: 576,
codec_time_base: '1/25',
field_order: PackageInfo.FieldOrder.Progressive,
})
)
expect(format3).toEqual('720x576p2500')
})

it('r_frame_rate', () => {
const format3 = buildFormatString(
PackageInfo.FieldOrder.Progressive,
literal<PieceContentStreamInfo>({
width: 720,
height: 576,
r_frame_rate: '25/1',
})
)
expect(format3).toEqual('720x576p2500')
})
})

test('acceptFormat', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,21 @@ interface ScanInfoForPackage {
* formatted string
*/
export function buildFormatString(
field_order: PackageInfo.FieldOrder | undefined,
scan_field_order: PackageInfo.FieldOrder | undefined,
stream: PieceContentStreamInfo
): string {
let field_order: PackageInfo.FieldOrder
if (stream.field_order === PackageInfo.FieldOrder.BFF || stream.field_order === PackageInfo.FieldOrder.TFF) {
// If the stream says it is interlaced, trust that
field_order = stream.field_order
} else if (scan_field_order && scan_field_order !== PackageInfo.FieldOrder.Unknown) {
// Then try the scan if it gave a value
field_order = scan_field_order
} else {
// Fallback to whatever the stream has
field_order = stream.field_order || PackageInfo.FieldOrder.Unknown
}

let format = `${stream.width || 0}x${stream.height || 0}`
switch (field_order) {
case PackageInfo.FieldOrder.Progressive:
Expand Down Expand Up @@ -337,6 +349,7 @@ async function checkPieceContentMediaObjectStatus(
codec_time_base: stream.codec.time_base,
channels: stream.channels,
r_frame_rate: undefined,
field_order: undefined,
})
),
(stream) => buildFormatString(mediainfo.field_order, stream),
Expand Down Expand Up @@ -877,7 +890,7 @@ function getPackageWarningMessage(

export type PieceContentStreamInfo = Pick<
PackageInfo.FFProbeScanStream,
'width' | 'height' | 'time_base' | 'codec_type' | 'codec_time_base' | 'channels' | 'r_frame_rate'
'width' | 'height' | 'time_base' | 'codec_type' | 'codec_time_base' | 'channels' | 'r_frame_rate' | 'field_order'
>
function checkStreamFormatsAndCounts(
messages: Array<ContentMessage>,
Expand Down
1 change: 1 addition & 0 deletions packages/shared-lib/src/package-manager/packageInfo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ export namespace PackageInfo {
display_aspect_ratio?: string // Example: '16:9'
pix_fmt?: string // Example: 'yuv420p'
bits_per_raw_sample?: string // Example: '8'
field_order?: FieldOrder

// audio
sample_fmt?: string
Expand Down
Loading