libdirac_libschro.c
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2008 BBC, Anuradha Suraparaju <asuraparaju at gmail dot com >
3  *
4  * This file is part of Libav.
5  *
6  * Libav 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.
10  *
11  * Libav 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.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with Libav; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
26 #include "libdirac_libschro.h"
27 
29  { 640, 480, 24000, 1001},
30  { 176, 120, 15000, 1001},
31  { 176, 144, 25, 2 },
32  { 352, 240, 15000, 1001},
33  { 352, 288, 25, 2 },
34  { 704, 480, 15000, 1001},
35  { 704, 576, 25, 2 },
36  { 720, 480, 30000, 1001},
37  { 720, 576, 25, 1 },
38  { 1280, 720, 60000, 1001},
39  { 1280, 720, 50, 1 },
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 },
46 };
47 
49 {
50  unsigned int ret_idx = 0;
51  unsigned int idx;
52  unsigned int num_formats = sizeof(ff_dirac_schro_video_format_info) /
53  sizeof(ff_dirac_schro_video_format_info[0]);
54 
55  for (idx = 1; idx < num_formats; ++idx) {
56  const DiracSchroVideoFormatInfo *vf = &ff_dirac_schro_video_format_info[idx];
57  if (avccontext->width == vf->width &&
58  avccontext->height == vf->height) {
59  ret_idx = idx;
60  if (avccontext->time_base.den == vf->frame_rate_num &&
61  avccontext->time_base.num == vf->frame_rate_denom)
62  return idx;
63  }
64  }
65  return ret_idx;
66 }
67 
69 {
70  queue->p_head = queue->p_tail = NULL;
71  queue->size = 0;
72 }
73 
75  void (*free_func)(void *))
76 {
77  while (queue->p_head)
78  free_func(ff_dirac_schro_queue_pop(queue));
79 }
80 
82 {
84 
85  if (!p_new)
86  return -1;
87 
88  p_new->data = p_data;
89 
90  if (!queue->p_head)
91  queue->p_head = p_new;
92  else
93  queue->p_tail->next = p_new;
94  queue->p_tail = p_new;
95 
96  ++queue->size;
97  return 0;
98 }
99 
101 {
102  DiracSchroQueueElement *top = queue->p_head;
103 
104  if (top) {
105  void *data = top->data;
106  queue->p_head = queue->p_head->next;
107  --queue->size;
108  av_freep(&top);
109  return data;
110  }
111 
112  return NULL;
113 }