Do not assume directories passed to mkdirRecursive have to be absolute. Fixes bug...
[gnash.git] / libvaapi / VaapiContext.h
blob239539e875727bf6096a590907864bad4cb92f10
1 // VaapiContext.h: VA context abstraction
2 //
3 // Copyright (C) 2009, 2010 Free Software Foundation, Inc.
4 //
5 // This program is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation; either version 3 of the License, or
8 // (at your option) any later version.
9 //
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software
17 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20 #ifndef GNASH_VAAPICONTEXT_H
21 #define GNASH_VAAPICONTEXT_H
24 #include <queue>
26 #include "log.h"
27 #include "vaapi_common.h"
29 namespace gnash {
31 // Forward declarations
32 class VaapiSurface;
34 /// VA codec
35 enum VaapiCodec {
36 VAAPI_CODEC_UNKNOWN,
37 VAAPI_CODEC_MPEG2,
38 VAAPI_CODEC_MPEG4,
39 VAAPI_CODEC_H264,
40 VAAPI_CODEC_VC1
43 /// VA context user-data
44 class VaapiContextData {
45 public:
46 virtual ~VaapiContextData()
47 { /* do nothing */ }
50 /// VA context abstraction
51 class DSOEXPORT VaapiContext {
52 typedef boost::shared_ptr<VaapiSurface> VaapiSurfaceSP;
54 VADisplay _display;
55 VAConfigID _config;
56 VAContextID _context;
57 VaapiCodec _codec;
58 VAProfile _profile;
59 VAEntrypoint _entrypoint;
60 std::queue<VaapiSurfaceSP> _surfaces;
61 unsigned int _picture_width;
62 unsigned int _picture_height;
63 std::auto_ptr<VaapiContextData> _user_data;
65 bool construct();
66 void destruct();
67 bool createContext(unsigned int width, unsigned int height);
68 void destroyContext();
70 public:
71 VaapiContext(VAProfile profile, VAEntrypoint entrypoint);
72 ~VaapiContext();
74 /// Initialize VA decoder for the specified picture dimensions
75 bool initDecoder(unsigned int width, unsigned int height);
77 /// Return VA context
78 VAContextID get() const { return _context; }
80 /// Get a free surface
81 boost::shared_ptr<VaapiSurface> acquireSurface();
83 /// Release surface
84 void releaseSurface(boost::shared_ptr<VaapiSurface> surface);
86 /// Set user data
87 void setData(std::auto_ptr<VaapiContextData> user_data) { _user_data = user_data; }
89 /// Get user data
90 VaapiContextData *getData() const { return _user_data.get(); }
93 } // gnash namespace
95 #endif // GNASH_VAAPICONTEXT_H
97 // local Variables:
98 // mode: C++
99 // indent-tabs-mode: nil
100 // End: