2 * Copyright (c) 2008 BBC, Anuradha Suraparaju <asuraparaju at gmail dot com >
4 * This file is part of FFmpeg.
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 * functions common to libdirac and libschroedinger
26 #include "libdirac_libschro.h"
28 static const FfmpegDiracSchroVideoFormatInfo ff_dirac_schro_video_format_info
[] = {
29 { 640, 480, 24000, 1001},
30 { 176, 120, 15000, 1001},
32 { 352, 240, 15000, 1001},
34 { 704, 480, 15000, 1001},
36 { 720, 480, 30000, 1001},
38 { 1280, 720, 60000, 1001},
40 { 1920, 1080, 30000, 1001},
41 { 1920, 1080, 25, 1 },
42 { 1920, 1080, 60000, 1001},
43 { 1920, 1080, 50, 1 },
44 { 2048, 1080, 24, 1 },
45 { 4096, 2160, 24, 1 },
48 unsigned int ff_dirac_schro_get_video_format_idx(AVCodecContext
*avccontext
)
50 unsigned int ret_idx
= 0;
52 unsigned int num_formats
= sizeof(ff_dirac_schro_video_format_info
) /
53 sizeof(ff_dirac_schro_video_format_info
[0]);
55 for (idx
= 1; idx
< num_formats
; ++idx
) {
56 const FfmpegDiracSchroVideoFormatInfo
*vf
= &ff_dirac_schro_video_format_info
[idx
];
57 if (avccontext
->width
== vf
->width
&&
58 avccontext
->height
== vf
->height
) {
60 if (avccontext
->time_base
.den
== vf
->frame_rate_num
&&
61 avccontext
->time_base
.num
== vf
->frame_rate_denom
)
68 void ff_dirac_schro_queue_init(FfmpegDiracSchroQueue
*queue
)
70 queue
->p_head
= queue
->p_tail
= NULL
;
74 void ff_dirac_schro_queue_free(FfmpegDiracSchroQueue
*queue
,
75 void (*free_func
)(void *))
78 free_func(ff_dirac_schro_queue_pop(queue
));
81 int ff_dirac_schro_queue_push_back(FfmpegDiracSchroQueue
*queue
, void *p_data
)
83 FfmpegDiracSchroQueueElement
*p_new
= av_mallocz(sizeof(FfmpegDiracSchroQueueElement
));
91 queue
->p_head
= p_new
;
93 queue
->p_tail
->next
= p_new
;
94 queue
->p_tail
= p_new
;
100 void *ff_dirac_schro_queue_pop(FfmpegDiracSchroQueue
*queue
)
102 FfmpegDiracSchroQueueElement
*top
= queue
->p_head
;
105 void *data
= top
->data
;
106 queue
->p_head
= queue
->p_head
->next
;