digiKam
cb-split.h
Go to the documentation of this file.
1 /*
2  * H.265 video codec.
3  * Copyright (c) 2013-2014 struktur AG, Dirk Farin <farin@struktur.de>
4  *
5  * Authors: Dirk Farin <farin@struktur.de>
6  *
7  * This file is part of libde265.
8  *
9  * libde265 is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU Lesser General Public License as
11  * published by the Free Software Foundation, either version 3 of
12  * the License, or (at your option) any later version.
13  *
14  * libde265 is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public License
20  * along with libde265. If not, see <http://www.gnu.org/licenses/>.
21  */
22 
23 #ifndef CB_SPLIT_H
24 #define CB_SPLIT_H
25 
26 #include "libde265/nal-parser.h"
27 #include "libde265/decctx.h"
28 #include "libde265/slice.h"
29 #include "libde265/scan.h"
30 #include "libde265/intrapred.h"
31 #include "libde265/transform.h"
32 #include "libde265/fallback-dct.h"
33 #include "libde265/quality.h"
34 #include "libde265/fallback.h"
35 #include "libde265/configparam.h"
36 
40 
41 
42 /* Encoder search tree, bottom up:
43 
44  - Algo_TB_Split - whether TB is split or not
45 
46  - Algo_TB_IntraPredMode - choose the intra prediction mode (or NOP, if at the wrong tree level)
47 
48  - Algo_CB_IntraPartMode - choose between NxN and 2Nx2N intra parts
49 
50  - Algo_CB_Split - whether CB is split or not
51 
52  - Algo_CTB_QScale - select QScale on CTB granularity
53  */
54 
55 
56 // ========== CB split decision ==========
57 
58 class Algo_CB_Split : public Algo_CB
59 {
60  public:
61  virtual ~Algo_CB_Split() { }
62 
63  // TODO: probably, this will later be a intra/inter decision which again
64  // has two child algorithms, depending on the coding mode.
65  void setChildAlgo(Algo_CB* algo) { mChildAlgo = algo; }
66 
67  const char* name() const { return "cb-split"; }
68 
69  protected:
71 
73  context_model_table& ctxModel,
74  enc_cb* cb);
75 };
76 
77 
79 {
80  public:
83  enc_cb* cb);
84 
85  const char* name() const { return "cb-split-bruteforce"; }
86 };
87 
88 #endif
Definition: cb-split.h:79
const char * name() const
Definition: cb-split.h:85
virtual enc_cb * analyze(encoder_context *, context_model_table &, enc_cb *cb)
Definition: cb-split.h:59
const char * name() const
Definition: cb-split.h:67
Algo_CB * mChildAlgo
Definition: cb-split.h:70
void setChildAlgo(Algo_CB *algo)
Definition: cb-split.h:65
virtual ~Algo_CB_Split()
Definition: cb-split.h:61
enc_cb * encode_cb_split(encoder_context *ectx, context_model_table &ctxModel, enc_cb *cb)
Definition: algo.h:67
Definition: contextmodel.h:100
Definition: encoder-types.h:248
Definition: encoder-context.h:39