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