2 * Canopus common routines
3 * Copyright (c) 2015 Vittorio Giovara <vittorio.giovara@gmail.com>
5 * This file is part of Libav.
7 * Libav is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * Libav is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with Libav; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 #include "libavutil/rational.h"
27 #include "bytestream.h"
30 int ff_canopus_parse_info_tag(AVCodecContext
*avctx
,
31 const uint8_t *src
, size_t size
)
34 int par_x
, par_y
, field_order
;
36 bytestream2_init(&gbc
, src
, size
);
38 /* Parse aspect ratio. */
39 bytestream2_skip(&gbc
, 8); // unknown, 16 bits 1
40 par_x
= bytestream2_get_le32(&gbc
);
41 par_y
= bytestream2_get_le32(&gbc
);
43 av_reduce(&avctx
->sample_aspect_ratio
.num
,
44 &avctx
->sample_aspect_ratio
.den
,
47 /* Short INFO tag (used in CLLC) has only AR data. */
51 bytestream2_skip(&gbc
, 16); // unknown RDRT tag
54 bytestream2_skip(&gbc
, 8); // 'FIEL' and 4 bytes 0
55 field_order
= bytestream2_get_le32(&gbc
);
56 switch (field_order
) {
57 case 0: avctx
->field_order
= AV_FIELD_TT
; break;
58 case 1: avctx
->field_order
= AV_FIELD_BB
; break;
59 case 2: avctx
->field_order
= AV_FIELD_PROGRESSIVE
; break;