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
22 * @file libdirac_libschro.c
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
=
57 &ff_dirac_schro_video_format_info
[idx
];
58 if (avccontext
->width
== vf
->width
&&
59 avccontext
->height
== vf
->height
){
61 if (avccontext
->time_base
.den
== vf
->frame_rate_num
&&
62 avccontext
->time_base
.num
== vf
->frame_rate_denom
) {
70 void ff_dirac_schro_queue_init (FfmpegDiracSchroQueue
*queue
)
72 queue
->p_head
= queue
->p_tail
= NULL
;
75 void ff_dirac_schro_queue_free (FfmpegDiracSchroQueue
*queue
,
76 void (*free_func
)(void *))
78 while (queue
->p_head
) {
79 free_func( ff_dirac_schro_queue_pop(queue
) );
83 int ff_dirac_schro_queue_push_back (FfmpegDiracSchroQueue
*queue
, void *p_data
)
85 FfmpegDiracSchroQueueElement
*p_new
=
86 av_mallocz(sizeof(FfmpegDiracSchroQueueElement
));
93 if (queue
->p_head
== NULL
)
94 queue
->p_head
= p_new
;
96 queue
->p_tail
->next
= p_new
;
97 queue
->p_tail
= p_new
;
102 void *ff_dirac_schro_queue_pop (FfmpegDiracSchroQueue
*queue
)
104 FfmpegDiracSchroQueueElement
*top
= queue
->p_head
;
107 void *data
= top
->data
;
108 queue
->p_head
= queue
->p_head
->next
;