101 lines
2.3 KiB
C++
101 lines
2.3 KiB
C++
/*
|
|
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
/*
|
|
* data_manager.cc
|
|
*/
|
|
|
|
#include "data_manager.h"
|
|
|
|
#ifdef WEBRTC_ANDROID
|
|
extern "C" {
|
|
#endif
|
|
#include "jpeglib.h"
|
|
#ifdef WEBRTC_ANDROID
|
|
}
|
|
#endif
|
|
#include "jmorecfg.h"
|
|
|
|
|
|
namespace webrtc
|
|
{
|
|
|
|
typedef struct
|
|
{
|
|
jpeg_source_mgr mgr;
|
|
JOCTET* next_input_byte;
|
|
size_t bytes_in_buffer; /* # of byte spaces remaining in buffer */
|
|
} DataSrcMgr;
|
|
|
|
void
|
|
jpegSetSrcBuffer(j_decompress_ptr cinfo, JOCTET* srcBuffer, size_t bufferSize)
|
|
{
|
|
DataSrcMgr* src;
|
|
if (cinfo->src == NULL)
|
|
{ /* first time for this JPEG object? */
|
|
cinfo->src = (struct jpeg_source_mgr *)
|
|
(*cinfo->mem->alloc_small) ((j_common_ptr) cinfo,
|
|
JPOOL_PERMANENT, sizeof(DataSrcMgr));
|
|
}
|
|
|
|
// Setting required functionality
|
|
src = (DataSrcMgr*) cinfo->src;
|
|
src->mgr.init_source = initSrc;;
|
|
src->mgr.fill_input_buffer = fillInputBuffer;
|
|
src->mgr.skip_input_data = skipInputData;
|
|
src->mgr.resync_to_restart = jpeg_resync_to_restart; // use default
|
|
src->mgr.term_source = termSource;
|
|
// setting buffer/src
|
|
src->bytes_in_buffer = bufferSize;
|
|
src->next_input_byte = srcBuffer;
|
|
|
|
}
|
|
|
|
|
|
void
|
|
initSrc(j_decompress_ptr cinfo)
|
|
{
|
|
DataSrcMgr *src = (DataSrcMgr*)cinfo->src;
|
|
src->mgr.next_input_byte = src->next_input_byte;
|
|
src->mgr.bytes_in_buffer = src->bytes_in_buffer;
|
|
}
|
|
|
|
boolean
|
|
fillInputBuffer(j_decompress_ptr cinfo)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
|
|
void
|
|
skipInputData(j_decompress_ptr cinfo, long num_bytes)
|
|
{
|
|
DataSrcMgr* src = (DataSrcMgr*)cinfo->src;
|
|
if (num_bytes > 0)
|
|
{
|
|
if ((unsigned long)num_bytes > src->mgr.bytes_in_buffer)
|
|
src->mgr.bytes_in_buffer = 0;
|
|
else
|
|
{
|
|
src->mgr.next_input_byte += num_bytes;
|
|
src->mgr.bytes_in_buffer -= num_bytes;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void
|
|
termSource (j_decompress_ptr cinfo)
|
|
{
|
|
//
|
|
}
|
|
|
|
} // end of namespace webrtc
|