mirror of
				https://github.com/microsoft/playwright.git
				synced 2025-06-26 21:40:17 +00:00 
			
		
		
		
	
		
			
	
	
		
			51 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			51 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
|   | /*
 | ||
|  |  *  Copyright (c) 2014 The WebM project authors. All Rights Reserved. | ||
|  |  */ | ||
|  | 
 | ||
|  | /* This Source Code Form is subject to the terms of the Mozilla Public
 | ||
|  |  * License, v. 2.0. If a copy of the MPL was not distributed with this | ||
|  |  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | ||
|  | 
 | ||
|  | #include "WebMFileWriter.h"
 | ||
|  | 
 | ||
|  | #include <string>
 | ||
|  | #include "mkvmuxer/mkvmuxerutil.h"
 | ||
|  | 
 | ||
|  | namespace mozilla { | ||
|  | 
 | ||
|  | WebMFileWriter::WebMFileWriter(FILE* file, vpx_codec_enc_cfg_t* cfg) | ||
|  |     : m_cfg(cfg) | ||
|  |     , m_writer(new mkvmuxer::MkvWriter(file)) | ||
|  |     , m_segment(new mkvmuxer::Segment()) { | ||
|  |   m_segment->Init(m_writer.get()); | ||
|  |   m_segment->set_mode(mkvmuxer::Segment::kFile); | ||
|  |   m_segment->OutputCues(true); | ||
|  | 
 | ||
|  |   mkvmuxer::SegmentInfo* info = m_segment->GetSegmentInfo(); | ||
|  |   std::string version = "Playwright " + std::string(vpx_codec_version_str()); | ||
|  |   info->set_writing_app(version.c_str()); | ||
|  | 
 | ||
|  |   // Add vp8 track.
 | ||
|  |   m_videoTrackId = m_segment->AddVideoTrack( | ||
|  |       static_cast<int>(m_cfg->g_w), static_cast<int>(m_cfg->g_h), 0); | ||
|  |   if (!m_videoTrackId) { | ||
|  |     fprintf(stderr, "Failed to add video track\n"); | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | WebMFileWriter::~WebMFileWriter() {} | ||
|  | 
 | ||
|  | void WebMFileWriter::writeFrame(const vpx_codec_cx_pkt_t* pkt) { | ||
|  |   int64_t pts_ns = pkt->data.frame.pts * 1000000000ll * m_cfg->g_timebase.num / | ||
|  |                    m_cfg->g_timebase.den; | ||
|  |   m_segment->AddFrame(static_cast<uint8_t*>(pkt->data.frame.buf), | ||
|  |                       pkt->data.frame.sz, m_videoTrackId, pts_ns, | ||
|  |                       pkt->data.frame.flags & VPX_FRAME_IS_KEY); | ||
|  | } | ||
|  | 
 | ||
|  | void WebMFileWriter::finish() { | ||
|  |   m_segment->Finalize(); | ||
|  | } | ||
|  | 
 | ||
|  | } // namespace mozilla
 |