You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					59 lines
				
				1023 B
			
		
		
			
		
	
	
					59 lines
				
				1023 B
			| 
								 
											6 years ago
										 
									 | 
							
								#ifndef FRAMEREADER_HPP
							 | 
						||
| 
								 | 
							
								#define FRAMEREADER_HPP
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <unistd.h>
							 | 
						||
| 
								 | 
							
								#include <vector>
							 | 
						||
| 
								 | 
							
								#include <map>
							 | 
						||
| 
								 | 
							
								#include <thread>
							 | 
						||
| 
								 | 
							
								#include <mutex>
							 | 
						||
| 
								 | 
							
								#include <list>
							 | 
						||
| 
								 | 
							
								#include <condition_variable>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "channel.hpp"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// independent of QT, needs ffmpeg
							 | 
						||
| 
								 | 
							
								extern "C" {
							 | 
						||
| 
								 | 
							
								#include <libavcodec/avcodec.h>
							 | 
						||
| 
								 | 
							
								#include <libavformat/avformat.h>
							 | 
						||
| 
								 | 
							
								#include <libswscale/swscale.h>
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class FrameReader {
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								  FrameReader(const char *fn);
							 | 
						||
| 
								 | 
							
								  uint8_t *get(int idx);
							 | 
						||
| 
								 | 
							
								  AVFrame *toRGB(AVFrame *);
							 | 
						||
| 
								 | 
							
								  void waitForReady() {
							 | 
						||
| 
								 | 
							
								    while (!joined) usleep(10*1000);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  int getRGBSize() { return width*height*3; }
							 | 
						||
| 
								 | 
							
								  void loaderThread();
							 | 
						||
| 
								 | 
							
								  void cacherThread();
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								  AVFormatContext *pFormatCtx = NULL;
							 | 
						||
| 
								 | 
							
								  AVCodecContext *pCodecCtx = NULL;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									struct SwsContext *sws_ctx = NULL;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									int width = 1164;
							 | 
						||
| 
								 | 
							
									int height = 874;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  std::vector<AVPacket *> pkts;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  std::thread *t;
							 | 
						||
| 
								 | 
							
								  bool joined = false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  std::map<int, uint8_t *> cache;
							 | 
						||
| 
								 | 
							
								  std::mutex mcache;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  void GOPCache(int idx);
							 | 
						||
| 
								 | 
							
								  channel<int> to_cache;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  bool valid = true;
							 | 
						||
| 
								 | 
							
								  char url[0x400];
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 |