1 /* 2 * H.265 video codec. 3 * Copyright (c) 2013-2014 struktur AG, Dirk Farin <farin@struktur.de> 4 * 5 * Authors: struktur AG, 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 IMAGE_IO_H 24 #define IMAGE_IO_H 25 26 #include "libde265/image.h" 27 #include <deque> 28 29 30 class ImageSource 31 { 32 public: ImageSource()33 LIBDE265_API ImageSource() { } ~ImageSource()34 virtual LIBDE265_API ~ImageSource() { } 35 36 //enum ImageStatus { Available, Waiting, EndOfVideo }; 37 38 //virtual ImageStatus get_status() = 0; 39 virtual LIBDE265_API de265_image* get_image(bool block=true) = 0; 40 virtual LIBDE265_API void skip_frames(int n) = 0; 41 42 virtual LIBDE265_API int get_width() const = 0; 43 virtual LIBDE265_API int get_height() const = 0; 44 }; 45 46 47 48 class ImageSource_YUV : public ImageSource 49 { 50 public: ImageSource_YUV()51 LIBDE265_API ImageSource_YUV() : mFH(NULL) { } 52 virtual LIBDE265_API ~ImageSource_YUV(); 53 54 bool LIBDE265_API set_input_file(const char* filename, int w,int h); 55 56 //virtual ImageStatus get_status(); 57 virtual LIBDE265_API de265_image* get_image(bool block=true); 58 virtual LIBDE265_API void skip_frames(int n); 59 get_width()60 virtual LIBDE265_API int get_width() const { return width; } get_height()61 virtual LIBDE265_API int get_height() const { return height; } 62 63 private: 64 FILE* mFH; 65 bool mReachedEndOfFile; 66 67 int width,height; 68 69 de265_image* read_next_image(); 70 }; 71 72 73 74 75 class ImageSink 76 { 77 public: ~ImageSink()78 virtual LIBDE265_API ~ImageSink() { } 79 80 virtual LIBDE265_API void send_image(const de265_image* img) = 0; 81 }; 82 83 class ImageSink_YUV : public ImageSink 84 { 85 public: ImageSink_YUV()86 LIBDE265_API ImageSink_YUV() : mFH(NULL) { } 87 LIBDE265_API ~ImageSink_YUV(); 88 89 bool LIBDE265_API set_filename(const char* filename); 90 91 virtual LIBDE265_API void send_image(const de265_image* img); 92 93 private: 94 FILE* mFH; 95 }; 96 97 98 99 class PacketSink 100 { 101 public: ~PacketSink()102 virtual LIBDE265_API ~PacketSink() { } 103 104 virtual LIBDE265_API void send_packet(const uint8_t* data, int n) = 0; 105 }; 106 107 108 class PacketSink_File : public PacketSink 109 { 110 public: PacketSink_File()111 LIBDE265_API PacketSink_File() : mFH(NULL) { } 112 virtual LIBDE265_API ~PacketSink_File(); 113 114 LIBDE265_API void set_filename(const char* filename); 115 116 virtual LIBDE265_API void send_packet(const uint8_t* data, int n); 117 118 private: 119 FILE* mFH; 120 }; 121 122 #endif 123