1 /***************************************************************************
2 \file muxerRaw
3 \brief i/f to lavformat mpeg4 muxer
4 -------------------
5
6 copyright : (C) 2008 by mean
7 email : fixounet@free.fr
8
9 ***************************************************************************/
10
11 /***************************************************************************
12 * *
13 * This program is free software; you can redistribute it and/or modify *
14 * it under the terms of the GNU General Public License as published by *
15 * the Free Software Foundation; either version 2 of the License, or *
16 * (at your option) any later version. *
17 * *
18 ***************************************************************************/
19 #include "ADM_default.h"
20 #include "fourcc.h"
21 #include "muxerRaw.h"
22 #include "DIA_coreToolkit.h"
23
24
25 #if 1
26 #define aprintf(...) {}
27 #else
28 #define aprintf printf
29 #endif
30
31
32 /**
33 \fn muxerRaw
34 \brief Constructor
35 */
muxerRaw()36 muxerRaw::muxerRaw()
37 {
38 file=NULL;
39 };
40 /**
41 \fn muxerRaw
42 \brief Destructor
43 */
44
~muxerRaw()45 muxerRaw::~muxerRaw()
46 {
47 printf("[RAW] Destructing\n");
48 close();
49 }
50 /**
51 \fn open
52 \brief Check that the streams are ok, initialize context...
53 */
54
open(const char * fil,ADM_videoStream * s,uint32_t nbAudioTrack,ADM_audioStream ** a)55 bool muxerRaw::open(const char *fil, ADM_videoStream *s,uint32_t nbAudioTrack,ADM_audioStream **a)
56 {
57
58 vStream=s;
59 file=ADM_fopen(fil,"w");
60 if(!file)
61 {
62 printf("[RawMuxer] Cannot open %s\n",fil);
63 return false;
64 }
65 return true;
66 }
67
68 /**
69 \fn save
70 */
save(void)71 bool muxerRaw::save(void)
72 {
73 printf("[RAW] Saving\n");
74 uint32_t bufSize=vStream->getWidth()*vStream->getHeight()*3;
75 uint8_t *buffer=new uint8_t[bufSize];
76 uint64_t rawDts;
77 uint64_t lastVideoDts=0;
78 int written=0;
79 bool result=true;
80 ADMBitstream in(bufSize);
81 in.data=buffer;
82 initUI(QT_TRANSLATE_NOOP("rawmuxer","Saving raw video"));
83 encoding->setContainer(QT_TRANSLATE_NOOP("rawmuxer","None"));
84 while(true==vStream->getPacket(&in))
85 {
86 if(in.dts==ADM_NO_PTS)
87 in.dts=lastVideoDts+videoIncrement;
88 encoding->pushVideoFrame(in.len,in.out_quantizer,in.dts);
89 if(updateUI()==false)
90 {
91 result=false;
92 goto abt;
93 }
94 fwrite(buffer,in.len,1,file);
95 written++;
96
97 }
98 abt:
99 closeUI();
100 delete [] buffer;
101 fclose(file);
102 file=NULL;
103 printf("[RAW] Wrote %d frames \n",written);
104 return result;
105 }
106 /**
107 \fn close
108 \brief Cleanup is done in the dtor
109 */
close(void)110 bool muxerRaw::close(void)
111 {
112 if(file)
113 {
114 fclose(file);
115 file=NULL;
116 }
117 return true;
118 }
119
120 //EOF
121
122
123
124